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

Commit bf6a3ff8 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Make 3-button supports swipe to expand notification gesture"

parents 8a6813c9 31b843c9
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -159,7 +159,7 @@ public class OneHandedGestureHandler implements OneHandedTransitionCallback,
                    } else {
                        float distance = (float) Math.hypot(mLastPos.x - mDownPos.x,
                                mLastPos.y - mDownPos.y);
                        if (distance > mDragDistThreshold && mPassedSlop) {
                        if (distance > mDragDistThreshold) {
                            mGestureEventCallback.onStop();
                        }
                    }
@@ -273,13 +273,13 @@ public class OneHandedGestureHandler implements OneHandedTransitionCallback,
     */
    public interface OneHandedGestureEventCallback {
        /**
         * Handle the start event event, and return whether the event was consumed.
         * Handles the start gesture.
         */
        boolean onStart();
        void onStart();

        /**
         * Handle the exit event event, and return whether the event was consumed.
         * Handles the exit gesture.
         */
        boolean onStop();
        void onStop();
    }
}
+57 −54
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.graphics.Point;
import android.graphics.Rect;
import android.view.KeyEvent;

import androidx.annotation.NonNull;

@@ -33,6 +34,7 @@ import com.android.systemui.R;
import com.android.systemui.model.SysUiState;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.TaskStackChangeListener;
import com.android.systemui.statusbar.CommandQueue;
import com.android.wm.shell.common.DisplayChangeController;
import com.android.wm.shell.common.DisplayController;

@@ -50,9 +52,11 @@ public class OneHandedManagerImpl implements OneHandedManager, Dumpable {
    private static final String TAG = "OneHandedManager";

    private boolean mIsOneHandedEnabled;
    private boolean mIsSwipeToNotificationEnabled;
    private boolean mTaskChangeToExit;
    private float mOffSetFraction;

    private final CommandQueue mCommandQueue;
    private final DisplayController mDisplayController;
    private final OneHandedGestureHandler mGestureHandler;
    private final OneHandedTimeoutHandler mTimeoutHandler;
@@ -60,11 +64,7 @@ public class OneHandedManagerImpl implements OneHandedManager, Dumpable {
    private final OneHandedTutorialHandler mTutorialHandler;
    private final SysUiState mSysUiFlagContainer;

    private Context mContext;
    private OneHandedDisplayAreaOrganizer mDisplayAreaOrganizer;
    private OneHandedGestureHandler.OneHandedGestureEventCallback mGestureEventCallback;
    private OneHandedTouchHandler.OneHandedTouchEventCallback mTouchEventCallback;
    private OneHandedTransitionCallback mTransitionCallback;

    /**
     * Handler for system task stack changes, exit when user lunch new task or bring task to front
@@ -105,13 +105,14 @@ public class OneHandedManagerImpl implements OneHandedManager, Dumpable {
     */
    @Inject
    public OneHandedManagerImpl(Context context,
            CommandQueue commandQueue,
            DisplayController displayController,
            OneHandedDisplayAreaOrganizer displayAreaOrganizer,
            OneHandedTouchHandler touchHandler,
            OneHandedTutorialHandler tutorialHandler,
            OneHandedGestureHandler gestureHandler,
            SysUiState sysUiState) {
        mContext = context;
        mCommandQueue = commandQueue;
        mDisplayAreaOrganizer = displayAreaOrganizer;
        mDisplayController = displayController;
        mDisplayController.addDisplayChangingController(mRotationController);
@@ -120,6 +121,8 @@ public class OneHandedManagerImpl implements OneHandedManager, Dumpable {
                context.getResources().getFraction(R.fraction.config_one_handed_offset, 1, 1);
        mIsOneHandedEnabled = OneHandedSettingsUtil.getSettingsOneHandedModeEnabled(
                context.getContentResolver());
        mIsSwipeToNotificationEnabled = OneHandedSettingsUtil.getSettingsSwipeToNotificationEnabled(
                context.getContentResolver());
        mTimeoutHandler = OneHandedTimeoutHandler.get();
        mTouchHandler = touchHandler;
        mTutorialHandler = tutorialHandler;
@@ -148,11 +151,19 @@ public class OneHandedManagerImpl implements OneHandedManager, Dumpable {
    }

    /**
     * Start one handed mode
     * Sets whether to enable swipe bottom to notification gesture when user update settings.
     */
    public void setSwipeToNotificationEnabled(boolean enabled) {
        mIsSwipeToNotificationEnabled = enabled;
        updateOneHandedEnabled();
    }

    /**
     * Enters one handed mode.
     */
    @Override
    public void startOneHanded() {
        if (!mDisplayAreaOrganizer.isInOneHanded() && mIsOneHandedEnabled) {
        if (!mDisplayAreaOrganizer.isInOneHanded()) {
            final int yOffSet = Math.round(getDisplaySize().y * mOffSetFraction);
            mDisplayAreaOrganizer.scheduleOffset(0, yOffSet);
            mTimeoutHandler.resetTimer();
@@ -160,7 +171,7 @@ public class OneHandedManagerImpl implements OneHandedManager, Dumpable {
    }

    /**
     * Stop one handed mode
     * Exits one handed mode.
     */
    @Override
    public void stopOneHanded() {
@@ -171,53 +182,45 @@ public class OneHandedManagerImpl implements OneHandedManager, Dumpable {
    }

    private void setupGestures() {
        mTouchEventCallback = new OneHandedTouchHandler.OneHandedTouchEventCallback() {
        mTouchHandler.registerTouchEventListener(
                new OneHandedTouchHandler.OneHandedTouchEventCallback() {
                    @Override
            public boolean onStart() {
                boolean result = false;
                if (!mDisplayAreaOrganizer.isInOneHanded()) {
                    public void onStart() {
                        if (mIsOneHandedEnabled) {
                            startOneHanded();
                    result = true;
                        }
                return result;
                    }

                    @Override
            public boolean onStop() {
                boolean result = false;
                if (mDisplayAreaOrganizer.isInOneHanded()) {
                    public void onStop() {
                        if (mIsOneHandedEnabled) {
                            stopOneHanded();
                    result = true;
                        }
                return result;
                    }
        };
        mTouchHandler.registerTouchEventListener(mTouchEventCallback);
                });

        mGestureEventCallback = new OneHandedGestureHandler.OneHandedGestureEventCallback() {
        mGestureHandler.setGestureEventListener(
                new OneHandedGestureHandler.OneHandedGestureEventCallback() {
                    @Override
            public boolean onStart() {
                boolean result = false;
                if (!mDisplayAreaOrganizer.isInOneHanded()) {
                    public void onStart() {
                        if (mIsOneHandedEnabled) {
                            startOneHanded();
                    result = true;
                        } else if (mIsSwipeToNotificationEnabled) {
                            mCommandQueue.handleSystemKey(KeyEvent.KEYCODE_SYSTEM_NAVIGATION_DOWN);
                        }
                return result;
                    }

                    @Override
            public boolean onStop() {
                boolean result = false;
                if (mDisplayAreaOrganizer.isInOneHanded()) {
                    public void onStop() {
                        if (mIsOneHandedEnabled) {
                            stopOneHanded();
                    result = true;
                        } else if (mIsSwipeToNotificationEnabled) {
                            mCommandQueue.handleSystemKey(KeyEvent.KEYCODE_SYSTEM_NAVIGATION_UP);
                        }
                return result;
                    }
        };
        mGestureHandler.setGestureEventListener(mGestureEventCallback);
                });

        mTransitionCallback = new OneHandedTransitionCallback() {
        mDisplayAreaOrganizer.registerTransitionCallback(new OneHandedTransitionCallback() {
            @Override
            public void onStartFinished(Rect bounds) {
                mSysUiFlagContainer.setFlag(SYSUI_STATE_ONE_HANDED_ACTIVE,
@@ -229,8 +232,8 @@ public class OneHandedManagerImpl implements OneHandedManager, Dumpable {
                mSysUiFlagContainer.setFlag(SYSUI_STATE_ONE_HANDED_ACTIVE,
                        false).commitUpdate(DEFAULT_DISPLAY);
            }
        };
        mDisplayAreaOrganizer.registerTransitionCallback(mTransitionCallback);
        });

        mDisplayAreaOrganizer.registerTransitionCallback(mTouchHandler);
        mDisplayAreaOrganizer.registerTransitionCallback(mGestureHandler);
        mDisplayAreaOrganizer.registerTransitionCallback(mTutorialHandler);
@@ -264,7 +267,7 @@ public class OneHandedManagerImpl implements OneHandedManager, Dumpable {
            ActivityManagerWrapper.getInstance().registerTaskStackListener(mTaskStackListener);
        }
        mTouchHandler.onOneHandedEnabled(mIsOneHandedEnabled);
        mGestureHandler.onOneHandedEnabled(mIsOneHandedEnabled);
        mGestureHandler.onOneHandedEnabled(mIsOneHandedEnabled || mIsSwipeToNotificationEnabled);
    }

    @Override
+8 −0
Original line number Diff line number Diff line
@@ -132,6 +132,14 @@ public final class OneHandedSettingsUtil {
                Settings.Secure.ONE_HANDED_MODE_TIMEOUT, ONE_HANDED_TIMEOUT_MEDIUM_IN_SECONDS);
    }

    /**
     * Returns whether swipe bottom to notification gesture enabled or not.
     */
    public static boolean getSettingsSwipeToNotificationEnabled(ContentResolver resolver) {
        return Settings.Secure.getInt(resolver,
                Settings.Secure.SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED, 0) == 1;
    }

    protected static void dump(PrintWriter pw, String prefix, ContentResolver resolver) {
        final String innerPrefix = prefix + "  ";
        pw.println(prefix + TAG);
+4 −4
Original line number Diff line number Diff line
@@ -175,13 +175,13 @@ public class OneHandedTouchHandler implements OneHandedTransitionCallback, Dumpa
     */
    public interface OneHandedTouchEventCallback {
        /**
         * Handle the start event event, and return whether the event was consumed.
         * Handle the start event.
         */
        boolean onStart();
        void onStart();

        /**
         * Handle the exit event event, and return whether the event was consumed.
         * Handle the exit event.
         */
        boolean onStop();
        void onStop();
    }
}
+27 −3
Original line number Diff line number Diff line
@@ -40,7 +40,6 @@ import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.Dependency;
import com.android.systemui.Dumpable;
import com.android.systemui.SystemUI;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.keyguard.ScreenLifecycle;
import com.android.systemui.statusbar.CommandQueue;

@@ -80,7 +79,10 @@ public class OneHandedUI extends SystemUI implements CommandQueue.Callbacks, Dum
                mOneHandedManager.setOneHandedEnabled(enabled);
            }

            setEnabledGesturalOverlay(enabled);
            // Also checks swipe to notification settings since they all need gesture overlay.
            setEnabledGesturalOverlay(
                    enabled || OneHandedSettingsUtil.getSettingsSwipeToNotificationEnabled(
                            mContext.getContentResolver()));
        }
    };

@@ -130,11 +132,28 @@ public class OneHandedUI extends SystemUI implements CommandQueue.Callbacks, Dum
        }
    };

    private final ContentObserver mSwipeToNotificationEnabledObserver =
            new ContentObserver(mMainHandler) {
                @Override
                public void onChange(boolean selfChange) {
                    final boolean enabled =
                            OneHandedSettingsUtil.getSettingsSwipeToNotificationEnabled(
                                    mContext.getContentResolver());
                    if (mOneHandedManager != null) {
                        mOneHandedManager.setSwipeToNotificationEnabled(enabled);
                    }

                    // Also checks one handed mode settings since they all need gesture overlay.
                    setEnabledGesturalOverlay(
                            enabled || OneHandedSettingsUtil.getSettingsOneHandedModeEnabled(
                                    mContext.getContentResolver()));
                }
            };

    @Inject
    public OneHandedUI(Context context,
            CommandQueue commandQueue,
            OneHandedManagerImpl oneHandedManager,
            DumpManager dumpManager,
            OneHandedSettingsUtil settingsUtil,
            ScreenLifecycle screenLifecycle) {
        super(context);
@@ -239,6 +258,9 @@ public class OneHandedUI extends SystemUI implements CommandQueue.Callbacks, Dum
                mContext.getContentResolver(), mTimeoutObserver);
        mSettingUtil.registerSettingsKeyObserver(Settings.Secure.TAPS_APP_TO_EXIT,
                mContext.getContentResolver(), mTaskChangeExitObserver);
        mSettingUtil.registerSettingsKeyObserver(
                Settings.Secure.SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED,
                mContext.getContentResolver(), mSwipeToNotificationEnabledObserver);
    }

    private void updateSettings() {
@@ -248,6 +270,8 @@ public class OneHandedUI extends SystemUI implements CommandQueue.Callbacks, Dum
                mSettingUtil.getSettingsOneHandedModeTimeout(mContext.getContentResolver()));
        mOneHandedManager.setTaskChangeToExit(
                mSettingUtil.getSettingsTapsAppToExit(mContext.getContentResolver()));
        mOneHandedManager.setSwipeToNotificationEnabled(
                mSettingUtil.getSettingsSwipeToNotificationEnabled(mContext.getContentResolver()));
    }

    @Override
Loading