diff --git a/res/values/strings.xml b/res/values/strings.xml
index f455ab52db1..e3b11b35799 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4603,6 +4603,8 @@
Hold volume keys to open
Triple tap screen to open
+
+ Two finger triple tap screen to open
Use gesture to open
@@ -4615,6 +4617,8 @@
To use this feature, press & hold both volume keys.
To start and stop magnification, triple-tap anywhere on your screen.
+
+ To start and stop magnification, triple-tap anywhere on your screen with two fingers.
To use this feature, swipe up from the bottom of the screen with 2 fingers.\n\nTo switch between features, swipe up with 2 fingers and hold.
diff --git a/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java b/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java
index ee2dc05b97a..e90ed87da1b 100644
--- a/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java
+++ b/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java
@@ -54,6 +54,7 @@ import androidx.core.widget.TextViewCompat;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
+import com.android.server.accessibility.Flags;
import com.android.settings.R;
import com.android.settings.core.SubSettingLauncher;
import com.android.settingslib.widget.LottieColorUtils;
@@ -411,6 +412,23 @@ public final class AccessibilityGestureNavigationTutorial {
return new TutorialPage(type, title, image, indicatorIcon, instruction);
}
+ private static TutorialPage createTwoFingerTripleTapTutorialPage(@NonNull Context context) {
+ // TODO(b/308088945): Update tutorial string and image when UX provides them
+ final int type = UserShortcutType.TWOFINGERTRIPLETAP;
+ final CharSequence title =
+ context.getText(R.string.accessibility_tutorial_dialog_title_two_finger_triple);
+ final View image =
+ createIllustrationViewWithImageRawResource(context,
+ R.raw.a11y_shortcut_type_triple_tap);
+ final CharSequence instruction =
+ context.getText(R.string.accessibility_tutorial_dialog_message_two_finger_triple);
+ final ImageView indicatorIcon =
+ createImageView(context, R.drawable.ic_accessibility_page_indicator);
+ indicatorIcon.setEnabled(false);
+
+ return new TutorialPage(type, title, image, indicatorIcon, instruction);
+ }
+
@VisibleForTesting
static List createShortcutTutorialPages(@NonNull Context context,
int shortcutTypes) {
@@ -427,6 +445,13 @@ public final class AccessibilityGestureNavigationTutorial {
tutorialPages.add(createTripleTapTutorialPage(context));
}
+ if (Flags.enableMagnificationMultipleFingerMultipleTapGesture()) {
+ if ((shortcutTypes & UserShortcutType.TWOFINGERTRIPLETAP)
+ == UserShortcutType.TWOFINGERTRIPLETAP) {
+ tutorialPages.add(createTwoFingerTripleTapTutorialPage(context));
+ }
+ }
+
return tutorialPages;
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorialTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorialTest.java
index 5d3557f3334..d6a2492b884 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorialTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorialTest.java
@@ -32,11 +32,15 @@ import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.platform.test.annotations.RequiresFlagsEnabled;
+import android.platform.test.flag.junit.CheckFlagsRule;
+import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.view.View;
import androidx.appcompat.app.AlertDialog;
import androidx.test.core.app.ApplicationProvider;
+import com.android.server.accessibility.Flags;
import com.android.settings.SettingsActivity;
import com.android.settings.SubSettings;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -59,6 +63,8 @@ public final class AccessibilityGestureNavigationTutorialTest {
@Rule
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Rule
+ public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
@Mock
private DialogInterface.OnClickListener mOnClickListener;
@Mock
@@ -89,6 +95,19 @@ public final class AccessibilityGestureNavigationTutorialTest {
assertThat(alertDialog).isNotNull();
}
+ @Test
+ @RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_MULTIPLE_FINGER_MULTIPLE_TAP_GESTURE)
+ public void createTutorialPages_turnOnTwoFingerTripleTapShortcut_hasOnePage() {
+ mShortcutTypes |= UserShortcutType.TWOFINGERTRIPLETAP;
+
+ final AlertDialog alertDialog =
+ createAccessibilityTutorialDialog(mContext, mShortcutTypes);
+
+ assertThat(createShortcutTutorialPages(mContext,
+ mShortcutTypes)).hasSize(/* expectedSize= */ 1);
+ assertThat(alertDialog).isNotNull();
+ }
+
@Test
public void createTutorialPages_turnOnSoftwareShortcut_hasOnePage() {
mShortcutTypes |= UserShortcutType.SOFTWARE;