diff options
| author | 2016-12-19 19:17:56 +0000 | |
|---|---|---|
| committer | 2016-12-19 19:17:56 +0000 | |
| commit | 34df02eec2aa3c9b095c9264a7483f8e2ad55e99 (patch) | |
| tree | 01319ee6c75d0f42b388d905168e92b9dd658ab9 | |
| parent | 75bb16acc7a12ea395542317e3722a00dce453be (diff) | |
| parent | a2160c27f9a5b1f92f3e34a19d321212c2b0f069 (diff) | |
Fix OnCancelListener for Dialogs on swipe to dismiss. am: 67639a5f67
am: a2160c27f9
Change-Id: I4b0ecf9f50e43c7026a52f767af1bc9717626148
| -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*/); } }); |