Fix OnCancelListener for Dialogs on swipe to dismiss.

am: 67639a5f67

Change-Id: I92bc472b3519020eeadf61b1e8047aee9e8bd96c
This commit is contained in:
Michael Kwan
2016-12-19 19:11:48 +00:00
committed by android-build-merger
3 changed files with 31 additions and 0 deletions

View File

@@ -185,6 +185,11 @@ public class Dialog implements DialogInterface, Window.Callback,
mWindow = w; mWindow = w;
w.setCallback(this); w.setCallback(this);
w.setOnWindowDismissedCallback(this); w.setOnWindowDismissedCallback(this);
w.setOnWindowSwipeDismissedCallback(() -> {
if (mCancelable) {
cancel();
}
});
w.setWindowManager(mWindowManager, null, null); w.setWindowManager(mWindowManager, null, null);
w.setGravity(Gravity.CENTER); w.setGravity(Gravity.CENTER);

View File

@@ -275,6 +275,7 @@ public abstract class Window {
private TypedArray mWindowStyle; private TypedArray mWindowStyle;
private Callback mCallback; private Callback mCallback;
private OnWindowDismissedCallback mOnWindowDismissedCallback; private OnWindowDismissedCallback mOnWindowDismissedCallback;
private OnWindowSwipeDismissedCallback mOnWindowSwipeDismissedCallback;
private WindowControllerCallback mWindowControllerCallback; private WindowControllerCallback mWindowControllerCallback;
private OnRestrictedCaptionAreaChangedListener mOnRestrictedCaptionAreaChangedListener; private OnRestrictedCaptionAreaChangedListener mOnRestrictedCaptionAreaChangedListener;
private Rect mRestrictedCaptionAreaRect; private Rect mRestrictedCaptionAreaRect;
@@ -587,6 +588,18 @@ public abstract class Window {
void onWindowDismissed(boolean finishTask, boolean suppressWindowTransition); void onWindowDismissed(boolean finishTask, boolean suppressWindowTransition);
} }
/** @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 */ /** @hide */
public interface WindowControllerCallback { public interface WindowControllerCallback {
/** /**
@@ -880,6 +893,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 */ /** @hide */
public final void setWindowControllerCallback(WindowControllerCallback wccb) { public final void setWindowControllerCallback(WindowControllerCallback wccb) {
mWindowControllerCallback = wccb; mWindowControllerCallback = wccb;

View File

@@ -2990,6 +2990,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
swipeDismiss.setOnDismissedListener(new SwipeDismissLayout.OnDismissedListener() { swipeDismiss.setOnDismissedListener(new SwipeDismissLayout.OnDismissedListener() {
@Override @Override
public void onDismissed(SwipeDismissLayout layout) { public void onDismissed(SwipeDismissLayout layout) {
dispatchOnWindowSwipeDismissed();
dispatchOnWindowDismissed(false /*finishTask*/, true /*suppressWindowTransition*/); dispatchOnWindowDismissed(false /*finishTask*/, true /*suppressWindowTransition*/);
} }
}); });