Loading res/values/arrays.xml +9 −0 Original line number Diff line number Diff line Loading @@ -701,6 +701,15 @@ <item>120000</item> </integer-array> <!-- Summaries of accessibility timeout, pairs to Values --> <string-array name="accessibility_timeout_summaries" translatable="false"> <item>@string/accessibility_timeout_default</item> <item>@string/accessibility_timeout_10secs</item> <item>@string/accessibility_timeout_30secs</item> <item>@string/accessibility_timeout_1min</item> <item>@string/accessibility_timeout_2mins</item> </string-array> <!-- Titles for the list of long press timeout options. --> <string-array name="long_press_timeout_selector_titles"> <!-- A title for the option for short long-press timeout [CHAR LIMIT=25] --> Loading src/com/android/settings/accessibility/AccessibilitySettings.java +33 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.os.Vibrator.VibrationIntensity; import android.accessibilityservice.AccessibilityServiceInfo; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; Loading Loading @@ -63,6 +64,8 @@ import com.android.settingslib.RestrictedPreference; import com.android.settingslib.accessibility.AccessibilityUtils; import com.android.settingslib.search.SearchIndexable; import com.google.common.primitives.Ints; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; Loading Loading @@ -125,6 +128,11 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements "vibration_preference_screen"; private static final String DISPLAY_DALTONIZER_PREFERENCE_SCREEN = "daltonizer_preference"; private static final String ACCESSIBILITY_CONTENT_TIMEOUT_PREFERENCE = "accessibility_content_timeout_preference_fragment"; private static final String ACCESSIBILITY_CONTROL_TIMEOUT_PREFERENCE = "accessibility_control_timeout_preference_fragment"; // Extras passed to sub-fragments. static final String EXTRA_PREFERENCE_KEY = "preference_key"; Loading Loading @@ -718,6 +726,31 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements updateAutoclickSummary(mAutoclickPreferenceScreen); updateAccessibilityShortcut(mAccessibilityShortcutPreferenceScreen); updateAccessibilityTimeoutSummary(getContentResolver(), findPreference(ACCESSIBILITY_CONTENT_TIMEOUT_PREFERENCE)); updateAccessibilityTimeoutSummary(getContentResolver(), findPreference(ACCESSIBILITY_CONTROL_TIMEOUT_PREFERENCE)); } void updateAccessibilityTimeoutSummary(ContentResolver resolver, Preference pref) { String[] timeoutSummarys = getResources().getStringArray( R.array.accessibility_timeout_summaries); int[] timeoutValues = getResources().getIntArray( R.array.accessibility_timeout_selector_values); int timeoutValue = 0; if (pref.getKey().equals(ACCESSIBILITY_CONTENT_TIMEOUT_PREFERENCE)) { timeoutValue = AccessibilityTimeoutController.getSecureAccessibilityTimeoutValue( resolver, AccessibilityTimeoutController.CONTENT_TIMEOUT_SETTINGS_SECURE); } else if (pref.getKey().equals(ACCESSIBILITY_CONTROL_TIMEOUT_PREFERENCE)) { timeoutValue = AccessibilityTimeoutController.getSecureAccessibilityTimeoutValue( resolver, AccessibilityTimeoutController.CONTROL_TIMEOUT_SETTINGS_SECURE); } int idx = Ints.indexOf(timeoutValues, timeoutValue); pref.setSummary(timeoutSummarys[idx == -1 ? 0 : idx]); } private void updateMagnificationSummary(Preference pref) { Loading src/com/android/settings/accessibility/AccessibilityTimeoutController.java +26 −10 Original line number Diff line number Diff line Loading @@ -31,6 +31,8 @@ import com.android.settings.widget.RadioButtonPreference; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; import com.google.common.primitives.Ints; import java.lang.Integer; import java.util.HashMap; Loading @@ -38,6 +40,10 @@ import java.util.Map; public class AccessibilityTimeoutController extends AbstractPreferenceController implements LifecycleObserver, RadioButtonPreference.OnClickListener, PreferenceControllerMixin { static final String CONTENT_TIMEOUT_SETTINGS_SECURE = Settings.Secure.ACCESSIBILITY_NON_INTERACTIVE_UI_TIMEOUT_MS; static final String CONTROL_TIMEOUT_SETTINGS_SECURE = Settings.Secure.ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS; // pair the preference key and timeout value private final Map<String, Integer> mAccessibilityTimeoutKeyToValueMap = new HashMap<>(); Loading @@ -64,6 +70,15 @@ public class AccessibilityTimeoutController extends AbstractPreferenceController mfragmentTag = fragmentTag; } protected static int getSecureAccessibilityTimeoutValue(ContentResolver resolver, String name) { String timeOutSec = Settings.Secure.getString(resolver, name); if (timeOutSec == null) { return 0; } Integer timeOutValue = Ints.tryParse(timeOutSec); return timeOutValue == null ? 0 : timeOutValue; } public void setOnChangeListener(OnChangeListener listener) { mOnChangeListener = listener; } Loading Loading @@ -131,16 +146,17 @@ public class AccessibilityTimeoutController extends AbstractPreferenceController } } protected void getAccessibilityUiValue() { String timeoutValue = null; if (mfragmentTag.equals(AccessibilityContentTimeoutPreferenceFragment.TAG)) { timeoutValue = Settings.Secure.getString(mContentResolver, Settings.Secure.ACCESSIBILITY_NON_INTERACTIVE_UI_TIMEOUT_MS); } else if (mfragmentTag.equals(AccessibilityControlTimeoutPreferenceFragment.TAG)) { timeoutValue = Settings.Secure.getString(mContentResolver, Settings.Secure.ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS); private int getAccessibilityTimeoutValue(String fragmentTag) { int timeoutValue = 0; // two kinds of Secure value, one is content timeout, the other is control timeout. if (AccessibilityContentTimeoutPreferenceFragment.TAG.equals(fragmentTag)) { timeoutValue = getSecureAccessibilityTimeoutValue(mContentResolver, CONTENT_TIMEOUT_SETTINGS_SECURE); } else if (AccessibilityControlTimeoutPreferenceFragment.TAG.equals(fragmentTag)) { timeoutValue = getSecureAccessibilityTimeoutValue(mContentResolver, CONTROL_TIMEOUT_SETTINGS_SECURE); } mAccessibilityUiTimeoutValue = timeoutValue == null? 0: Integer.parseInt(timeoutValue); return timeoutValue; } protected void updatePreferenceCheckedState(int value) { Loading @@ -153,7 +169,7 @@ public class AccessibilityTimeoutController extends AbstractPreferenceController public void updateState(Preference preference) { super.updateState(preference); getAccessibilityUiValue(); mAccessibilityUiTimeoutValue = getAccessibilityTimeoutValue(mfragmentTag); // reset RadioButton mPreference.setChecked(false); Loading tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java +79 −12 Original line number Diff line number Diff line Loading @@ -18,10 +18,10 @@ package com.android.settings.accessibility; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import android.content.ContentResolver; import android.content.Context; import android.os.Vibrator; import android.provider.Settings; Loading @@ -32,6 +32,7 @@ import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.XmlTestUtils; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.MockitoAnnotations; Loading @@ -42,31 +43,43 @@ import java.util.List; @RunWith(SettingsRobolectricTestRunner.class) public class AccessibilitySettingsTest { private static final String VIBRATION_PREFERENCE_SCREEN = "vibration_preference_screen"; private static final String ACCESSIBILITY_CONTENT_TIMEOUT_PREFERENCE = "accessibility_content_timeout_preference_fragment"; private static final String ACCESSIBILITY_CONTROL_TIMEOUT_PREFERENCE = "accessibility_control_timeout_preference_fragment"; private Context mContext; private ContentResolver mContentResolver; private AccessibilitySettings mSettings; @Before public void setup() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; mContentResolver = mContext.getContentResolver(); mSettings = spy(new AccessibilitySettings()); doReturn(mContext).when(mSettings).getContext(); } @Test public void testNonIndexableKeys_existInXmlLayout() { final Context context = RuntimeEnvironment.application; final List<String> niks = AccessibilitySettings.SEARCH_INDEX_DATA_PROVIDER .getNonIndexableKeys(context); .getNonIndexableKeys(mContext); final List<String> keys = new ArrayList<>(); keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.accessibility_settings)); keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(mContext, R.xml.accessibility_settings)); assertThat(keys).containsAllIn(niks); } @Test public void testUpdateVibrationSummary_shouldUpdateSummary() { MockitoAnnotations.initMocks(this); final Context mContext = RuntimeEnvironment.application; final AccessibilitySettings mSettings = spy(new AccessibilitySettings()); final Preference mVibrationPreferenceScreen = new Preference(mContext); doReturn(mVibrationPreferenceScreen).when(mSettings).findPreference(anyString()); doReturn(mVibrationPreferenceScreen).when(mSettings).findPreference( VIBRATION_PREFERENCE_SCREEN); doReturn(mContext).when(mSettings).getContext(); mVibrationPreferenceScreen.setKey("vibration_preference_screen"); mVibrationPreferenceScreen.setKey(VIBRATION_PREFERENCE_SCREEN); Settings.System.putInt(mContext.getContentResolver(), Settings.System.NOTIFICATION_VIBRATION_INTENSITY, Loading @@ -81,4 +94,58 @@ public class AccessibilitySettingsTest { VibrationIntensityPreferenceController.getIntensityString(mContext, Vibrator.VIBRATION_INTENSITY_OFF)); } @Test public void testUpdateAccessibilityTimeoutSummary_shouldUpdateSummary() { String[] testingValues = {null, "0", "10000", "30000", "60000", "120000"}; int[] exceptedResIds = {R.string.accessibility_timeout_default, R.string.accessibility_timeout_default, R.string.accessibility_timeout_10secs, R.string.accessibility_timeout_30secs, R.string.accessibility_timeout_1min, R.string.accessibility_timeout_2mins }; for (int i = 0; i < testingValues.length; i++) { Settings.Secure.putString(mContentResolver, Settings.Secure.ACCESSIBILITY_NON_INTERACTIVE_UI_TIMEOUT_MS, testingValues[i]); verifyAccessibilityTimeoutSummary(ACCESSIBILITY_CONTENT_TIMEOUT_PREFERENCE, exceptedResIds[i]); Settings.Secure.putString(mContentResolver, Settings.Secure.ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS, testingValues[i]); verifyAccessibilityTimeoutSummary(ACCESSIBILITY_CONTROL_TIMEOUT_PREFERENCE, exceptedResIds[i]); } } @Test public void testUpdateAccessibilityControlTimeoutSummary_invalidData_shouldUpdateSummary() { String[] testingValues = {"-9009", "98277466643738977979666555536362343", "Hello,a prank"}; for (String value : testingValues) { Settings.Secure.putString(mContentResolver, Settings.Secure.ACCESSIBILITY_NON_INTERACTIVE_UI_TIMEOUT_MS, value); verifyAccessibilityTimeoutSummary(ACCESSIBILITY_CONTROL_TIMEOUT_PREFERENCE, R.string.accessibility_timeout_default); Settings.Secure.putString(mContentResolver, Settings.Secure.ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS, value); verifyAccessibilityTimeoutSummary(ACCESSIBILITY_CONTROL_TIMEOUT_PREFERENCE, R.string.accessibility_timeout_default); } } private void verifyAccessibilityTimeoutSummary(String preferenceKey, int resId) { final Preference preference = new Preference(mContext); doReturn(preference).when(mSettings).findPreference(preferenceKey); preference.setKey(preferenceKey); mSettings.updateAccessibilityTimeoutSummary(mContentResolver, preference); assertThat(preference.getSummary()).isEqualTo(mContext.getResources().getString(resId)); } } Loading
res/values/arrays.xml +9 −0 Original line number Diff line number Diff line Loading @@ -701,6 +701,15 @@ <item>120000</item> </integer-array> <!-- Summaries of accessibility timeout, pairs to Values --> <string-array name="accessibility_timeout_summaries" translatable="false"> <item>@string/accessibility_timeout_default</item> <item>@string/accessibility_timeout_10secs</item> <item>@string/accessibility_timeout_30secs</item> <item>@string/accessibility_timeout_1min</item> <item>@string/accessibility_timeout_2mins</item> </string-array> <!-- Titles for the list of long press timeout options. --> <string-array name="long_press_timeout_selector_titles"> <!-- A title for the option for short long-press timeout [CHAR LIMIT=25] --> Loading
src/com/android/settings/accessibility/AccessibilitySettings.java +33 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.os.Vibrator.VibrationIntensity; import android.accessibilityservice.AccessibilityServiceInfo; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; Loading Loading @@ -63,6 +64,8 @@ import com.android.settingslib.RestrictedPreference; import com.android.settingslib.accessibility.AccessibilityUtils; import com.android.settingslib.search.SearchIndexable; import com.google.common.primitives.Ints; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; Loading Loading @@ -125,6 +128,11 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements "vibration_preference_screen"; private static final String DISPLAY_DALTONIZER_PREFERENCE_SCREEN = "daltonizer_preference"; private static final String ACCESSIBILITY_CONTENT_TIMEOUT_PREFERENCE = "accessibility_content_timeout_preference_fragment"; private static final String ACCESSIBILITY_CONTROL_TIMEOUT_PREFERENCE = "accessibility_control_timeout_preference_fragment"; // Extras passed to sub-fragments. static final String EXTRA_PREFERENCE_KEY = "preference_key"; Loading Loading @@ -718,6 +726,31 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements updateAutoclickSummary(mAutoclickPreferenceScreen); updateAccessibilityShortcut(mAccessibilityShortcutPreferenceScreen); updateAccessibilityTimeoutSummary(getContentResolver(), findPreference(ACCESSIBILITY_CONTENT_TIMEOUT_PREFERENCE)); updateAccessibilityTimeoutSummary(getContentResolver(), findPreference(ACCESSIBILITY_CONTROL_TIMEOUT_PREFERENCE)); } void updateAccessibilityTimeoutSummary(ContentResolver resolver, Preference pref) { String[] timeoutSummarys = getResources().getStringArray( R.array.accessibility_timeout_summaries); int[] timeoutValues = getResources().getIntArray( R.array.accessibility_timeout_selector_values); int timeoutValue = 0; if (pref.getKey().equals(ACCESSIBILITY_CONTENT_TIMEOUT_PREFERENCE)) { timeoutValue = AccessibilityTimeoutController.getSecureAccessibilityTimeoutValue( resolver, AccessibilityTimeoutController.CONTENT_TIMEOUT_SETTINGS_SECURE); } else if (pref.getKey().equals(ACCESSIBILITY_CONTROL_TIMEOUT_PREFERENCE)) { timeoutValue = AccessibilityTimeoutController.getSecureAccessibilityTimeoutValue( resolver, AccessibilityTimeoutController.CONTROL_TIMEOUT_SETTINGS_SECURE); } int idx = Ints.indexOf(timeoutValues, timeoutValue); pref.setSummary(timeoutSummarys[idx == -1 ? 0 : idx]); } private void updateMagnificationSummary(Preference pref) { Loading
src/com/android/settings/accessibility/AccessibilityTimeoutController.java +26 −10 Original line number Diff line number Diff line Loading @@ -31,6 +31,8 @@ import com.android.settings.widget.RadioButtonPreference; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; import com.google.common.primitives.Ints; import java.lang.Integer; import java.util.HashMap; Loading @@ -38,6 +40,10 @@ import java.util.Map; public class AccessibilityTimeoutController extends AbstractPreferenceController implements LifecycleObserver, RadioButtonPreference.OnClickListener, PreferenceControllerMixin { static final String CONTENT_TIMEOUT_SETTINGS_SECURE = Settings.Secure.ACCESSIBILITY_NON_INTERACTIVE_UI_TIMEOUT_MS; static final String CONTROL_TIMEOUT_SETTINGS_SECURE = Settings.Secure.ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS; // pair the preference key and timeout value private final Map<String, Integer> mAccessibilityTimeoutKeyToValueMap = new HashMap<>(); Loading @@ -64,6 +70,15 @@ public class AccessibilityTimeoutController extends AbstractPreferenceController mfragmentTag = fragmentTag; } protected static int getSecureAccessibilityTimeoutValue(ContentResolver resolver, String name) { String timeOutSec = Settings.Secure.getString(resolver, name); if (timeOutSec == null) { return 0; } Integer timeOutValue = Ints.tryParse(timeOutSec); return timeOutValue == null ? 0 : timeOutValue; } public void setOnChangeListener(OnChangeListener listener) { mOnChangeListener = listener; } Loading Loading @@ -131,16 +146,17 @@ public class AccessibilityTimeoutController extends AbstractPreferenceController } } protected void getAccessibilityUiValue() { String timeoutValue = null; if (mfragmentTag.equals(AccessibilityContentTimeoutPreferenceFragment.TAG)) { timeoutValue = Settings.Secure.getString(mContentResolver, Settings.Secure.ACCESSIBILITY_NON_INTERACTIVE_UI_TIMEOUT_MS); } else if (mfragmentTag.equals(AccessibilityControlTimeoutPreferenceFragment.TAG)) { timeoutValue = Settings.Secure.getString(mContentResolver, Settings.Secure.ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS); private int getAccessibilityTimeoutValue(String fragmentTag) { int timeoutValue = 0; // two kinds of Secure value, one is content timeout, the other is control timeout. if (AccessibilityContentTimeoutPreferenceFragment.TAG.equals(fragmentTag)) { timeoutValue = getSecureAccessibilityTimeoutValue(mContentResolver, CONTENT_TIMEOUT_SETTINGS_SECURE); } else if (AccessibilityControlTimeoutPreferenceFragment.TAG.equals(fragmentTag)) { timeoutValue = getSecureAccessibilityTimeoutValue(mContentResolver, CONTROL_TIMEOUT_SETTINGS_SECURE); } mAccessibilityUiTimeoutValue = timeoutValue == null? 0: Integer.parseInt(timeoutValue); return timeoutValue; } protected void updatePreferenceCheckedState(int value) { Loading @@ -153,7 +169,7 @@ public class AccessibilityTimeoutController extends AbstractPreferenceController public void updateState(Preference preference) { super.updateState(preference); getAccessibilityUiValue(); mAccessibilityUiTimeoutValue = getAccessibilityTimeoutValue(mfragmentTag); // reset RadioButton mPreference.setChecked(false); Loading
tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java +79 −12 Original line number Diff line number Diff line Loading @@ -18,10 +18,10 @@ package com.android.settings.accessibility; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import android.content.ContentResolver; import android.content.Context; import android.os.Vibrator; import android.provider.Settings; Loading @@ -32,6 +32,7 @@ import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.XmlTestUtils; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.MockitoAnnotations; Loading @@ -42,31 +43,43 @@ import java.util.List; @RunWith(SettingsRobolectricTestRunner.class) public class AccessibilitySettingsTest { private static final String VIBRATION_PREFERENCE_SCREEN = "vibration_preference_screen"; private static final String ACCESSIBILITY_CONTENT_TIMEOUT_PREFERENCE = "accessibility_content_timeout_preference_fragment"; private static final String ACCESSIBILITY_CONTROL_TIMEOUT_PREFERENCE = "accessibility_control_timeout_preference_fragment"; private Context mContext; private ContentResolver mContentResolver; private AccessibilitySettings mSettings; @Before public void setup() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; mContentResolver = mContext.getContentResolver(); mSettings = spy(new AccessibilitySettings()); doReturn(mContext).when(mSettings).getContext(); } @Test public void testNonIndexableKeys_existInXmlLayout() { final Context context = RuntimeEnvironment.application; final List<String> niks = AccessibilitySettings.SEARCH_INDEX_DATA_PROVIDER .getNonIndexableKeys(context); .getNonIndexableKeys(mContext); final List<String> keys = new ArrayList<>(); keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.accessibility_settings)); keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(mContext, R.xml.accessibility_settings)); assertThat(keys).containsAllIn(niks); } @Test public void testUpdateVibrationSummary_shouldUpdateSummary() { MockitoAnnotations.initMocks(this); final Context mContext = RuntimeEnvironment.application; final AccessibilitySettings mSettings = spy(new AccessibilitySettings()); final Preference mVibrationPreferenceScreen = new Preference(mContext); doReturn(mVibrationPreferenceScreen).when(mSettings).findPreference(anyString()); doReturn(mVibrationPreferenceScreen).when(mSettings).findPreference( VIBRATION_PREFERENCE_SCREEN); doReturn(mContext).when(mSettings).getContext(); mVibrationPreferenceScreen.setKey("vibration_preference_screen"); mVibrationPreferenceScreen.setKey(VIBRATION_PREFERENCE_SCREEN); Settings.System.putInt(mContext.getContentResolver(), Settings.System.NOTIFICATION_VIBRATION_INTENSITY, Loading @@ -81,4 +94,58 @@ public class AccessibilitySettingsTest { VibrationIntensityPreferenceController.getIntensityString(mContext, Vibrator.VIBRATION_INTENSITY_OFF)); } @Test public void testUpdateAccessibilityTimeoutSummary_shouldUpdateSummary() { String[] testingValues = {null, "0", "10000", "30000", "60000", "120000"}; int[] exceptedResIds = {R.string.accessibility_timeout_default, R.string.accessibility_timeout_default, R.string.accessibility_timeout_10secs, R.string.accessibility_timeout_30secs, R.string.accessibility_timeout_1min, R.string.accessibility_timeout_2mins }; for (int i = 0; i < testingValues.length; i++) { Settings.Secure.putString(mContentResolver, Settings.Secure.ACCESSIBILITY_NON_INTERACTIVE_UI_TIMEOUT_MS, testingValues[i]); verifyAccessibilityTimeoutSummary(ACCESSIBILITY_CONTENT_TIMEOUT_PREFERENCE, exceptedResIds[i]); Settings.Secure.putString(mContentResolver, Settings.Secure.ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS, testingValues[i]); verifyAccessibilityTimeoutSummary(ACCESSIBILITY_CONTROL_TIMEOUT_PREFERENCE, exceptedResIds[i]); } } @Test public void testUpdateAccessibilityControlTimeoutSummary_invalidData_shouldUpdateSummary() { String[] testingValues = {"-9009", "98277466643738977979666555536362343", "Hello,a prank"}; for (String value : testingValues) { Settings.Secure.putString(mContentResolver, Settings.Secure.ACCESSIBILITY_NON_INTERACTIVE_UI_TIMEOUT_MS, value); verifyAccessibilityTimeoutSummary(ACCESSIBILITY_CONTROL_TIMEOUT_PREFERENCE, R.string.accessibility_timeout_default); Settings.Secure.putString(mContentResolver, Settings.Secure.ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS, value); verifyAccessibilityTimeoutSummary(ACCESSIBILITY_CONTROL_TIMEOUT_PREFERENCE, R.string.accessibility_timeout_default); } } private void verifyAccessibilityTimeoutSummary(String preferenceKey, int resId) { final Preference preference = new Preference(mContext); doReturn(preference).when(mSettings).findPreference(preferenceKey); preference.setKey(preferenceKey); mSettings.updateAccessibilityTimeoutSummary(mContentResolver, preference); assertThat(preference.getSummary()).isEqualTo(mContext.getResources().getString(resId)); } }