summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Michael Kwan <mkwan@google.com> 2016-12-19 19:17:56 +0000
committer android-build-merger <android-build-merger@google.com> 2016-12-19 19:17:56 +0000
commit34df02eec2aa3c9b095c9264a7483f8e2ad55e99 (patch)
tree01319ee6c75d0f42b388d905168e92b9dd658ab9
parent75bb16acc7a12ea395542317e3722a00dce453be (diff)
parenta2160c27f9a5b1f92f3e34a19d321212c2b0f069 (diff)
Fix OnCancelListener for Dialogs on swipe to dismiss. am: 67639a5f67
am: a2160c27f9 Change-Id: I4b0ecf9f50e43c7026a52f767af1bc9717626148
-rw-r--r--core/java/android/app/Dialog.java5
-rw-r--r--core/java/android/view/Window.java25
-rw-r--r--core/java/com/android/internal/policy/PhoneWindow.java1
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*/);
}
});