Checks that prebundled categories contain only preinstalled contents.
Bug: 353888087 Test: atest AccessibilitySettingsTest Test: manually check all prebundled services are still in their proper groups, even after installing an APK update Flag: com.android.settings.accessibility.check_prebundled_is_preinstalled Change-Id: I023db9c37d7990deb50c9eec516619f0a8db65b7
This commit is contained in:
@@ -26,11 +26,9 @@ import static org.robolectric.Shadows.shadowOf;
|
||||
import static java.util.Collections.singletonList;
|
||||
|
||||
import android.accessibilityservice.AccessibilityServiceInfo;
|
||||
import android.accessibilityservice.AccessibilityShortcutInfo;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.content.pm.ServiceInfo;
|
||||
@@ -110,9 +108,7 @@ public class AccessibilitySettingsTest {
|
||||
private final Context mContext = ApplicationProvider.getApplicationContext();
|
||||
@Spy
|
||||
private final AccessibilityServiceInfo mServiceInfo = getMockAccessibilityServiceInfo(
|
||||
PACKAGE_NAME, CLASS_NAME);
|
||||
@Mock
|
||||
private AccessibilityShortcutInfo mShortcutInfo;
|
||||
new ComponentName(PACKAGE_NAME, CLASS_NAME));
|
||||
private ShadowAccessibilityManager mShadowAccessibilityManager;
|
||||
@Mock
|
||||
private LocalBluetoothManager mLocalBluetoothManager;
|
||||
@@ -125,7 +121,6 @@ public class AccessibilitySettingsTest {
|
||||
mShadowAccessibilityManager.setInstalledAccessibilityServiceList(new ArrayList<>());
|
||||
mContext.setTheme(androidx.appcompat.R.style.Theme_AppCompat);
|
||||
ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBluetoothManager;
|
||||
setMockAccessibilityShortcutInfo(mShortcutInfo);
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT,
|
||||
@@ -398,14 +393,25 @@ public class AccessibilitySettingsTest {
|
||||
public void testAccessibilityMenuInSystem_IncludedInInteractionControl() {
|
||||
mShadowAccessibilityManager.setInstalledAccessibilityServiceList(
|
||||
List.of(getMockAccessibilityServiceInfo(
|
||||
AccessibilityUtils.ACCESSIBILITY_MENU_IN_SYSTEM)));
|
||||
AccessibilityUtils.ACCESSIBILITY_MENU_IN_SYSTEM,
|
||||
/*isSystemApp=*/true)));
|
||||
setupFragment();
|
||||
|
||||
final RestrictedPreference pref = mFragment.getPreferenceScreen().findPreference(
|
||||
AccessibilityUtils.ACCESSIBILITY_MENU_IN_SYSTEM.flattenToString());
|
||||
final String prefCategory = mFragment.mServicePreferenceToPreferenceCategoryMap.get(
|
||||
pref).getKey();
|
||||
assertThat(prefCategory).isEqualTo(AccessibilitySettings.CATEGORY_INTERACTION_CONTROL);
|
||||
assertThat(getPreferenceCategory(AccessibilityUtils.ACCESSIBILITY_MENU_IN_SYSTEM))
|
||||
.isEqualTo(AccessibilitySettings.CATEGORY_INTERACTION_CONTROL);
|
||||
}
|
||||
|
||||
@Test
|
||||
@EnableFlags(com.android.settings.accessibility.Flags.FLAG_CHECK_PREBUNDLED_IS_PREINSTALLED)
|
||||
public void testNonPreinstalledApp_IncludedInDownloadedCategory() {
|
||||
mShadowAccessibilityManager.setInstalledAccessibilityServiceList(
|
||||
List.of(getMockAccessibilityServiceInfo(
|
||||
AccessibilityUtils.ACCESSIBILITY_MENU_IN_SYSTEM,
|
||||
/*isSystemApp=*/false)));
|
||||
setupFragment();
|
||||
|
||||
assertThat(getPreferenceCategory(AccessibilityUtils.ACCESSIBILITY_MENU_IN_SYSTEM))
|
||||
.isEqualTo(AccessibilitySettings.CATEGORY_DOWNLOADED_SERVICES);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -418,13 +424,20 @@ public class AccessibilitySettingsTest {
|
||||
assertThat(pref).isNull();
|
||||
}
|
||||
|
||||
private AccessibilityServiceInfo getMockAccessibilityServiceInfo(String packageName,
|
||||
String className) {
|
||||
return getMockAccessibilityServiceInfo(new ComponentName(packageName, className));
|
||||
private String getPreferenceCategory(ComponentName componentName) {
|
||||
return mFragment.mServicePreferenceToPreferenceCategoryMap.get(
|
||||
mFragment.getPreferenceScreen().findPreference(
|
||||
componentName.flattenToString())).getKey();
|
||||
}
|
||||
|
||||
private AccessibilityServiceInfo getMockAccessibilityServiceInfo(ComponentName componentName) {
|
||||
final ApplicationInfo applicationInfo = new ApplicationInfo();
|
||||
return getMockAccessibilityServiceInfo(componentName, true);
|
||||
}
|
||||
|
||||
private AccessibilityServiceInfo getMockAccessibilityServiceInfo(ComponentName componentName,
|
||||
boolean isSystemApp) {
|
||||
final ApplicationInfo applicationInfo = Mockito.mock(ApplicationInfo.class);
|
||||
when(applicationInfo.isSystemApp()).thenReturn(isSystemApp);
|
||||
final ServiceInfo serviceInfo = new ServiceInfo();
|
||||
applicationInfo.packageName = componentName.getPackageName();
|
||||
serviceInfo.packageName = componentName.getPackageName();
|
||||
@@ -445,16 +458,6 @@ public class AccessibilitySettingsTest {
|
||||
return null;
|
||||
}
|
||||
|
||||
private void setMockAccessibilityShortcutInfo(AccessibilityShortcutInfo mockInfo) {
|
||||
final ActivityInfo activityInfo = Mockito.mock(ActivityInfo.class);
|
||||
activityInfo.applicationInfo = new ApplicationInfo();
|
||||
when(mockInfo.getActivityInfo()).thenReturn(activityInfo);
|
||||
when(activityInfo.loadLabel(any())).thenReturn(DEFAULT_LABEL);
|
||||
when(mockInfo.loadSummary(any())).thenReturn(DEFAULT_SUMMARY);
|
||||
when(mockInfo.loadDescription(any())).thenReturn(DEFAULT_DESCRIPTION);
|
||||
when(mockInfo.getComponentName()).thenReturn(COMPONENT_NAME);
|
||||
}
|
||||
|
||||
private void setInvisibleToggleFragmentType(AccessibilityServiceInfo info) {
|
||||
info.getResolveInfo().serviceInfo.applicationInfo.targetSdkVersion = Build.VERSION_CODES.R;
|
||||
info.flags |= AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON;
|
||||
|
Reference in New Issue
Block a user