From f30eded170b7612ca56ca05f704c9c1661eff401 Mon Sep 17 00:00:00 2001 From: jasonwshsu Date: Wed, 30 Dec 2020 16:07:11 +0800 Subject: [PATCH] Extract magnification capabilities from MagnificationSettingsFragment into a new class. * To increase single responsibility of MagnificationSettingsFragment Bug: 168567356 Test: atest MagnificationCapabilitiesTest Change-Id: Ic5e8a556858ac2b6ab9929b1bbdc373ce320c270 --- .../MagnificationCapabilities.java | 103 ++++++++++++++++++ ...MagnificationModePreferenceController.java | 4 +- .../MagnificationSettingsFragment.java | 45 +------- .../MagnificationCapabilitiesTest.java | 59 ++++++++++ 4 files changed, 168 insertions(+), 43 deletions(-) create mode 100644 src/com/android/settings/accessibility/MagnificationCapabilities.java create mode 100644 tests/robotests/src/com/android/settings/accessibility/MagnificationCapabilitiesTest.java diff --git a/src/com/android/settings/accessibility/MagnificationCapabilities.java b/src/com/android/settings/accessibility/MagnificationCapabilities.java new file mode 100644 index 00000000000..079b06c546f --- /dev/null +++ b/src/com/android/settings/accessibility/MagnificationCapabilities.java @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import android.content.ContentResolver; +import android.content.Context; +import android.provider.Settings; + +import androidx.annotation.IntDef; + +import com.android.settings.R; + +import com.google.common.primitives.Ints; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** Class to provide magnification capabilities. */ +public final class MagnificationCapabilities { + + private static final String KEY_CAPABILITY = + Settings.Secure.ACCESSIBILITY_MAGNIFICATION_CAPABILITY; + + /** + * Annotation for supported magnification mode. + * + * @see Settings.Secure#ACCESSIBILITY_MAGNIFICATION_CAPABILITY + */ + @Retention(RetentionPolicy.SOURCE) + @IntDef({ + MagnificationMode.FULLSCREEN, + MagnificationMode.WINDOW, + MagnificationMode.ALL, + }) + + public @interface MagnificationMode { + int FULLSCREEN = Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN; + int WINDOW = Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW; + int ALL = Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL; + } + + /** + * Gets the summary for the given {@code capabilities}. + * + * @param context A {@link Context}. + * @param capabilities Magnification capabilities {@link MagnificationMode} + * @return The summary text represents the given capabilities + */ + public static String getSummary(Context context, @MagnificationMode int capabilities) { + final String[] summaries = context.getResources().getStringArray( + R.array.magnification_mode_summaries); + final int[] values = context.getResources().getIntArray( + R.array.magnification_mode_values); + + final int idx = Ints.indexOf(values, capabilities); + return summaries[idx == /* no index exist */ -1 ? 0 : idx]; + } + + /** + * Sets the magnification capabilities {@link MagnificationMode} to settings key. This + * overwrites any existing capabilities. + * + * @param context A {@link Context}. + * @param capabilities Magnification capabilities {@link MagnificationMode} + */ + public static void setCapabilities(Context context, @MagnificationMode int capabilities) { + final ContentResolver contentResolver = context.getContentResolver(); + + Settings.Secure.putIntForUser(contentResolver, KEY_CAPABILITY, capabilities, + contentResolver.getUserId()); + } + + /** + * Returns the magnification capabilities {@link MagnificationMode} from setting's key. May be + * default value {@link MagnificationMode#FULLSCREEN} if not set. + * + * @param context A {@link Context}. + * @return The magnification capabilities {@link MagnificationMode} + */ + @MagnificationMode + public static int getCapabilities(Context context) { + final ContentResolver contentResolver = context.getContentResolver(); + + return Settings.Secure.getIntForUser(contentResolver, KEY_CAPABILITY, + MagnificationMode.FULLSCREEN, contentResolver.getUserId()); + } + + private MagnificationCapabilities() {} +} diff --git a/src/com/android/settings/accessibility/MagnificationModePreferenceController.java b/src/com/android/settings/accessibility/MagnificationModePreferenceController.java index b45ad88a520..5dc93b1d37e 100644 --- a/src/com/android/settings/accessibility/MagnificationModePreferenceController.java +++ b/src/com/android/settings/accessibility/MagnificationModePreferenceController.java @@ -35,7 +35,7 @@ public class MagnificationModePreferenceController extends BasePreferenceControl @Override public CharSequence getSummary() { - return MagnificationSettingsFragment.getMagnificationCapabilitiesSummary( - mContext); + final int capabilities = MagnificationCapabilities.getCapabilities(mContext); + return MagnificationCapabilities.getSummary(mContext, capabilities); } } diff --git a/src/com/android/settings/accessibility/MagnificationSettingsFragment.java b/src/com/android/settings/accessibility/MagnificationSettingsFragment.java index 6b91fab7201..6ea63664d9d 100644 --- a/src/com/android/settings/accessibility/MagnificationSettingsFragment.java +++ b/src/com/android/settings/accessibility/MagnificationSettingsFragment.java @@ -22,7 +22,6 @@ import static com.android.settings.accessibility.AccessibilityUtil.State.ON; import android.app.Dialog; import android.app.settings.SettingsEnums; -import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.provider.Settings; @@ -38,8 +37,6 @@ import com.android.settings.dashboard.DashboardFragment; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settingslib.search.SearchIndexable; -import com.google.common.primitives.Ints; - import java.util.StringJoiner; /** Settings page for magnification. */ @@ -48,8 +45,6 @@ public class MagnificationSettingsFragment extends DashboardFragment { private static final String TAG = "MagnificationSettingsFragment"; private static final String PREF_KEY_MODE = "magnification_mode"; - private static final String KEY_CAPABILITY = - Settings.Secure.ACCESSIBILITY_MAGNIFICATION_CAPABILITY; private static final int DIALOG_MAGNIFICATION_CAPABILITY = 1; private static final int DIALOG_MAGNIFICATION_SWITCH_SHORTCUT = 2; private static final String EXTRA_CAPABILITY = "capability"; @@ -61,29 +56,6 @@ public class MagnificationSettingsFragment extends DashboardFragment { private CheckBox mMagnifyWindowCheckBox; private Dialog mDialog; - static String getMagnificationCapabilitiesSummary(Context context) { - final String[] magnificationModeSummaries = context.getResources().getStringArray( - R.array.magnification_mode_summaries); - final int[] magnificationModeValues = context.getResources().getIntArray( - R.array.magnification_mode_values); - final int capabilities = MagnificationSettingsFragment.getMagnificationCapabilities( - context); - - final int idx = Ints.indexOf(magnificationModeValues, capabilities); - return magnificationModeSummaries[idx == -1 ? 0 : idx]; - } - - private static int getMagnificationCapabilities(Context context) { - return getSecureIntValue(context, KEY_CAPABILITY, - Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN); - } - - private static int getSecureIntValue(Context context, String key, int defaultValue) { - return Settings.Secure.getIntForUser( - context.getContentResolver(), - key, defaultValue, context.getContentResolver().getUserId()); - } - @Override public int getMetricsCategory() { return SettingsEnums.ACCESSIBILITY_MAGNIFICATION_SETTINGS; @@ -102,7 +74,7 @@ public class MagnificationSettingsFragment extends DashboardFragment { mCapabilities = savedInstanceState.getInt(EXTRA_CAPABILITY, NONE); } if (mCapabilities == NONE) { - mCapabilities = getMagnificationCapabilities(getPrefContext()); + mCapabilities = MagnificationCapabilities.getCapabilities(getPrefContext()); } } @@ -128,7 +100,7 @@ public class MagnificationSettingsFragment extends DashboardFragment { super.onCreate(icicle); mModePreference = findPreference(PREF_KEY_MODE); mModePreference.setOnPreferenceClickListener(preference -> { - mCapabilities = getMagnificationCapabilities(getPrefContext()); + mCapabilities = MagnificationCapabilities.getCapabilities(getPrefContext()); showDialog(DIALOG_MAGNIFICATION_CAPABILITY); return true; }); @@ -164,7 +136,7 @@ public class MagnificationSettingsFragment extends DashboardFragment { private void callOnAlertDialogCheckboxClicked(DialogInterface dialog, int which) { updateCapabilities(true); mModePreference.setSummary( - getMagnificationCapabilitiesSummary(getPrefContext())); + MagnificationCapabilities.getSummary(getPrefContext(), mCapabilities)); } private void onSwitchShortcutDialogPositiveButtonClicked(View view) { @@ -285,7 +257,7 @@ public class MagnificationSettingsFragment extends DashboardFragment { ? Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW : 0; mCapabilities = capabilities; if (saveToDB) { - setMagnificationCapabilities(capabilities); + MagnificationCapabilities.setCapabilities(getPrefContext(), mCapabilities); } } @@ -294,15 +266,6 @@ public class MagnificationSettingsFragment extends DashboardFragment { Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, OFF) == ON; } - private void setSecureIntValue(String key, int value) { - Settings.Secure.putIntForUser(getPrefContext().getContentResolver(), - key, value, getPrefContext().getContentResolver().getUserId()); - } - - private void setMagnificationCapabilities(int capabilities) { - setSecureIntValue(KEY_CAPABILITY, capabilities); - } - public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider(R.xml.accessibility_magnification_service_settings); } diff --git a/tests/robotests/src/com/android/settings/accessibility/MagnificationCapabilitiesTest.java b/tests/robotests/src/com/android/settings/accessibility/MagnificationCapabilitiesTest.java new file mode 100644 index 00000000000..ac7f07329ab --- /dev/null +++ b/tests/robotests/src/com/android/settings/accessibility/MagnificationCapabilitiesTest.java @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import static com.google.common.truth.Truth.assertThat; + +import android.content.Context; + +import androidx.test.core.app.ApplicationProvider; + +import com.android.settings.R; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link MagnificationCapabilities} */ +@RunWith(RobolectricTestRunner.class) +public final class MagnificationCapabilitiesTest { + + private final Context mContext = ApplicationProvider.getApplicationContext(); + + @Test + public void getCapabilities_windowMode_expectedCapabilities() { + MagnificationCapabilities.setCapabilities(mContext, + MagnificationCapabilities.MagnificationMode.WINDOW); + + final int windowCapabilities = MagnificationCapabilities.getCapabilities(mContext); + assertThat(windowCapabilities).isEqualTo( + MagnificationCapabilities.MagnificationMode.WINDOW); + + } + + @Test + public void getSummary_fullScreenMode_expectedSummary() { + final int fullScreenCapabilities = MagnificationCapabilities.MagnificationMode.FULLSCREEN; + + final String actualString = MagnificationCapabilities.getSummary(mContext, + fullScreenCapabilities); + + final String expectedString = mContext.getString( + R.string.accessibility_magnification_area_settings_full_screen_summary); + assertThat(actualString).isEqualTo(expectedString); + } +}