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

Commit 8f432ce9 authored by Jason Chang's avatar Jason Chang
Browse files

Fix hold volume keys don't trigger the one handed mode in

One-handed mode settings page

Add to support observing A11y's Shortcut Hardware provider key
ACCESSIBILITY_SHORTCUT_TARGET_SERVICE

Bug: 193411296

Test: manual verified on System > Gestures > One-handed mode shortcut

Test: make RunSettingsRoboTests ROBOTEST_FILTER=
      "com.android.settings.gestures
      .OneHandedEnablePreferenceControllerTest"
Test: make RunSettingsRoboTests ROBOTEST_FILTER=
      "com.android.settings.gestures
      .OneHandedMainSwitchPreferenceControllerTest"
Test: make RunSettingsRoboTests ROBOTEST_FILTER=
      "com.android.settings.gestures
      .OneHandedActionPullDownPrefControllerTest"
Test: make RunSettingsRoboTests ROBOTEST_FILTER=
      "com.android.settings.gestures
      .OneHandedActionShowNotificationPrefControllerTest"
Test: make RunSettingsRoboTests ROBOTEST_FILTER=
"com.android.settings.gestures
.OneHandedPreferenceCategoryControllerTest"

Change-Id: I4704a56873f14e52db8f7c0468eed17f190c5dce
parent 47837d28
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -93,7 +93,8 @@ public class OneHandedActionPullDownPrefController extends BasePreferenceControl
            return;
        }
        if (uri.equals(OneHandedSettingsUtils.ONE_HANDED_MODE_ENABLED_URI)
                || uri.equals(OneHandedSettingsUtils.SHORTCUT_ENABLED_URI)) {
                || uri.equals(OneHandedSettingsUtils.SOFTWARE_SHORTCUT_ENABLED_URI)
                || uri.equals(OneHandedSettingsUtils.HARDWARE_SHORTCUT_ENABLED_URI)) {
            mPreference.setEnabled(OneHandedSettingsUtils.canEnableController(mContext));
        } else if (uri.equals(OneHandedSettingsUtils.SHOW_NOTIFICATION_ENABLED_URI)) {
            updateState(mPreference);
+2 −1
Original line number Diff line number Diff line
@@ -93,7 +93,8 @@ public class OneHandedActionShowNotificationPrefController extends BasePreferenc
            return;
        }
        if (uri.equals(OneHandedSettingsUtils.ONE_HANDED_MODE_ENABLED_URI)
                || uri.equals(OneHandedSettingsUtils.SHORTCUT_ENABLED_URI)) {
                || uri.equals(OneHandedSettingsUtils.SOFTWARE_SHORTCUT_ENABLED_URI)
                || uri.equals(OneHandedSettingsUtils.HARDWARE_SHORTCUT_ENABLED_URI)) {
            mPreference.setEnabled(OneHandedSettingsUtils.canEnableController(mContext));
        } else if (uri.equals(OneHandedSettingsUtils.SHOW_NOTIFICATION_ENABLED_URI)) {
            updateState(mPreference);
+19 −4
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.os.Looper;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.provider.Settings;
import android.text.TextUtils;

import androidx.annotation.VisibleForTesting;

@@ -45,8 +46,10 @@ public class OneHandedSettingsUtils {
            Settings.Secure.getUriFor(Settings.Secure.ONE_HANDED_MODE_ENABLED);
    static final Uri SHOW_NOTIFICATION_ENABLED_URI =
            Settings.Secure.getUriFor(Settings.Secure.SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED);
    static final Uri SHORTCUT_ENABLED_URI =
    static final Uri SOFTWARE_SHORTCUT_ENABLED_URI =
            Settings.Secure.getUriFor(Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS);
    static final Uri HARDWARE_SHORTCUT_ENABLED_URI =
            Settings.Secure.getUriFor(Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE);

    public enum OneHandedTimeout {
        NEVER(0), SHORT(4), MEDIUM(8), LONG(12);
@@ -238,9 +241,20 @@ public class OneHandedSettingsUtils {
     * @return true if user enabled one-handed shortcut in settings, false otherwise.
     */
    public static boolean getShortcutEnabled(Context context) {
        final String targets = Settings.Secure.getStringForUser(context.getContentResolver(),
        // Checks SOFTWARE_SHORTCUT_KEY
        final String targetsSW = Settings.Secure.getStringForUser(context.getContentResolver(),
                Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, sCurrentUserId);
        return targets != null ? targets.contains(ONE_HANDED_MODE_TARGET_NAME) : false;
        if (!TextUtils.isEmpty(targetsSW) && targetsSW.contains(ONE_HANDED_MODE_TARGET_NAME)) {
            return true;
        }

        // Checks HARDWARE_SHORTCUT_KEY
        final String targetsHW = Settings.Secure.getStringForUser(context.getContentResolver(),
                Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE, sCurrentUserId);
        if (!TextUtils.isEmpty(targetsHW) && targetsHW.contains(ONE_HANDED_MODE_TARGET_NAME)) {
            return true;
        }
        return false;
    }

    /**
@@ -285,7 +299,8 @@ public class OneHandedSettingsUtils {
            final ContentResolver resolver = mContext.getContentResolver();
            resolver.registerContentObserver(ONE_HANDED_MODE_ENABLED_URI, true, this);
            resolver.registerContentObserver(SHOW_NOTIFICATION_ENABLED_URI, true, this);
            resolver.registerContentObserver(SHORTCUT_ENABLED_URI, true, this);
            resolver.registerContentObserver(SOFTWARE_SHORTCUT_ENABLED_URI, true, this);
            resolver.registerContentObserver(HARDWARE_SHORTCUT_ENABLED_URI, true, this);
        }

        @Override