diff --git a/res/drawable/accessibility_shortcut_type_software_gesture_talkback.png b/res/drawable/accessibility_shortcut_type_software_gesture_talkback.png new file mode 100644 index 00000000000..a8d86aa5f8e Binary files /dev/null and b/res/drawable/accessibility_shortcut_type_software_gesture_talkback.png differ diff --git a/res/values/strings.xml b/res/values/strings.xml index 4b5be084819..db95210af93 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -4818,13 +4818,13 @@ To turn this service on or off, tap the accessibility button %s on the bottom of your screen.\n\nTo switch between services, touch & hold the accessibility button. - To turn this service on or off, swipe up from the bottom of the screen with two fingers.\n\nTo switch between services, swipe up with two fingers and hold. + To turn this service on or off, swipe up from the bottom of the screen with two fingers.\n\nTo switch between services, swipe up with two fingers and hold. - To turn this service on or off, swipe up from the bottom of the screen with three fingers.\n\nTo switch between services, swipe up with three fingers and hold. + To turn this service on or off, swipe up from the bottom of the screen with three fingers.\n\nTo switch between services, swipe up with three fingers and hold. - To turn an accessibility service on or off, swipe up from the bottom of the screen with two fingers.\n\nTo switch between services, swipe up with two fingers and hold. + To turn an accessibility service on or off, swipe up from the bottom of the screen with two fingers.\n\nTo switch between services, swipe up with two fingers and hold. - To turn an accessibility service on or off, swipe up from the bottom of the screen with three fingers.\n\nTo switch between services, swipe up with three fingers and hold. + To turn an accessibility service on or off, swipe up from the bottom of the screen with three fingers.\n\nTo switch between services, swipe up with three fingers and hold. Got it @@ -4839,12 +4839,16 @@ Shortcut to open Color correction Accessibility Button - + 2-finger swipe up from bottom + + 3-finger swipe up from bottom Tap the %s button at the bottom of your screen - + Swipe up with 2 fingers from edge of screen + + Swipe up with 3 fingers from edge of screen Hold volume keys diff --git a/src/com/android/settings/accessibility/AccessibilityEditDialogUtils.java b/src/com/android/settings/accessibility/AccessibilityEditDialogUtils.java index 7136172a75f..c96013f5bb0 100644 --- a/src/com/android/settings/accessibility/AccessibilityEditDialogUtils.java +++ b/src/com/android/settings/accessibility/AccessibilityEditDialogUtils.java @@ -171,7 +171,7 @@ public class AccessibilityEditDialogUtils { private static void initMagnifyFullScreen(Context context, View view) { final View dialogView = view.findViewById(R.id.magnify_full_screen); - final String title = context.getString( + final CharSequence title = context.getText( R.string.accessibility_magnification_area_settings_full_screen); // TODO(b/146019459): Use vector drawable instead of temporal png file to avoid distorted. setupShortcutWidget(dialogView, title, R.drawable.accessibility_magnification_full_screen); @@ -179,7 +179,7 @@ public class AccessibilityEditDialogUtils { private static void initMagnifyWindowScreen(Context context, View view) { final View dialogView = view.findViewById(R.id.magnify_window_screen); - final String title = context.getString( + final CharSequence title = context.getText( R.string.accessibility_magnification_area_settings_window_screen); // TODO(b/146019459): Use vector drawable instead of temporal png file to avoid distorted. setupShortcutWidget(dialogView, title, @@ -214,9 +214,9 @@ public class AccessibilityEditDialogUtils { private static void initHardwareShortcut(Context context, View view) { final View dialogView = view.findViewById(R.id.hardware_shortcut); - final String title = context.getString( + final CharSequence title = context.getText( R.string.accessibility_shortcut_edit_dialog_title_hardware); - final String summary = context.getString( + final CharSequence summary = context.getText( R.string.accessibility_shortcut_edit_dialog_summary_hardware); setupShortcutWidget(dialogView, title, summary, R.drawable.accessibility_shortcut_type_hardware); @@ -225,9 +225,9 @@ public class AccessibilityEditDialogUtils { private static void initMagnifyShortcut(Context context, View view) { final View dialogView = view.findViewById(R.id.triple_tap_shortcut); - final String title = context.getString( + final CharSequence title = context.getText( R.string.accessibility_shortcut_edit_dialog_title_triple_tap); - final String summary = context.getString( + final CharSequence summary = context.getText( R.string.accessibility_shortcut_edit_dialog_summary_triple_tap); setupShortcutWidget(dialogView, title, summary, R.drawable.accessibility_shortcut_type_triple_tap); @@ -244,23 +244,34 @@ public class AccessibilityEditDialogUtils { } private static CharSequence retrieveTitle(Context context) { - return context.getString(AccessibilityUtil.isGestureNavigateEnabled(context) - ? R.string.accessibility_shortcut_edit_dialog_title_software_gesture - : R.string.accessibility_shortcut_edit_dialog_title_software); + int resId = R.string.accessibility_shortcut_edit_dialog_title_software; + if (AccessibilityUtil.isGestureNavigateEnabled(context)) { + resId = AccessibilityUtil.isTouchExploreEnabled(context) + ? R.string.accessibility_shortcut_edit_dialog_title_software_gesture_talkback + : R.string.accessibility_shortcut_edit_dialog_title_software_gesture; + } + return context.getText(resId); } private static CharSequence retrieveSummary(Context context, int lineHeight) { - return AccessibilityUtil.isGestureNavigateEnabled(context) - ? context.getString( - R.string.accessibility_shortcut_edit_dialog_summary_software_gesture) - : getSummaryStringWithIcon(context, lineHeight); + 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; + return context.getText(resId); + } + return getSummaryStringWithIcon(context, lineHeight); } private static int retrieveImageResId(Context context) { - return AccessibilityUtil.isGestureNavigateEnabled(context) - ? R.drawable.accessibility_shortcut_type_software_gesture - : R.drawable.accessibility_shortcut_type_software; // TODO(b/142531156): Use vector drawable instead of temporal png file to avoid distorted. + int resId = R.drawable.accessibility_shortcut_type_software; + if (AccessibilityUtil.isGestureNavigateEnabled(context)) { + resId = AccessibilityUtil.isTouchExploreEnabled(context) + ? R.drawable.accessibility_shortcut_type_software_gesture_talkback + : R.drawable.accessibility_shortcut_type_software_gesture; + } + return resId; } private static SpannableString getSummaryStringWithIcon(Context context, int lineHeight) { diff --git a/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java b/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java index 5e6eced04e2..0c8644f649b 100644 --- a/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java +++ b/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java @@ -27,7 +27,6 @@ import android.view.LayoutInflater; import android.view.TextureView; import android.view.View; import android.view.Window; -import android.view.accessibility.AccessibilityManager; import android.widget.TextView; import androidx.annotation.ColorInt; @@ -117,13 +116,13 @@ public class AccessibilityGestureNavigationTutorial { R.id.gesture_tutorial_video); final TextView gestureTutorialMessage = content.findViewById( R.id.gesture_tutorial_message); - VideoPlayer.create(context, isTouchExploreOn(context) + VideoPlayer.create(context, AccessibilityUtil.isTouchExploreEnabled(context) ? R.raw.illustration_accessibility_gesture_three_finger : R.raw.illustration_accessibility_gesture_two_finger, gestureTutorialVideo); - gestureTutorialMessage.setText(isTouchExploreOn(context) - ? R.string.accessibility_tutorial_dialog_message_gesture_with_talkback - : R.string.accessibility_tutorial_dialog_message_gesture_without_talkback); + gestureTutorialMessage.setText(AccessibilityUtil.isTouchExploreEnabled(context) + ? R.string.accessibility_tutorial_dialog_message_gesture_talkback + : R.string.accessibility_tutorial_dialog_message_gesture); break; case DialogType.GESTURE_NAVIGATION_SETTINGS: content = inflater.inflate( @@ -132,14 +131,14 @@ public class AccessibilityGestureNavigationTutorial { R.id.gesture_tutorial_video); final TextView gestureSettingsTutorialMessage = content.findViewById( R.id.gesture_tutorial_message); - VideoPlayer.create(context, isTouchExploreOn(context) + VideoPlayer.create(context, AccessibilityUtil.isTouchExploreEnabled(context) ? R.raw.illustration_accessibility_gesture_three_finger : R.raw.illustration_accessibility_gesture_two_finger, gestureSettingsTutorialVideo); - gestureSettingsTutorialMessage.setText(isTouchExploreOn(context) - ? - R.string.accessibility_tutorial_dialog_message_gesture_settings_with_talkback - : R.string.accessibility_tutorial_dialog_message_gesture_settings_without_talkback); + final int stringResId = AccessibilityUtil.isTouchExploreEnabled(context) + ? R.string.accessibility_tutorial_dialog_message_gesture_settings_talkback + : R.string.accessibility_tutorial_dialog_message_gesture_settings; + gestureSettingsTutorialMessage.setText(stringResId); break; } @@ -203,9 +202,4 @@ public class AccessibilityGestureNavigationTutorial { typedArray.recycle(); return colorResId; } - - private static boolean isTouchExploreOn(Context context) { - return ((AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE)) - .isTouchExplorationEnabled(); - } } diff --git a/src/com/android/settings/accessibility/AccessibilityUtil.java b/src/com/android/settings/accessibility/AccessibilityUtil.java index fefb4065496..8da6fbb920d 100644 --- a/src/com/android/settings/accessibility/AccessibilityUtil.java +++ b/src/com/android/settings/accessibility/AccessibilityUtil.java @@ -24,6 +24,7 @@ import android.content.Context; import android.os.Build; import android.provider.Settings; import android.text.TextUtils; +import android.view.accessibility.AccessibilityManager; import androidx.annotation.IntDef; import androidx.annotation.NonNull; @@ -139,6 +140,12 @@ final class AccessibilityUtil { == NAV_BAR_MODE_GESTURAL; } + /** Determines if a touch explore is being used. */ + public static boolean isTouchExploreEnabled(Context context) { + final AccessibilityManager am = context.getSystemService(AccessibilityManager.class); + return am.isTouchExplorationEnabled(); + } + /** * Gets the corresponding fragment type of a given accessibility service. * diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java index 8a0b7e1630b..87c1bf88865 100644 --- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java @@ -35,10 +35,13 @@ import android.os.UserHandle; import android.os.storage.StorageManager; import android.provider.Settings; import android.text.TextUtils; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.View; +import android.view.ViewGroup; import android.view.accessibility.AccessibilityManager; +import android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener; import android.widget.CheckBox; import androidx.preference.PreferenceCategory; @@ -67,6 +70,7 @@ public class ToggleAccessibilityServicePreferenceFragment extends private static final String KEY_SHORTCUT_PREFERENCE = "shortcut_preference"; private static final String EXTRA_SHORTCUT_TYPE = "shortcut_type"; + private TouchExplorationStateChangeListener mTouchExplorationStateChangeListener; private int mUserShortcutType = UserShortcutType.DEFAULT; // Used to restore the edit dialog status. private int mUserShortcutTypeCache = UserShortcutType.DEFAULT; @@ -114,6 +118,16 @@ public class ToggleAccessibilityServicePreferenceFragment extends mLockPatternUtils = new LockPatternUtils(getActivity()); } + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + mTouchExplorationStateChangeListener = isTouchExplorationEnabled -> { + removeDialog(DialogType.EDIT_SHORTCUT); + mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext())); + }; + return super.onCreateView(inflater, container, savedInstanceState); + } + @Override public void onViewCreated(View view, Bundle savedInstanceState) { // Restore the user shortcut type. @@ -122,6 +136,7 @@ public class ToggleAccessibilityServicePreferenceFragment extends UserShortcutType.DEFAULT); } initShortcutPreference(); + super.onViewCreated(view, savedInstanceState); } @@ -134,7 +149,12 @@ public class ToggleAccessibilityServicePreferenceFragment extends @Override public void onResume() { super.onResume(); + mSettingsContentObserver.register(getContentResolver()); + final AccessibilityManager am = getPrefContext().getSystemService( + AccessibilityManager.class); + am.addTouchExplorationStateChangeListener(mTouchExplorationStateChangeListener); + updateSwitchBarToggleSwitch(); updateShortcutPreferenceData(); updateShortcutPreference(); @@ -143,6 +163,10 @@ public class ToggleAccessibilityServicePreferenceFragment extends @Override public void onPause() { mSettingsContentObserver.unregister(getContentResolver()); + final AccessibilityManager am = getPrefContext().getSystemService( + AccessibilityManager.class); + am.removeTouchExplorationStateChangeListener(mTouchExplorationStateChangeListener); + super.onPause(); } @@ -284,10 +308,13 @@ public class ToggleAccessibilityServicePreferenceFragment extends private String getShortcutTypeSummary(Context context) { final int shortcutType = getUserShortcutType(context, UserShortcutType.SOFTWARE); - final CharSequence softwareTitle = - context.getText(AccessibilityUtil.isGestureNavigateEnabled(context) - ? R.string.accessibility_shortcut_edit_dialog_title_software_gesture - : R.string.accessibility_shortcut_edit_dialog_title_software); + int resId = R.string.accessibility_shortcut_edit_dialog_title_software; + if (AccessibilityUtil.isGestureNavigateEnabled(context)) { + resId = AccessibilityUtil.isTouchExploreEnabled(context) + ? R.string.accessibility_shortcut_edit_dialog_title_software_gesture_talkback + : R.string.accessibility_shortcut_edit_dialog_title_software_gesture; + } + final CharSequence softwareTitle = context.getText(resId); List list = new ArrayList<>(); if ((shortcutType & UserShortcutType.SOFTWARE) == UserShortcutType.SOFTWARE) { diff --git a/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java index 4cc51b4cddf..80fd92f3e02 100644 --- a/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java @@ -31,6 +31,8 @@ import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.accessibility.AccessibilityManager; +import android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener; import android.widget.CheckBox; import android.widget.Switch; @@ -64,6 +66,7 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere private static final int DIALOG_ID_EDIT_SHORTCUT = 1; private static final String EXTRA_SHORTCUT_TYPE = "shortcut_type"; private final Handler mHandler = new Handler(); + private TouchExplorationStateChangeListener mTouchExplorationStateChangeListener; private SettingsContentObserver mSettingsContentObserver; private int mUserShortcutType = UserShortcutType.DEFAULT; // Used to restore the edit dialog status. @@ -71,18 +74,6 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere private CheckBox mSoftwareTypeCheckBox; private CheckBox mHardwareTypeCheckBox; - @Override - public void onStart() { - super.onStart(); - mSettingsContentObserver.register(getContentResolver()); - } - - @Override - public void onStop() { - mSettingsContentObserver.unregister(getContentResolver()); - super.onStop(); - } - @Override public int getMetricsCategory() { return SettingsEnums.ACCESSIBILITY_COLOR_INVERSION_SETTINGS; @@ -143,6 +134,11 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere == State.ON); } }; + + mTouchExplorationStateChangeListener = isTouchExplorationEnabled -> { + removeDialog(DIALOG_ID_EDIT_SHORTCUT); + mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext())); + }; return super.onCreateView(inflater, container, savedInstanceState); } @@ -174,14 +170,30 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere @Override public void onResume() { super.onResume(); + + mSettingsContentObserver.register(getContentResolver()); + final AccessibilityManager am = getPrefContext().getSystemService( + AccessibilityManager.class); + am.addTouchExplorationStateChangeListener(mTouchExplorationStateChangeListener); + updateShortcutPreferenceData(); updateShortcutPreference(); } + @Override + public void onPause() { + mSettingsContentObserver.unregister(getContentResolver()); + final AccessibilityManager am = getPrefContext().getSystemService( + AccessibilityManager.class); + am.removeTouchExplorationStateChangeListener(mTouchExplorationStateChangeListener); + + super.onPause(); + } + @Override public Dialog onCreateDialog(int dialogId) { if (dialogId == DIALOG_ID_EDIT_SHORTCUT) { - final CharSequence dialogTitle = getActivity().getString( + final CharSequence dialogTitle = getActivity().getText( R.string.accessibility_shortcut_edit_dialog_title_daltonizer); final AlertDialog dialog = AccessibilityEditDialogUtils.showEditShortcutDialog( getActivity(), @@ -257,10 +269,13 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere private String getShortcutTypeSummary(Context context) { final int shortcutType = getUserShortcutType(context, UserShortcutType.SOFTWARE); - final CharSequence softwareTitle = - context.getText(AccessibilityUtil.isGestureNavigateEnabled(context) - ? R.string.accessibility_shortcut_edit_dialog_title_software_gesture - : R.string.accessibility_shortcut_edit_dialog_title_software); + int resId = R.string.accessibility_shortcut_edit_dialog_title_software; + if (AccessibilityUtil.isGestureNavigateEnabled(context)) { + resId = AccessibilityUtil.isTouchExploreEnabled(context) + ? R.string.accessibility_shortcut_edit_dialog_title_software_gesture_talkback + : R.string.accessibility_shortcut_edit_dialog_title_software_gesture; + } + final CharSequence softwareTitle = context.getText(resId); List list = new ArrayList<>(); if ((shortcutType & UserShortcutType.SOFTWARE) == UserShortcutType.SOFTWARE) { diff --git a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java index 91ad7650da3..ca9524121c9 100644 --- a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java @@ -32,6 +32,8 @@ import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.accessibility.AccessibilityManager; +import android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener; import android.widget.CheckBox; import android.widget.Switch; @@ -67,6 +69,7 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe private static final int DIALOG_ID_EDIT_SHORTCUT = 1; private static final List sControllers = new ArrayList<>(); private final Handler mHandler = new Handler(); + private TouchExplorationStateChangeListener mTouchExplorationStateChangeListener; private SettingsContentObserver mSettingsContentObserver; private int mUserShortcutType = UserShortcutType.DEFAULT; // Used to restore the edit dialog status. @@ -109,6 +112,11 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe == State.ON); } }; + + mTouchExplorationStateChangeListener = isTouchExplorationEnabled -> { + removeDialog(DIALOG_ID_EDIT_SHORTCUT); + mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext())); + }; return super.onCreateView(inflater, container, savedInstanceState); } @@ -140,6 +148,12 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe @Override public void onResume() { super.onResume(); + + mSettingsContentObserver.register(getContentResolver()); + final AccessibilityManager am = getPrefContext().getSystemService( + AccessibilityManager.class); + am.addTouchExplorationStateChangeListener(mTouchExplorationStateChangeListener); + for (AbstractPreferenceController controller : buildPreferenceControllers(getPrefContext(), getSettingsLifecycle())) { ((DaltonizerRadioButtonPreferenceController) controller).setOnChangeListener(this); @@ -152,17 +166,23 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe @Override public void onPause() { - super.onPause(); + mSettingsContentObserver.unregister(getContentResolver()); + final AccessibilityManager am = getPrefContext().getSystemService( + AccessibilityManager.class); + am.removeTouchExplorationStateChangeListener(mTouchExplorationStateChangeListener); + for (AbstractPreferenceController controller : buildPreferenceControllers(getPrefContext(), getSettingsLifecycle())) { ((DaltonizerRadioButtonPreferenceController) controller).setOnChangeListener(null); } + + super.onPause(); } @Override public Dialog onCreateDialog(int dialogId) { if (dialogId == DIALOG_ID_EDIT_SHORTCUT) { - final CharSequence dialogTitle = getActivity().getString( + final CharSequence dialogTitle = getActivity().getText( R.string.accessibility_shortcut_edit_dialog_title_daltonizer); final AlertDialog dialog = AccessibilityEditDialogUtils.showEditShortcutDialog( getActivity(), @@ -238,10 +258,13 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe private String getShortcutTypeSummary(Context context) { final int shortcutType = getUserShortcutType(context, UserShortcutType.SOFTWARE); - final CharSequence softwareTitle = - context.getText(AccessibilityUtil.isGestureNavigateEnabled(context) - ? R.string.accessibility_shortcut_edit_dialog_title_software_gesture - : R.string.accessibility_shortcut_edit_dialog_title_software); + int resId = R.string.accessibility_shortcut_edit_dialog_title_software; + if (AccessibilityUtil.isGestureNavigateEnabled(context)) { + resId = AccessibilityUtil.isTouchExploreEnabled(context) + ? R.string.accessibility_shortcut_edit_dialog_title_software_gesture_talkback + : R.string.accessibility_shortcut_edit_dialog_title_software_gesture; + } + final CharSequence softwareTitle = context.getText(resId); List list = new ArrayList<>(); if ((shortcutType & UserShortcutType.SOFTWARE) == UserShortcutType.SOFTWARE) { @@ -288,18 +311,6 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe getShortcutTypeSummary(getPrefContext())); } - @Override - public void onStart() { - super.onStart(); - mSettingsContentObserver.register(getContentResolver()); - } - - @Override - public void onStop() { - mSettingsContentObserver.unregister(getContentResolver()); - super.onStop(); - } - @Override public int getMetricsCategory() { return SettingsEnums.ACCESSIBILITY_TOGGLE_DALTONIZER; diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java index a6434534d26..8e4da9de78e 100644 --- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java @@ -33,8 +33,12 @@ import android.net.Uri; import android.os.Bundle; import android.provider.Settings; import android.text.TextUtils; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; import android.view.ViewTreeObserver.OnGlobalLayoutListener; +import android.view.accessibility.AccessibilityManager; +import android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.RelativeLayout.LayoutParams; @@ -65,6 +69,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends 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 TouchExplorationStateChangeListener mTouchExplorationStateChangeListener; private int mUserShortcutType = UserShortcutType.DEFAULT; // Used to restore the edit dialog status. private int mUserShortcutTypeCache = UserShortcutType.DEFAULT; @@ -164,6 +169,16 @@ public class ToggleScreenMagnificationPreferenceFragment extends getActivity().setTitle(R.string.accessibility_screen_magnification_title); } + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + mTouchExplorationStateChangeListener = isTouchExplorationEnabled -> { + removeDialog(DialogType.EDIT_SHORTCUT); + mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext())); + }; + return super.onCreateView(inflater, container, savedInstanceState); + } + @Override public void onViewCreated(View view, Bundle savedInstanceState) { final PreferenceScreen preferenceScreen = getPreferenceManager().getPreferenceScreen(); @@ -174,6 +189,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends preferenceScreen.addPreference(mVideoPreference); initShortcutPreference(); + mSettingsPreference = new Preference(getPrefContext()); mSettingsPreference.setTitle(R.string.accessibility_magnification_service_settings_title); mSettingsPreference.setKey(SETTINGS_KEY); @@ -206,6 +222,10 @@ public class ToggleScreenMagnificationPreferenceFragment extends public void onResume() { super.onResume(); + final AccessibilityManager am = getPrefContext().getSystemService( + AccessibilityManager.class); + am.addTouchExplorationStateChangeListener(mTouchExplorationStateChangeListener); + VideoView videoView = (VideoView) getView().findViewById(R.id.video); if (videoView != null) { videoView.start(); @@ -216,6 +236,15 @@ public class ToggleScreenMagnificationPreferenceFragment extends updateShortcutPreference(); } + @Override + public void onPause() { + final AccessibilityManager am = getPrefContext().getSystemService( + AccessibilityManager.class); + am.removeTouchExplorationStateChangeListener(mTouchExplorationStateChangeListener); + + super.onPause(); + } + @Override public Dialog onCreateDialog(int dialogId) { switch (dialogId) { @@ -226,7 +255,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends return AccessibilityGestureNavigationTutorial .showAccessibilityButtonTutorialDialog(getActivity()); case DialogType.EDIT_SHORTCUT: - final CharSequence dialogTitle = getActivity().getString( + final CharSequence dialogTitle = getActivity().getText( R.string.accessibility_shortcut_edit_dialog_title_magnification); final AlertDialog dialog = AccessibilityEditDialogUtils.showMagnificationEditShortcutDialog( @@ -323,10 +352,13 @@ public class ToggleScreenMagnificationPreferenceFragment extends private String getShortcutTypeSummary(Context context) { final int shortcutType = getUserShortcutType(context, UserShortcutType.DEFAULT); - final CharSequence softwareTitle = - context.getText(AccessibilityUtil.isGestureNavigateEnabled(context) - ? R.string.accessibility_shortcut_edit_dialog_title_software_gesture - : R.string.accessibility_shortcut_edit_dialog_title_software); + int resId = R.string.accessibility_shortcut_edit_dialog_title_software; + if (AccessibilityUtil.isGestureNavigateEnabled(context)) { + resId = AccessibilityUtil.isTouchExploreEnabled(context) + ? R.string.accessibility_shortcut_edit_dialog_title_software_gesture_talkback + : R.string.accessibility_shortcut_edit_dialog_title_software_gesture; + } + final CharSequence softwareTitle = context.getText(resId); List list = new ArrayList<>(); if ((shortcutType & UserShortcutType.SOFTWARE) == UserShortcutType.SOFTWARE) {