From 2870455091df44f2887136fd2ca845c64c3d1036 Mon Sep 17 00:00:00 2001 From: Jean Chen Date: Fri, 27 Oct 2023 16:58:48 +0800 Subject: [PATCH] feat(MultiFingerMultiTap): Add tutorial for two finger triple tap This tutorial is showing when user enabled two finger triple tap shortcut Bug: 297805269 Test: manual Test: atest AccessibilityGesturenavigationTutorialTest Change-Id: Ie56cffe809e801c497d9d55d92a4b55084d496ce --- res/values/strings.xml | 4 +++ ...ccessibilityGestureNavigationTutorial.java | 25 +++++++++++++++++++ ...sibilityGestureNavigationTutorialTest.java | 19 ++++++++++++++ 3 files changed, 48 insertions(+) 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;