Loading src/com/android/settings/accessibility/MagnificationCapabilities.java 0 → 100644 +103 −0 Original line number Diff line number Diff line /* * 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() {} } src/com/android/settings/accessibility/MagnificationModePreferenceController.java +2 −2 Original line number Diff line number Diff line Loading @@ -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); } } src/com/android/settings/accessibility/MagnificationSettingsFragment.java +4 −41 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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. */ Loading @@ -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"; Loading @@ -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; Loading @@ -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()); } } Loading @@ -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; }); Loading Loading @@ -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) { Loading Loading @@ -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); } } Loading @@ -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); } tests/robotests/src/com/android/settings/accessibility/MagnificationCapabilitiesTest.java 0 → 100644 +59 −0 Original line number Diff line number Diff line /* * 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); } } Loading
src/com/android/settings/accessibility/MagnificationCapabilities.java 0 → 100644 +103 −0 Original line number Diff line number Diff line /* * 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() {} }
src/com/android/settings/accessibility/MagnificationModePreferenceController.java +2 −2 Original line number Diff line number Diff line Loading @@ -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); } }
src/com/android/settings/accessibility/MagnificationSettingsFragment.java +4 −41 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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. */ Loading @@ -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"; Loading @@ -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; Loading @@ -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()); } } Loading @@ -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; }); Loading Loading @@ -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) { Loading Loading @@ -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); } } Loading @@ -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); }
tests/robotests/src/com/android/settings/accessibility/MagnificationCapabilitiesTest.java 0 → 100644 +59 −0 Original line number Diff line number Diff line /* * 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); } }