diff options
| author | 2016-12-19 19:05:49 +0000 | |
|---|---|---|
| committer | 2016-12-19 19:05:53 +0000 | |
| commit | a586b546c3f6cf60612642ec9ad461fbdbe5dfb2 (patch) | |
| tree | f030ed111a50990b75385a58b6c3f4bf9fc51a41 | |
| parent | 536dc4ecc4367d9569477528f48e4e7ceb03c5a4 (diff) | |
| parent | 67639a5f678f3e472210e5cf6060592430a5ffbb (diff) | |
Merge "Fix OnCancelListener for Dialogs on swipe to dismiss." into cw-f-dev
| -rw-r--r-- | core/java/android/app/Dialog.java | 5 | ||||
| -rw-r--r-- | core/java/android/view/Window.java | 25 | ||||
| -rw-r--r-- | core/java/com/android/internal/policy/PhoneWindow.java | 1 |
3 files changed, 31 insertions, 0 deletions
diff --git a/core/java/android/app/Dialog.java b/core/java/android/app/Dialog.java index 9c1778010f43..72ccf72d2d05 100644 --- a/core/java/android/app/Dialog.java +++ b/core/java/android/app/Dialog.java @@ -185,6 +185,11 @@ public class Dialog implements DialogInterface, Window.Callback, mWindow = w; w.setCallback(this); w.setOnWindowDismissedCallback(this); + w.setOnWindowSwipeDismissedCallback(() -> { + if (mCancelable) { + cancel(); + } + }); w.setWindowManager(mWindowManager, null, null); w.setGravity(Gravity.CENTER); diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java index a36127db559f..c3ae9d9ef1c1 100644 --- a/core/java/android/view/Window.java +++ b/core/java/android/view/Window.java @@ -275,6 +275,7 @@ public abstract class Window { private TypedArray mWindowStyle; private Callback mCallback; private OnWindowDismissedCallback mOnWindowDismissedCallback; + private OnWindowSwipeDismissedCallback mOnWindowSwipeDismissedCallback; private WindowControllerCallback mWindowControllerCallback; private OnRestrictedCaptionAreaChangedListener mOnRestrictedCaptionAreaChangedListener; private Rect mRestrictedCaptionAreaRect; @@ -588,6 +589,18 @@ public abstract class Window { } /** @hide */ + public interface OnWindowSwipeDismissedCallback { + /** + * Called when a window is swipe dismissed. This informs the callback that the + * window is gone, and it should finish itself. + * @param finishTask True if the task should also be finished. + * @param suppressWindowTransition True if the resulting exit and enter window transition + * animations should be suppressed. + */ + void onWindowSwipeDismissed(); + } + + /** @hide */ public interface WindowControllerCallback { /** * Moves the activity from @@ -881,6 +894,18 @@ public abstract class Window { } /** @hide */ + public final void setOnWindowSwipeDismissedCallback(OnWindowSwipeDismissedCallback sdcb) { + mOnWindowSwipeDismissedCallback = sdcb; + } + + /** @hide */ + public final void dispatchOnWindowSwipeDismissed() { + if (mOnWindowSwipeDismissedCallback != null) { + mOnWindowSwipeDismissedCallback.onWindowSwipeDismissed(); + } + } + + /** @hide */ public final void setWindowControllerCallback(WindowControllerCallback wccb) { mWindowControllerCallback = wccb; } diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java index 5d25b1b9de08..920a6cb0f84c 100644 --- a/core/java/com/android/internal/policy/PhoneWindow.java +++ b/core/java/com/android/internal/policy/PhoneWindow.java @@ -2990,6 +2990,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { swipeDismiss.setOnDismissedListener(new SwipeDismissLayout.OnDismissedListener() { @Override public void onDismissed(SwipeDismissLayout layout) { + dispatchOnWindowSwipeDismissed(); dispatchOnWindowDismissed(false /*finishTask*/, true /*suppressWindowTransition*/); } }); |