From f07aa0fa9059fb8b7d7eb1e7639dc9d962c4786c Mon Sep 17 00:00:00 2001 From: menghanli Date: Wed, 16 Jun 2021 08:29:10 +0800 Subject: [PATCH] Add back the shortcut dialog content for accessibility gesture Below components are updated. 1. The dialog title, content, and customized link when edit shortcut. 2. The shortcut preference summary in Setting page. 3. The tutorial title and content when shortcut on. Partial rollback from commit 5fe2cdcf8751f50ea21d23a17abd619d7a16cf25 Bug: 190563948 Test: Manual test Change-Id: I5e39b46c9387b4bf5a10f14453be9988d8b7fc9c --- .../AccessibilityDialogUtils.java | 45 +++++++++++++---- ...ccessibilityGestureNavigationTutorial.java | 48 +++++++++++++++---- .../ToggleFeaturePreferenceFragment.java | 19 ++++++-- ...ScreenMagnificationPreferenceFragment.java | 20 +++++--- 4 files changed, 102 insertions(+), 30 deletions(-) diff --git a/src/com/android/settings/accessibility/AccessibilityDialogUtils.java b/src/com/android/settings/accessibility/AccessibilityDialogUtils.java index ffe5d6db59b..a9ba14a7646 100644 --- a/src/com/android/settings/accessibility/AccessibilityDialogUtils.java +++ b/src/com/android/settings/accessibility/AccessibilityDialogUtils.java @@ -344,12 +344,11 @@ public class AccessibilityDialogUtils { private static void initSoftwareShortcut(Context context, View view) { final View dialogView = view.findViewById(R.id.software_shortcut); - final CharSequence title = context.getText( - R.string.accessibility_shortcut_edit_dialog_title_software); final TextView summary = dialogView.findViewById(R.id.summary); final int lineHeight = summary.getLineHeight(); - setupShortcutWidget(dialogView, title, + setupShortcutWidget(dialogView, + retrieveTitle(context), retrieveSoftwareShortcutSummary(context, lineHeight), retrieveSoftwareShortcutImageResId(context)); } @@ -398,20 +397,49 @@ public class AccessibilityDialogUtils { return sb; } + private static CharSequence retrieveTitle(Context context) { + int resId; + if (AccessibilityUtil.isFloatingMenuEnabled(context)) { + resId = R.string.accessibility_shortcut_edit_dialog_title_software; + } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) { + resId = R.string.accessibility_shortcut_edit_dialog_title_software_by_gesture; + } else { + resId = R.string.accessibility_shortcut_edit_dialog_title_software; + } + return context.getText(resId); + } + private static CharSequence retrieveSoftwareShortcutSummary(Context context, int lineHeight) { final SpannableStringBuilder sb = new SpannableStringBuilder(); - if (!AccessibilityUtil.isFloatingMenuEnabled(context)) { + if (AccessibilityUtil.isFloatingMenuEnabled(context)) { + sb.append(getCustomizeAccessibilityButtonLink(context)); + } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) { + final int resId = AccessibilityUtil.isTouchExploreEnabled(context) + ? R.string.accessibility_shortcut_edit_dialog_summary_software_gesture_talkback + : R.string.accessibility_shortcut_edit_dialog_summary_software_gesture; + sb.append(context.getText(resId)); + sb.append("\n\n"); + sb.append(getCustomizeAccessibilityButtonLink(context)); + } else { sb.append(getSummaryStringWithIcon(context, lineHeight)); sb.append("\n\n"); + sb.append(getCustomizeAccessibilityButtonLink(context)); } - sb.append(getCustomizeAccessibilityButtonLink(context)); return sb; } private static int retrieveSoftwareShortcutImageResId(Context context) { - return AccessibilityUtil.isFloatingMenuEnabled(context) - ? R.drawable.accessibility_shortcut_type_software_floating - : R.drawable.accessibility_shortcut_type_software; + int resId; + if (AccessibilityUtil.isFloatingMenuEnabled(context)) { + resId = R.drawable.accessibility_shortcut_type_software_floating; + } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) { + resId = AccessibilityUtil.isTouchExploreEnabled(context) + ? R.drawable.accessibility_shortcut_type_software_gesture_talkback + : R.drawable.accessibility_shortcut_type_software_gesture; + } else { + resId = R.drawable.accessibility_shortcut_type_software; + } + return resId; } private static CharSequence getCustomizeAccessibilityButtonLink(Context context) { @@ -422,7 +450,6 @@ public class AccessibilityDialogUtils { .launch(); final AnnotationSpan.LinkInfo linkInfo = new AnnotationSpan.LinkInfo( AnnotationSpan.LinkInfo.DEFAULT_ANNOTATION, linkListener); - return AnnotationSpan.linkify(context.getText( R.string.accessibility_shortcut_edit_dialog_summary_software_floating), linkInfo); } diff --git a/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java b/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java index f8cdcb3388a..bc2e05d3258 100644 --- a/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java +++ b/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java @@ -27,6 +27,7 @@ import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.text.Spannable; import android.text.SpannableString; +import android.text.SpannableStringBuilder; import android.text.style.ImageSpan; import android.view.Gravity; import android.view.LayoutInflater; @@ -323,8 +324,7 @@ public final class AccessibilityGestureNavigationTutorial { } private static TutorialPage createSoftwareTutorialPage(@NonNull Context context) { - final CharSequence title = context.getText( - R.string.accessibility_tutorial_dialog_title_button); + final CharSequence title = getSoftwareTitle(context); final ImageView image = createSoftwareImage(context); final CharSequence instruction = getSoftwareInstruction(context); final ImageView indicatorIcon = @@ -382,18 +382,46 @@ public final class AccessibilityGestureNavigationTutorial { } private static ImageView createSoftwareImage(Context context) { - final int resId = AccessibilityUtil.isFloatingMenuEnabled(context) - ? R.drawable.accessibility_shortcut_type_software_floating - : R.drawable.accessibility_shortcut_type_software; - + int resId; + if (AccessibilityUtil.isFloatingMenuEnabled(context)) { + resId = R.drawable.accessibility_shortcut_type_software_floating; + } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) { + resId = AccessibilityUtil.isTouchExploreEnabled(context) + ? R.drawable.accessibility_shortcut_type_software_gesture_talkback + : R.drawable.accessibility_shortcut_type_software_gesture; + } else { + resId = R.drawable.accessibility_shortcut_type_software; + } return createImageView(context, resId); } + private static CharSequence getSoftwareTitle(Context context) { + int resId; + if (AccessibilityUtil.isFloatingMenuEnabled(context)) { + resId = R.string.accessibility_tutorial_dialog_title_button; + } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) { + resId = R.string.accessibility_tutorial_dialog_title_gesture; + } else { + resId = R.string.accessibility_tutorial_dialog_title_button; + } + return context.getText(resId); + } + private static CharSequence getSoftwareInstruction(Context context) { - return AccessibilityUtil.isFloatingMenuEnabled(context) - ? context.getText(R.string.accessibility_tutorial_dialog_message_floating_button) - : getSoftwareInstructionWithIcon(context, - context.getText(R.string.accessibility_tutorial_dialog_message_button)); + final SpannableStringBuilder sb = new SpannableStringBuilder(); + if (AccessibilityUtil.isFloatingMenuEnabled(context)) { + final int resId = R.string.accessibility_tutorial_dialog_message_floating_button; + sb.append(context.getText(resId)); + } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) { + final int resId = AccessibilityUtil.isTouchExploreEnabled(context) + ? R.string.accessibility_tutorial_dialog_message_gesture_talkback + : R.string.accessibility_tutorial_dialog_message_gesture; + sb.append(context.getText(resId)); + } else { + final int resId = R.string.accessibility_tutorial_dialog_message_button; + sb.append(getSoftwareInstructionWithIcon(context, context.getText(resId))); + } + return sb; } private static CharSequence getSoftwareInstructionWithIcon(Context context, CharSequence text) { diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java index 640ae532161..afff3f5e8a2 100644 --- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java @@ -612,6 +612,18 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference return value; } + private static CharSequence getSoftwareShortcutTypeSummary(Context context) { + int resId; + if (AccessibilityUtil.isFloatingMenuEnabled(context)) { + resId = R.string.accessibility_shortcut_edit_summary_software; + } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) { + resId = R.string.accessibility_shortcut_edit_summary_software_gesture; + } else { + resId = R.string.accessibility_shortcut_edit_summary_software; + } + return context.getText(resId); + } + protected CharSequence getShortcutTypeSummary(Context context) { if (!mShortcutPreference.isSettingsEditable()) { return context.getText(R.string.accessibility_shortcut_edit_dialog_title_hardware); @@ -625,11 +637,8 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference mComponentName.flattenToString(), UserShortcutType.SOFTWARE); final List list = new ArrayList<>(); - final CharSequence softwareTitle = context.getText( - R.string.accessibility_shortcut_edit_summary_software); - if (hasShortcutType(shortcutTypes, UserShortcutType.SOFTWARE)) { - list.add(softwareTitle); + list.add(getSoftwareShortcutTypeSummary(context)); } if (hasShortcutType(shortcutTypes, UserShortcutType.HARDWARE)) { final CharSequence hardwareTitle = context.getText( @@ -639,7 +648,7 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference // Show software shortcut if first time to use. if (list.isEmpty()) { - list.add(softwareTitle); + list.add(getSoftwareShortcutTypeSummary(context)); } return CaseMap.toTitle().wholeString().noLowercase().apply(Locale.getDefault(), /* iter= */ diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java index 9266f720ca2..28475a5630b 100644 --- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java @@ -252,6 +252,18 @@ public class ToggleScreenMagnificationPreferenceFragment extends return (value & type) == type; } + private static CharSequence getSoftwareShortcutTypeSummary(Context context) { + int resId; + if (AccessibilityUtil.isFloatingMenuEnabled(context)) { + resId = R.string.accessibility_shortcut_edit_summary_software; + } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) { + resId = R.string.accessibility_shortcut_edit_summary_software_gesture; + } else { + resId = R.string.accessibility_shortcut_edit_summary_software; + } + return context.getText(resId); + } + @Override protected CharSequence getShortcutTypeSummary(Context context) { if (!mShortcutPreference.isChecked()) { @@ -262,18 +274,14 @@ public class ToggleScreenMagnificationPreferenceFragment extends MAGNIFICATION_CONTROLLER_NAME, UserShortcutType.SOFTWARE); final List list = new ArrayList<>(); - final CharSequence softwareTitle = context.getText( - R.string.accessibility_shortcut_edit_summary_software); - if (hasShortcutType(shortcutTypes, UserShortcutType.SOFTWARE)) { - list.add(softwareTitle); + list.add(getSoftwareShortcutTypeSummary(context)); } if (hasShortcutType(shortcutTypes, UserShortcutType.HARDWARE)) { final CharSequence hardwareTitle = context.getText( R.string.accessibility_shortcut_hardware_keyword); list.add(hardwareTitle); } - if (hasShortcutType(shortcutTypes, UserShortcutType.TRIPLETAP)) { final CharSequence tripleTapTitle = context.getText( R.string.accessibility_shortcut_triple_tap_keyword); @@ -282,7 +290,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends // Show software shortcut if first time to use. if (list.isEmpty()) { - list.add(softwareTitle); + list.add(getSoftwareShortcutTypeSummary(context)); } return CaseMap.toTitle().wholeString().noLowercase().apply(Locale.getDefault(), /* iter= */