Merge "Accessibility shortcut secondary action - fix magnification triple tap logic"
diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
index c0f6493..ba97a4e 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
@@ -17,6 +17,8 @@
 package com.android.settings.accessibility;
 
 import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_CONTROLLER_NAME;
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
 
 import android.app.Dialog;
 import android.app.settings.SettingsEnums;
@@ -64,12 +66,12 @@
 
     private static final String SETTINGS_KEY = "screen_magnification_settings";
     private static final String EXTRA_SHORTCUT_TYPE = "shortcut_type";
+    private static final String KEY_SHORTCUT_PREFERENCE = "shortcut_preference";
     private ShortcutPreference mShortcutPreference;
     private int mUserShortcutType = UserShortcutType.DEFAULT;
     private CheckBox mSoftwareTypeCheckBox;
     private CheckBox mHardwareTypeCheckBox;
     private CheckBox mTripleTapTypeCheckBox;
-    private static final String KEY_SHORTCUT_PREFERENCE = "shortcut_preference";
 
     // TODO(b/147021230): Will move common functions and variables to
     //  android/internal/accessibility folder. For now, magnification need to be treated
@@ -530,15 +532,21 @@
 
     private static void optInMagnificationValueToSettings(Context context,
             @UserShortcutType int shortcutType) {
-        final String targetKey = AccessibilityUtil.convertKeyFromSettings(shortcutType);
-        final String targetString = Settings.Secure.getString(context.getContentResolver(),
-                targetKey);
+        if (shortcutType == UserShortcutType.TRIPLETAP) {
+            Settings.Secure.putInt(context.getContentResolver(),
+                    Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, ON);
+            return;
+        }
 
         if (hasMagnificationValueInSettings(context, shortcutType)) {
             return;
         }
 
+        final String targetKey = AccessibilityUtil.convertKeyFromSettings(shortcutType);
+        final String targetString = Settings.Secure.getString(context.getContentResolver(),
+                targetKey);
         final StringJoiner joiner = new StringJoiner(String.valueOf(COMPONENT_NAME_SEPARATOR));
+
         if (!TextUtils.isEmpty(targetString)) {
             joiner.add(targetString);
         }
@@ -563,7 +571,12 @@
 
     private static void optOutMagnificationValueFromSettings(Context context,
             @UserShortcutType int shortcutType) {
-        final StringJoiner joiner = new StringJoiner(String.valueOf(COMPONENT_NAME_SEPARATOR));
+        if (shortcutType == UserShortcutType.TRIPLETAP) {
+            Settings.Secure.putInt(context.getContentResolver(),
+                    Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, OFF);
+            return;
+        }
+
         final String targetKey = AccessibilityUtil.convertKeyFromSettings(shortcutType);
         final String targetString = Settings.Secure.getString(context.getContentResolver(),
                 targetKey);
@@ -572,6 +585,8 @@
             return;
         }
 
+        final StringJoiner joiner = new StringJoiner(String.valueOf(COMPONENT_NAME_SEPARATOR));
+
         sStringColonSplitter.setString(targetString);
         while (sStringColonSplitter.hasNext()) {
             final String name = sStringColonSplitter.next();
@@ -602,6 +617,11 @@
 
     private static boolean hasMagnificationValueInSettings(Context context,
             @UserShortcutType int shortcutType) {
+        if (shortcutType == UserShortcutType.TRIPLETAP) {
+            return Settings.Secure.getInt(context.getContentResolver(),
+                    Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, OFF) == ON;
+        }
+
         final String targetKey = AccessibilityUtil.convertKeyFromSettings(shortcutType);
         final String targetString = Settings.Secure.getString(context.getContentResolver(),
                 targetKey);
diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java
index 3a2aa4c..6cf9ad6 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.accessibility;
 
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
 import static com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
 
 import static com.google.common.truth.Truth.assertThat;
@@ -55,7 +57,7 @@
 
     @Test
     public void hasValueInSettings_putValue_hasValue() {
-        putStringIntoSettings(TRIPLETAP_SHORTCUT_KEY, MAGNIFICATION_CONTROLLER_NAME);
+        setMagnificationTripleTapEnabled(/* enabled= */ true);
 
         assertThat(ToggleScreenMagnificationPreferenceFragment.hasMagnificationValuesInSettings(
                 mContext, UserShortcutType.TRIPLETAP)).isTrue();
@@ -70,8 +72,7 @@
 
         assertThat(getStringFromSettings(SOFTWARE_SHORTCUT_KEY)).isEqualTo(
                 MAGNIFICATION_CONTROLLER_NAME);
-        assertThat(getStringFromSettings(TRIPLETAP_SHORTCUT_KEY)).isEqualTo(
-                MAGNIFICATION_CONTROLLER_NAME);
+        assertThat(getMagnificationTripleTapStatus()).isTrue();
 
     }
 
@@ -91,7 +92,7 @@
     public void optOutAllValuesToSettings_optOutValue_emptyString() {
         putStringIntoSettings(SOFTWARE_SHORTCUT_KEY, MAGNIFICATION_CONTROLLER_NAME);
         putStringIntoSettings(HARDWARE_SHORTCUT_KEY, MAGNIFICATION_CONTROLLER_NAME);
-        putStringIntoSettings(TRIPLETAP_SHORTCUT_KEY, MAGNIFICATION_CONTROLLER_NAME);
+        setMagnificationTripleTapEnabled(/* enabled= */ true);
         int shortcutTypes =
                 UserShortcutType.SOFTWARE | UserShortcutType.HARDWARE | UserShortcutType.TRIPLETAP;
 
@@ -100,7 +101,7 @@
 
         assertThat(getStringFromSettings(SOFTWARE_SHORTCUT_KEY)).isEmpty();
         assertThat(getStringFromSettings(HARDWARE_SHORTCUT_KEY)).isEmpty();
-        assertThat(getStringFromSettings(TRIPLETAP_SHORTCUT_KEY)).isEmpty();
+        assertThat(getMagnificationTripleTapStatus()).isFalse();
     }
 
     @Test
@@ -124,7 +125,17 @@
         Settings.Secure.putString(mContext.getContentResolver(), key, componentName);
     }
 
+    private void setMagnificationTripleTapEnabled(boolean enabled) {
+        Settings.Secure.putInt(mContext.getContentResolver(),
+                Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, enabled ? ON : OFF);
+    }
+
     private String getStringFromSettings(String key) {
         return Settings.Secure.getString(mContext.getContentResolver(), key);
     }
+
+    private boolean getMagnificationTripleTapStatus() {
+        return Settings.Secure.getInt(mContext.getContentResolver(),
+                Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, OFF) == ON;
+    }
 }