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;
w.setCallback(this);
w.setOnWindowDismissedCallback(this);
w.setOnWindowSwipeDismissedCallback(() -> {
if (mCancelable) {
cancel();
}
});
w.setWindowManager(mWindowManager, null, null);
w.setGravity(Gravity.CENTER);

View File

@@ -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;
@@ -587,6 +588,18 @@ public abstract class Window {
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 */
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 */
public final void setWindowControllerCallback(WindowControllerCallback wccb) {
mWindowControllerCallback = wccb;

View File

@@ -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*/);
}
});