Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 91200125 authored by Michael Kwan's avatar Michael Kwan Committed by android-build-merger
Browse files

Disable swipe-to-dismiss for not cancelable dialogs.

am: f7964be9

Change-Id: I4a6cad65f91368393272cd8f7d6012d131ec56ff
parents 52ae3289 f7964be9
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -200,6 +200,7 @@ public class Dialog implements DialogInterface, Window.Callback,
            @Nullable Message cancelCallback) {
        this(context);
        mCancelable = cancelable;
        updateWindowForCancelable();
        mCancelMessage = cancelCallback;
    }

@@ -207,6 +208,7 @@ public class Dialog implements DialogInterface, Window.Callback,
            @Nullable OnCancelListener cancelListener) {
        this(context);
        mCancelable = cancelable;
        updateWindowForCancelable();
        setOnCancelListener(cancelListener);
    }

@@ -1187,6 +1189,7 @@ public class Dialog implements DialogInterface, Window.Callback,
     */
    public void setCancelable(boolean flag) {
        mCancelable = flag;
        updateWindowForCancelable();
    }

    /**
@@ -1200,6 +1203,7 @@ public class Dialog implements DialogInterface, Window.Callback,
    public void setCanceledOnTouchOutside(boolean cancel) {
        if (cancel && !mCancelable) {
            mCancelable = true;
            updateWindowForCancelable();
        }
        
        mWindow.setCloseOnTouchOutside(cancel);
@@ -1351,4 +1355,8 @@ public class Dialog implements DialogInterface, Window.Callback,
            }
        }
    }

    private void updateWindowForCancelable() {
        mWindow.setCloseOnSwipeEnabled(mCancelable);
    }
}
+18 −0
Original line number Diff line number Diff line
@@ -302,6 +302,7 @@ public abstract class Window {
    private boolean mDestroyed;

    private boolean mOverlayWithDecorCaptionEnabled = false;
    private boolean mCloseOnSwipeEnabled = false;

    // The current window attributes.
    private final WindowManager.LayoutParams mWindowAttributes =
@@ -2208,4 +2209,21 @@ public abstract class Window {
     * @hide
     */
    public abstract void reportActivityRelaunched();

    /**
     * Called to set flag to check if the close on swipe is enabled. This will only function if
     * FEATURE_SWIPE_TO_DISMISS has been set.
     * @hide
     */
    public void setCloseOnSwipeEnabled(boolean closeOnSwipeEnabled) {
        mCloseOnSwipeEnabled = closeOnSwipeEnabled;
    }

    /**
     * @return {@code true} if the close on swipe is enabled.
     * @hide
     */
    public boolean isCloseOnSwipeEnabled() {
        return mCloseOnSwipeEnabled;
    }
}
+18 −4
Original line number Diff line number Diff line
@@ -2495,6 +2495,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
        // System.out.println("Features: 0x" + Integer.toHexString(features));
        if ((features & (1 << FEATURE_SWIPE_TO_DISMISS)) != 0) {
            layoutResource = R.layout.screen_swipe_dismiss;
            setCloseOnSwipeEnabled(true);
        } else if ((features & ((1 << FEATURE_LEFT_ICON) | (1 << FEATURE_RIGHT_ICON))) != 0) {
            if (mIsFloating) {
                TypedValue res = new TypedValue();
@@ -2566,7 +2567,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
        }

        if ((features & (1 << FEATURE_SWIPE_TO_DISMISS)) != 0) {
            registerSwipeCallbacks();
            registerSwipeCallbacks(contentParent);
        }

        // Remaining setup -- of background and title -- that only applies
@@ -2980,9 +2981,12 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
        return (mRightIconView = (ImageView)findViewById(R.id.right_icon));
    }

    private void registerSwipeCallbacks() {
        SwipeDismissLayout swipeDismiss =
                (SwipeDismissLayout) findViewById(R.id.content);
    private void registerSwipeCallbacks(ViewGroup contentParent) {
        if (!(contentParent instanceof SwipeDismissLayout)) {
            Log.w(TAG, "contentParent is not a SwipeDismissLayout: " + contentParent);
            return;
        }
        SwipeDismissLayout swipeDismiss = (SwipeDismissLayout) contentParent;
        swipeDismiss.setOnDismissedListener(new SwipeDismissLayout.OnDismissedListener() {
            @Override
            public void onDismissed(SwipeDismissLayout layout) {
@@ -3021,6 +3025,16 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
                });
    }

    /** @hide */
    @Override
    public void setCloseOnSwipeEnabled(boolean closeOnSwipeEnabled) {
        if (hasFeature(Window.FEATURE_SWIPE_TO_DISMISS) // swipe-to-dismiss feature is requested
                && mContentParent instanceof SwipeDismissLayout) { // check casting mContentParent
            ((SwipeDismissLayout) mContentParent).setDismissable(closeOnSwipeEnabled);
        }
        super.setCloseOnSwipeEnabled(closeOnSwipeEnabled);
    }

    /**
     * Helper method for calling the {@link Callback#onPanelClosed(int, Menu)}
     * callback. This method will grab whatever extra state is needed for the
+16 −1
Original line number Diff line number Diff line
@@ -110,6 +110,8 @@ public class SwipeDismissLayout extends FrameLayout {

    private float mLastX;

    private boolean mDismissable = true;

    public SwipeDismissLayout(Context context) {
        super(context);
        init(context);
@@ -166,6 +168,10 @@ public class SwipeDismissLayout extends FrameLayout {

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        if (!mDismissable) {
            return super.onInterceptTouchEvent(ev);
        }

        // offset because the view is translated during swipe
        ev.offsetLocation(mTranslationX, 0);

@@ -225,7 +231,7 @@ public class SwipeDismissLayout extends FrameLayout {

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        if (mVelocityTracker == null) {
        if (mVelocityTracker == null || !mDismissable) {
            return super.onTouchEvent(ev);
        }
        // offset because the view is translated during swipe
@@ -363,4 +369,13 @@ public class SwipeDismissLayout extends FrameLayout {

        return checkV && v.canScrollHorizontally((int) -dx);
    }

    public void setDismissable(boolean dismissable) {
        if (!dismissable && mDismissable) {
            cancel();
            resetMembers();
        }

        mDismissable = dismissable;
    }
}