diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java index 10cdc4d41c1..8e52c1699bd 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettings.java +++ b/src/com/android/settings/accessibility/AccessibilitySettings.java @@ -64,8 +64,9 @@ public class AccessibilitySettings extends DashboardFragment { private static final String CATEGORY_CAPTIONS = "captions_category"; private static final String CATEGORY_AUDIO = "audio_category"; private static final String CATEGORY_DISPLAY = "display_category"; - private static final String CATEGORY_INTERACTION_CONTROL = "interaction_control_category"; private static final String CATEGORY_DOWNLOADED_SERVICES = "user_installed_services_category"; + @VisibleForTesting + static final String CATEGORY_INTERACTION_CONTROL = "interaction_control_category"; private static final String[] CATEGORIES = new String[]{ CATEGORY_SCREEN_READER, CATEGORY_CAPTIONS, CATEGORY_AUDIO, CATEGORY_DISPLAY, @@ -144,7 +145,8 @@ public class AccessibilitySettings extends DashboardFragment { private final Map mCategoryToPrefCategoryMap = new ArrayMap<>(); - private final Map mServicePreferenceToPreferenceCategoryMap = + @VisibleForTesting + final Map mServicePreferenceToPreferenceCategoryMap = new ArrayMap<>(); private final Map mPreBundledServiceComponentToCategoryMap = new ArrayMap<>(); @@ -352,6 +354,12 @@ public class AccessibilitySettings extends DashboardFragment { initializePreBundledServicesMapFromArray(CATEGORY_INTERACTION_CONTROL, R.array.config_preinstalled_interaction_control_services); + // ACCESSIBILITY_MENU_IN_SYSTEM is a default pre-bundled interaction control service. + // If the device opts out of including this service then this is a no-op. + mPreBundledServiceComponentToCategoryMap.put( + AccessibilityManager.ACCESSIBILITY_MENU_IN_SYSTEM, + mCategoryToPrefCategoryMap.get(CATEGORY_INTERACTION_CONTROL)); + final List preferenceList = getInstalledAccessibilityList( getPrefContext()); diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java index 30aa00a2320..bf3951eff17 100644 --- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java @@ -328,13 +328,43 @@ public class AccessibilitySettingsTest { } + @Test + @Config(shadows = {ShadowFragment.class, ShadowUserManager.class}) + public void testAccessibilityMenuInSystem_IncludedInInteractionControl() { + mShadowAccessibilityManager.setInstalledAccessibilityServiceList( + List.of(getMockAccessibilityServiceInfo( + AccessibilityManager.ACCESSIBILITY_MENU_IN_SYSTEM))); + setupFragment(); + + final RestrictedPreference pref = mFragment.getPreferenceScreen().findPreference( + AccessibilityManager.ACCESSIBILITY_MENU_IN_SYSTEM.flattenToString()); + final String prefCategory = mFragment.mServicePreferenceToPreferenceCategoryMap.get( + pref).getKey(); + assertThat(prefCategory).isEqualTo(AccessibilitySettings.CATEGORY_INTERACTION_CONTROL); + } + + @Test + @Config(shadows = {ShadowFragment.class, ShadowUserManager.class}) + public void testAccessibilityMenuInSystem_NoPrefWhenNotInstalled() { + mShadowAccessibilityManager.setInstalledAccessibilityServiceList(List.of()); + setupFragment(); + + final RestrictedPreference pref = mFragment.getPreferenceScreen().findPreference( + AccessibilityManager.ACCESSIBILITY_MENU_IN_SYSTEM.flattenToString()); + assertThat(pref).isNull(); + } + private AccessibilityServiceInfo getMockAccessibilityServiceInfo(String packageName, String className) { + return getMockAccessibilityServiceInfo(new ComponentName(packageName, className)); + } + + private AccessibilityServiceInfo getMockAccessibilityServiceInfo(ComponentName componentName) { final ApplicationInfo applicationInfo = new ApplicationInfo(); final ServiceInfo serviceInfo = new ServiceInfo(); - applicationInfo.packageName = packageName; - serviceInfo.packageName = packageName; - serviceInfo.name = className; + applicationInfo.packageName = componentName.getPackageName(); + serviceInfo.packageName = componentName.getPackageName(); + serviceInfo.name = componentName.getClassName(); serviceInfo.applicationInfo = applicationInfo; final ResolveInfo resolveInfo = new ResolveInfo(); @@ -342,7 +372,7 @@ public class AccessibilitySettingsTest { try { final AccessibilityServiceInfo info = new AccessibilityServiceInfo(resolveInfo, mContext); - info.setComponentName(new ComponentName(packageName, className)); + info.setComponentName(componentName); return info; } catch (XmlPullParserException | IOException e) { // Do nothing