Fix OnCancelListener for Dialogs on swipe to dismiss.
Swipe to dismiss on dialogs did not dispatch onCancel events to OnCancelListeners. Resolve by adding listener to monitor swipe to dismiss events and dispatch onCancel events when that occurs. Bug: 33663411 Change-Id: I64ff29e008d485a4559eb3d1ff7f0e74dccff404
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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*/);
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user