From 1596a2838def4a0689e88b2b4a707f6e53c55009 Mon Sep 17 00:00:00 2001 From: Arc Wang Date: Sat, 18 Feb 2023 16:08:24 +0800 Subject: [PATCH] Allow Magnification Settings launch from outside of AccessibilitySettings Before this CL, Magnification Settings can only be launched from MagnificationPreferenceController. This CL initializes FooterPreferenceController if the parent class does not initialize it from Intent extras. Bug: 268411305 Test: manual make RunSettingsRoboTests ROBOTEST_FILTER=MagnificationGesturesPreferenceControllerTest make RunSettingsRoboTests ROBOTEST_FILTER=ToggleScreenMagnificationPreferenceFragmentTest Change-Id: I954739c39c823ce7fe0daa711743f729d182571b --- ...ificationGesturesPreferenceController.java | 13 ++------- .../ToggleFeaturePreferenceFragment.java | 2 +- ...ScreenMagnificationPreferenceFragment.java | 29 +++++++++++++++++++ ...enMagnificationPreferenceFragmentTest.java | 12 ++++++++ 4 files changed, 44 insertions(+), 12 deletions(-) diff --git a/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java b/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java index 793ab5a8581..99e0dc035e8 100644 --- a/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java +++ b/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java @@ -14,7 +14,6 @@ package com.android.settings.accessibility; import android.content.Context; -import android.icu.text.MessageFormat; import android.os.Bundle; import android.provider.Settings; import android.text.TextUtils; @@ -94,19 +93,11 @@ public class MagnificationGesturesPreferenceController extends TogglePreferenceC } static void populateMagnificationGesturesPreferenceExtras(Bundle extras, Context context) { - extras.putString(AccessibilitySettings.EXTRA_PREFERENCE_KEY, - Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED); + // TODO(b/270481978): It seems not necessary to put EXTRA_TITLE_RES. extras.putInt(AccessibilitySettings.EXTRA_TITLE_RES, R.string.accessibility_screen_magnification_gestures_title); - String intro = context.getString(R.string.accessibility_screen_magnification_intro_text); - extras.putCharSequence(AccessibilitySettings.EXTRA_INTRO, intro); - - String summary = context.getString(R.string.accessibility_screen_magnification_summary); - final Object[] numberArguments = {1, 2, 3, 4, 5}; - summary = MessageFormat.format(summary, numberArguments); - extras.putCharSequence(AccessibilitySettings.EXTRA_HTML_DESCRIPTION, summary); - + // TODO(b/270481978): It seems not necessary to put EXTRA_VIDEO_RAW_RESOURCE_ID. extras.putInt(AccessibilitySettings.EXTRA_VIDEO_RAW_RESOURCE_ID, R.raw.accessibility_screen_magnification); } diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java index ca3c5f10e87..22c57b7a305 100644 --- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java @@ -122,7 +122,7 @@ public abstract class ToggleFeaturePreferenceFragment extends DashboardFragment private int mNeedsQSTooltipType = QuickSettingsTooltipType.GUIDE_TO_EDIT; private boolean mSavedAccessibilityFloatingMenuEnabled; private ImageView mImageGetterCacheView; - private final Html.ImageGetter mImageGetter = (String str) -> { + protected final Html.ImageGetter mImageGetter = (String str) -> { if (str != null && str.startsWith(IMG_PREFIX)) { final String fileName = str.substring(IMG_PREFIX.length()); return getDrawableFromUri(Uri.parse( diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java index 470e548d5d4..04a80dc489a 100644 --- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java @@ -29,6 +29,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.pm.PackageManager; import android.icu.text.CaseMap; +import android.icu.text.MessageFormat; import android.net.Uri; import android.os.Bundle; import android.provider.DeviceConfig; @@ -220,6 +221,34 @@ public class ToggleScreenMagnificationPreferenceFragment extends addJoystickSetting(generalCategory); } + @Override + protected void onProcessArguments(Bundle arguments) { + Context context = getContext(); + + // This Fragment may get arguments from MagnificationGesturesPreferenceController or + // MagnificationNavbarPreferenceController and it's necessary to check if a key exists + // before putting a new value into arguments. + + if (!arguments.containsKey(AccessibilitySettings.EXTRA_PREFERENCE_KEY)) { + arguments.putString(AccessibilitySettings.EXTRA_PREFERENCE_KEY, + Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED); + } + + if (!arguments.containsKey(AccessibilitySettings.EXTRA_INTRO)) { + arguments.putCharSequence(AccessibilitySettings.EXTRA_INTRO, + context.getString(R.string.accessibility_screen_magnification_intro_text)); + } + + if (!arguments.containsKey(AccessibilitySettings.EXTRA_HTML_DESCRIPTION)) { + String summary = MessageFormat.format( + context.getString(R.string.accessibility_screen_magnification_summary), + new Object[]{1, 2, 3, 4, 5}); + arguments.putCharSequence(AccessibilitySettings.EXTRA_HTML_DESCRIPTION, summary); + } + + super.onProcessArguments(arguments); + } + private void addAlwaysOnSetting(PreferenceCategory generalCategory) { if (!DeviceConfig.getBoolean( DeviceConfig.NAMESPACE_WINDOW_MANAGER, diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java index 8697cb5aa91..9916dc9d7f4 100644 --- a/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java @@ -23,6 +23,7 @@ import static com.android.settings.accessibility.ToggleFeaturePreferenceFragment import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; @@ -405,6 +406,17 @@ public class ToggleScreenMagnificationPreferenceFragmentTest { assertThat(mFragment.getHelpResource()).isEqualTo(R.string.help_url_magnification); } + @Test + public void onProcessArguments_defaultArgumentUnavailable_shouldSetDefaultArguments() { + Bundle arguments = new Bundle(); + + mFragment.onProcessArguments(arguments); + + assertTrue(arguments.containsKey(AccessibilitySettings.EXTRA_PREFERENCE_KEY)); + assertTrue(arguments.containsKey(AccessibilitySettings.EXTRA_INTRO)); + assertTrue(arguments.containsKey(AccessibilitySettings.EXTRA_HTML_DESCRIPTION)); + } + private void putStringIntoSettings(String key, String componentName) { Settings.Secure.putString(mContext.getContentResolver(), key, componentName); }