Loading services/tests/servicestests/src/com/android/server/accessibility/AccessibilitySecurityPolicyTest.java +103 −57 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.server.accessibility; import static android.content.pm.PackageManagerInternal.PACKAGE_INSTALLER; import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation; import static junit.framework.Assert.assertFalse; Loading Loading @@ -46,6 +48,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.InstallSourceInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.content.pm.SigningInfo; Loading @@ -59,6 +62,7 @@ import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityWindowInfo; import com.android.internal.R; import com.android.server.LocalServices; import org.junit.Before; import org.junit.Rule; Loading @@ -84,10 +88,8 @@ public class AccessibilitySecurityPolicyTest { private static final int APP_PID = 2000; private static final int SYSTEM_PID = 558; private static final int TEST_USER_ID = UserHandle.USER_SYSTEM; private static final String TEST_PACKAGE_NAME = "com.android.server.accessibility"; private static final ComponentName TEST_COMPONENT_NAME = new ComponentName( TEST_PACKAGE_NAME, "AccessibilitySecurityPolicyTest"); private static final String ALLOWED_INSTALL_PACKAGE_NAME = "com.allowed.install.package"; "com.android.server.accessibility", "AccessibilitySecurityPolicyTest"); private static final int[] ALWAYS_DISPATCH_EVENTS = { AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED, Loading Loading @@ -158,6 +160,8 @@ public class AccessibilitySecurityPolicyTest { private PackageInfo mMockSourcePackageInfo; @Mock private PolicyWarningUIController mPolicyWarningUIController; @Mock private PackageManagerInternal mPackageManagerInternal; @Before public void setUp() throws PackageManager.NameNotFoundException { Loading @@ -167,20 +171,6 @@ public class AccessibilitySecurityPolicyTest { mContext.addMockSystemService(Context.APP_OPS_SERVICE, mMockAppOpsManager); mContext.getOrCreateTestableResources().addOverride( R.dimen.accessibility_focus_highlight_stroke_width, 1); mContext.getOrCreateTestableResources().addOverride(R.array .config_accessibility_allowed_install_source, new String[]{ALLOWED_INSTALL_PACKAGE_NAME}); when(mMockA11yServiceInfo.getResolveInfo()).thenReturn(mMockResolveInfo); when(mMockA11yServiceInfo.getComponentName()).thenReturn(TEST_COMPONENT_NAME); when(mMockA11yServiceConnection.getServiceInfo()).thenReturn(mMockA11yServiceInfo); when(mMockPackageManager.getPackageInfo(ALLOWED_INSTALL_PACKAGE_NAME, 0)).thenReturn( mMockSourcePackageInfo); mMockResolveInfo.serviceInfo = mMockServiceInfo; mMockServiceInfo.applicationInfo = mMockApplicationInfo; mMockServiceInfo.packageName = TEST_PACKAGE_NAME; mMockSourcePackageInfo.applicationInfo = mMockSourceApplicationInfo; mA11ySecurityPolicy = new AccessibilitySecurityPolicy( mPolicyWarningUIController, mContext, mMockA11yUserManager); Loading Loading @@ -621,92 +611,148 @@ public class AccessibilitySecurityPolicyTest { } @Test public void onBoundServicesChanged_bindNonA11yToolService_activateUIControllerAction() { public void onBoundServicesChanged_nonA11yTool_invokeAction() throws PackageManager.NameNotFoundException { final ArrayList<AccessibilityServiceConnection> boundServices = new ArrayList<>(); boundServices.add(mMockA11yServiceConnection); when(mMockA11yServiceInfo.isAccessibilityTool()).thenReturn(false); initServiceInfoAndConnection(TEST_COMPONENT_NAME, mMockA11yServiceConnection, /* isAccessibilityTool= */ false); mA11ySecurityPolicy.onBoundServicesChangedLocked(TEST_USER_ID, boundServices); verify(mPolicyWarningUIController).onNonA11yCategoryServiceBound(eq(TEST_USER_ID), eq(TEST_COMPONENT_NAME)); } @Test public void onBoundServicesChanged_unbindNonA11yToolService_activateUIControllerAction() { onBoundServicesChanged_bindNonA11yToolService_activateUIControllerAction(); mA11ySecurityPolicy.onBoundServicesChangedLocked(TEST_USER_ID, new ArrayList<>()); verify(mPolicyWarningUIController).onNonA11yCategoryServiceUnbound(eq(TEST_USER_ID), eq(TEST_COMPONENT_NAME)); } @Test public void onBoundServicesChanged_bindSystemA11yToolService_noUIControllerAction() { public void onBoundServicesChanged_sysA11yTool_noAction() throws PackageManager.NameNotFoundException { final ArrayList<AccessibilityServiceConnection> boundServices = new ArrayList<>(); initServiceInfoAndConnection(TEST_COMPONENT_NAME, mMockA11yServiceConnection, /* isAccessibilityTool= */ true, /* isSystemApp= */true, /* installSourceInfo= */ null); boundServices.add(mMockA11yServiceConnection); when(mMockApplicationInfo.isSystemApp()).thenReturn(true); when(mMockA11yServiceInfo.isAccessibilityTool()).thenReturn(true); mA11ySecurityPolicy.onBoundServicesChangedLocked(TEST_USER_ID, boundServices); verify(mPolicyWarningUIController, never()).onNonA11yCategoryServiceBound(anyInt(), any()); } @Test public void onBoundServicesChanged_unbindSystemA11yToolService_noUIControllerAction() { onBoundServicesChanged_bindSystemA11yToolService_noUIControllerAction(); mA11ySecurityPolicy.onBoundServicesChangedLocked(TEST_USER_ID, new ArrayList<>()); verify(mPolicyWarningUIController, never()).onNonA11yCategoryServiceUnbound(anyInt(), any()); } @Test public void onBoundServicesChanged_bindAllowedSourceA11yToolService_noUIControllerAction() public void onBoundServicesChanged_nonSysA11yToolFromAllowedInstallerInAllowedList_noAction() throws PackageManager.NameNotFoundException { final ArrayList<AccessibilityServiceConnection> boundServices = new ArrayList<>(); final String allowedSourcePackageName = "com.allowed.install.package"; mContext.getOrCreateTestableResources().addOverride(R.array .config_accessibility_allowed_install_source, new String[]{allowedSourcePackageName}); // The allowed Installer should be system app in the allowed list. InstallSourceInfo allowedSource = initInstallSourceInfo( allowedSourcePackageName, /* isSystemApp= */ true); initServiceInfoAndConnection(TEST_COMPONENT_NAME, mMockA11yServiceConnection, /* isAccessibilityTool= */ true, /* isSystemApp= */ false, allowedSource); boundServices.add(mMockA11yServiceConnection); when(mMockApplicationInfo.isSystemApp()).thenReturn(false); final InstallSourceInfo installSourceInfo = new InstallSourceInfo( ALLOWED_INSTALL_PACKAGE_NAME, new SigningInfo(), null, ALLOWED_INSTALL_PACKAGE_NAME); when(mMockPackageManager.getInstallSourceInfo(TEST_PACKAGE_NAME)).thenReturn( installSourceInfo); when(mMockSourceApplicationInfo.isSystemApp()).thenReturn(true); when(mMockA11yServiceInfo.isAccessibilityTool()).thenReturn(true); mA11ySecurityPolicy.onBoundServicesChangedLocked(TEST_USER_ID, boundServices); verify(mPolicyWarningUIController, never()).onNonA11yCategoryServiceBound(anyInt(), any()); mA11ySecurityPolicy.onBoundServicesChangedLocked(TEST_USER_ID, new ArrayList<>()); verify(mPolicyWarningUIController, never()).onNonA11yCategoryServiceUnbound(anyInt(), any()); } @Test public void onBoundServicesChanged_bindUnknownSourceA11yToolService_activateUIControllerAction() public void onBoundServicesChanged_nonSysA11yToolFromValidInstallerWithoutAllowedList_noAction() throws PackageManager.NameNotFoundException { final ArrayList<AccessibilityServiceConnection> boundServices = new ArrayList<>(); final String validInstallerPackageName = "com.valid.install.package"; final String defaultInstallerPackageName = "com.default.install.package"; LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternal); when(mPackageManagerInternal.getKnownPackageNames(PACKAGE_INSTALLER, TEST_USER_ID)).thenReturn(new String[]{defaultInstallerPackageName}); mContext.getOrCreateTestableResources().addOverride(R.array .config_accessibility_allowed_install_source, new String[]{}); // The valid Installer should be system app and not the default installer. InstallSourceInfo validSource = initInstallSourceInfo( validInstallerPackageName, /* isSystemApp= */ true); initServiceInfoAndConnection(TEST_COMPONENT_NAME, mMockA11yServiceConnection, /* isAccessibilityTool= */ true, /* isSystemApp= */ false, validSource); boundServices.add(mMockA11yServiceConnection); when(mMockA11yServiceInfo.isAccessibilityTool()).thenReturn(true); final InstallSourceInfo installSourceInfo = new InstallSourceInfo(null, null, null, null); when(mMockPackageManager.getInstallSourceInfo(TEST_PACKAGE_NAME)).thenReturn( installSourceInfo); mA11ySecurityPolicy.onBoundServicesChangedLocked(TEST_USER_ID, boundServices); verify(mPolicyWarningUIController, never()).onNonA11yCategoryServiceBound(anyInt(), any()); verify(mPolicyWarningUIController).onNonA11yCategoryServiceBound(eq(TEST_USER_ID), eq(TEST_COMPONENT_NAME)); mA11ySecurityPolicy.onBoundServicesChangedLocked(TEST_USER_ID, new ArrayList<>()); verify(mPolicyWarningUIController, never()).onNonA11yCategoryServiceUnbound(anyInt(), any()); } @Test public void onSwitchUser_differentUser_activateUIControllerAction() { onBoundServicesChanged_bindNonA11yToolService_activateUIControllerAction(); public void onSwitchUser_oldUserHadAction_invokeActionForOldUser() throws PackageManager.NameNotFoundException { final int newUserId = 2; final ArrayList<AccessibilityServiceConnection> boundServices = new ArrayList<>(); initServiceInfoAndConnection(TEST_COMPONENT_NAME, mMockA11yServiceConnection, /* isAccessibilityTool= */ false); boundServices.add(mMockA11yServiceConnection); mA11ySecurityPolicy.onBoundServicesChangedLocked(TEST_USER_ID, boundServices); verify(mPolicyWarningUIController).onNonA11yCategoryServiceBound(eq(TEST_USER_ID), eq(TEST_COMPONENT_NAME)); mA11ySecurityPolicy.onSwitchUserLocked(2, new HashSet<>()); mA11ySecurityPolicy.onSwitchUserLocked(newUserId, new HashSet<>()); verify(mPolicyWarningUIController).onSwitchUserLocked(eq(2), eq(new HashSet<>())); verify(mPolicyWarningUIController).onSwitchUserLocked(eq(newUserId), eq(new HashSet<>())); verify(mPolicyWarningUIController).onNonA11yCategoryServiceUnbound(eq(TEST_USER_ID), eq(TEST_COMPONENT_NAME)); } private void initServiceInfoAndConnection(ComponentName componentName, AccessibilityServiceConnection connection, boolean isAccessibilityTool) throws PackageManager.NameNotFoundException { initServiceInfoAndConnection(componentName, connection, isAccessibilityTool, false, null); } private void initServiceInfoAndConnection(ComponentName componentName, AccessibilityServiceConnection connection, boolean isAccessibilityTool, boolean isSystemApp, InstallSourceInfo installSourceInfo) throws PackageManager.NameNotFoundException { when(connection.getServiceInfo()).thenReturn(mMockA11yServiceInfo); when(mMockA11yServiceInfo.getComponentName()).thenReturn(componentName); when(mMockA11yServiceInfo.isAccessibilityTool()).thenReturn(isAccessibilityTool); when(mMockA11yServiceInfo.getResolveInfo()).thenReturn(mMockResolveInfo); mMockResolveInfo.serviceInfo = mMockServiceInfo; mMockServiceInfo.applicationInfo = mMockApplicationInfo; mMockServiceInfo.packageName = componentName.getPackageName(); when(mMockApplicationInfo.isSystemApp()).thenReturn(isSystemApp); when(mMockPackageManager.getInstallSourceInfo(componentName.getPackageName())).thenReturn( installSourceInfo); } private InstallSourceInfo initInstallSourceInfo(String packageName, boolean isSystemApp) throws PackageManager.NameNotFoundException { final InstallSourceInfo installSourceInfo = new InstallSourceInfo( packageName, new SigningInfo(), null, packageName); when(mMockPackageManager.getPackageInfo(packageName, 0)).thenReturn( mMockSourcePackageInfo); mMockSourcePackageInfo.applicationInfo = mMockSourceApplicationInfo; when(mMockSourceApplicationInfo.isSystemApp()).thenReturn(isSystemApp); return installSourceInfo; } } Loading
services/tests/servicestests/src/com/android/server/accessibility/AccessibilitySecurityPolicyTest.java +103 −57 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.server.accessibility; import static android.content.pm.PackageManagerInternal.PACKAGE_INSTALLER; import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation; import static junit.framework.Assert.assertFalse; Loading Loading @@ -46,6 +48,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.InstallSourceInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.content.pm.SigningInfo; Loading @@ -59,6 +62,7 @@ import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityWindowInfo; import com.android.internal.R; import com.android.server.LocalServices; import org.junit.Before; import org.junit.Rule; Loading @@ -84,10 +88,8 @@ public class AccessibilitySecurityPolicyTest { private static final int APP_PID = 2000; private static final int SYSTEM_PID = 558; private static final int TEST_USER_ID = UserHandle.USER_SYSTEM; private static final String TEST_PACKAGE_NAME = "com.android.server.accessibility"; private static final ComponentName TEST_COMPONENT_NAME = new ComponentName( TEST_PACKAGE_NAME, "AccessibilitySecurityPolicyTest"); private static final String ALLOWED_INSTALL_PACKAGE_NAME = "com.allowed.install.package"; "com.android.server.accessibility", "AccessibilitySecurityPolicyTest"); private static final int[] ALWAYS_DISPATCH_EVENTS = { AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED, Loading Loading @@ -158,6 +160,8 @@ public class AccessibilitySecurityPolicyTest { private PackageInfo mMockSourcePackageInfo; @Mock private PolicyWarningUIController mPolicyWarningUIController; @Mock private PackageManagerInternal mPackageManagerInternal; @Before public void setUp() throws PackageManager.NameNotFoundException { Loading @@ -167,20 +171,6 @@ public class AccessibilitySecurityPolicyTest { mContext.addMockSystemService(Context.APP_OPS_SERVICE, mMockAppOpsManager); mContext.getOrCreateTestableResources().addOverride( R.dimen.accessibility_focus_highlight_stroke_width, 1); mContext.getOrCreateTestableResources().addOverride(R.array .config_accessibility_allowed_install_source, new String[]{ALLOWED_INSTALL_PACKAGE_NAME}); when(mMockA11yServiceInfo.getResolveInfo()).thenReturn(mMockResolveInfo); when(mMockA11yServiceInfo.getComponentName()).thenReturn(TEST_COMPONENT_NAME); when(mMockA11yServiceConnection.getServiceInfo()).thenReturn(mMockA11yServiceInfo); when(mMockPackageManager.getPackageInfo(ALLOWED_INSTALL_PACKAGE_NAME, 0)).thenReturn( mMockSourcePackageInfo); mMockResolveInfo.serviceInfo = mMockServiceInfo; mMockServiceInfo.applicationInfo = mMockApplicationInfo; mMockServiceInfo.packageName = TEST_PACKAGE_NAME; mMockSourcePackageInfo.applicationInfo = mMockSourceApplicationInfo; mA11ySecurityPolicy = new AccessibilitySecurityPolicy( mPolicyWarningUIController, mContext, mMockA11yUserManager); Loading Loading @@ -621,92 +611,148 @@ public class AccessibilitySecurityPolicyTest { } @Test public void onBoundServicesChanged_bindNonA11yToolService_activateUIControllerAction() { public void onBoundServicesChanged_nonA11yTool_invokeAction() throws PackageManager.NameNotFoundException { final ArrayList<AccessibilityServiceConnection> boundServices = new ArrayList<>(); boundServices.add(mMockA11yServiceConnection); when(mMockA11yServiceInfo.isAccessibilityTool()).thenReturn(false); initServiceInfoAndConnection(TEST_COMPONENT_NAME, mMockA11yServiceConnection, /* isAccessibilityTool= */ false); mA11ySecurityPolicy.onBoundServicesChangedLocked(TEST_USER_ID, boundServices); verify(mPolicyWarningUIController).onNonA11yCategoryServiceBound(eq(TEST_USER_ID), eq(TEST_COMPONENT_NAME)); } @Test public void onBoundServicesChanged_unbindNonA11yToolService_activateUIControllerAction() { onBoundServicesChanged_bindNonA11yToolService_activateUIControllerAction(); mA11ySecurityPolicy.onBoundServicesChangedLocked(TEST_USER_ID, new ArrayList<>()); verify(mPolicyWarningUIController).onNonA11yCategoryServiceUnbound(eq(TEST_USER_ID), eq(TEST_COMPONENT_NAME)); } @Test public void onBoundServicesChanged_bindSystemA11yToolService_noUIControllerAction() { public void onBoundServicesChanged_sysA11yTool_noAction() throws PackageManager.NameNotFoundException { final ArrayList<AccessibilityServiceConnection> boundServices = new ArrayList<>(); initServiceInfoAndConnection(TEST_COMPONENT_NAME, mMockA11yServiceConnection, /* isAccessibilityTool= */ true, /* isSystemApp= */true, /* installSourceInfo= */ null); boundServices.add(mMockA11yServiceConnection); when(mMockApplicationInfo.isSystemApp()).thenReturn(true); when(mMockA11yServiceInfo.isAccessibilityTool()).thenReturn(true); mA11ySecurityPolicy.onBoundServicesChangedLocked(TEST_USER_ID, boundServices); verify(mPolicyWarningUIController, never()).onNonA11yCategoryServiceBound(anyInt(), any()); } @Test public void onBoundServicesChanged_unbindSystemA11yToolService_noUIControllerAction() { onBoundServicesChanged_bindSystemA11yToolService_noUIControllerAction(); mA11ySecurityPolicy.onBoundServicesChangedLocked(TEST_USER_ID, new ArrayList<>()); verify(mPolicyWarningUIController, never()).onNonA11yCategoryServiceUnbound(anyInt(), any()); } @Test public void onBoundServicesChanged_bindAllowedSourceA11yToolService_noUIControllerAction() public void onBoundServicesChanged_nonSysA11yToolFromAllowedInstallerInAllowedList_noAction() throws PackageManager.NameNotFoundException { final ArrayList<AccessibilityServiceConnection> boundServices = new ArrayList<>(); final String allowedSourcePackageName = "com.allowed.install.package"; mContext.getOrCreateTestableResources().addOverride(R.array .config_accessibility_allowed_install_source, new String[]{allowedSourcePackageName}); // The allowed Installer should be system app in the allowed list. InstallSourceInfo allowedSource = initInstallSourceInfo( allowedSourcePackageName, /* isSystemApp= */ true); initServiceInfoAndConnection(TEST_COMPONENT_NAME, mMockA11yServiceConnection, /* isAccessibilityTool= */ true, /* isSystemApp= */ false, allowedSource); boundServices.add(mMockA11yServiceConnection); when(mMockApplicationInfo.isSystemApp()).thenReturn(false); final InstallSourceInfo installSourceInfo = new InstallSourceInfo( ALLOWED_INSTALL_PACKAGE_NAME, new SigningInfo(), null, ALLOWED_INSTALL_PACKAGE_NAME); when(mMockPackageManager.getInstallSourceInfo(TEST_PACKAGE_NAME)).thenReturn( installSourceInfo); when(mMockSourceApplicationInfo.isSystemApp()).thenReturn(true); when(mMockA11yServiceInfo.isAccessibilityTool()).thenReturn(true); mA11ySecurityPolicy.onBoundServicesChangedLocked(TEST_USER_ID, boundServices); verify(mPolicyWarningUIController, never()).onNonA11yCategoryServiceBound(anyInt(), any()); mA11ySecurityPolicy.onBoundServicesChangedLocked(TEST_USER_ID, new ArrayList<>()); verify(mPolicyWarningUIController, never()).onNonA11yCategoryServiceUnbound(anyInt(), any()); } @Test public void onBoundServicesChanged_bindUnknownSourceA11yToolService_activateUIControllerAction() public void onBoundServicesChanged_nonSysA11yToolFromValidInstallerWithoutAllowedList_noAction() throws PackageManager.NameNotFoundException { final ArrayList<AccessibilityServiceConnection> boundServices = new ArrayList<>(); final String validInstallerPackageName = "com.valid.install.package"; final String defaultInstallerPackageName = "com.default.install.package"; LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternal); when(mPackageManagerInternal.getKnownPackageNames(PACKAGE_INSTALLER, TEST_USER_ID)).thenReturn(new String[]{defaultInstallerPackageName}); mContext.getOrCreateTestableResources().addOverride(R.array .config_accessibility_allowed_install_source, new String[]{}); // The valid Installer should be system app and not the default installer. InstallSourceInfo validSource = initInstallSourceInfo( validInstallerPackageName, /* isSystemApp= */ true); initServiceInfoAndConnection(TEST_COMPONENT_NAME, mMockA11yServiceConnection, /* isAccessibilityTool= */ true, /* isSystemApp= */ false, validSource); boundServices.add(mMockA11yServiceConnection); when(mMockA11yServiceInfo.isAccessibilityTool()).thenReturn(true); final InstallSourceInfo installSourceInfo = new InstallSourceInfo(null, null, null, null); when(mMockPackageManager.getInstallSourceInfo(TEST_PACKAGE_NAME)).thenReturn( installSourceInfo); mA11ySecurityPolicy.onBoundServicesChangedLocked(TEST_USER_ID, boundServices); verify(mPolicyWarningUIController, never()).onNonA11yCategoryServiceBound(anyInt(), any()); verify(mPolicyWarningUIController).onNonA11yCategoryServiceBound(eq(TEST_USER_ID), eq(TEST_COMPONENT_NAME)); mA11ySecurityPolicy.onBoundServicesChangedLocked(TEST_USER_ID, new ArrayList<>()); verify(mPolicyWarningUIController, never()).onNonA11yCategoryServiceUnbound(anyInt(), any()); } @Test public void onSwitchUser_differentUser_activateUIControllerAction() { onBoundServicesChanged_bindNonA11yToolService_activateUIControllerAction(); public void onSwitchUser_oldUserHadAction_invokeActionForOldUser() throws PackageManager.NameNotFoundException { final int newUserId = 2; final ArrayList<AccessibilityServiceConnection> boundServices = new ArrayList<>(); initServiceInfoAndConnection(TEST_COMPONENT_NAME, mMockA11yServiceConnection, /* isAccessibilityTool= */ false); boundServices.add(mMockA11yServiceConnection); mA11ySecurityPolicy.onBoundServicesChangedLocked(TEST_USER_ID, boundServices); verify(mPolicyWarningUIController).onNonA11yCategoryServiceBound(eq(TEST_USER_ID), eq(TEST_COMPONENT_NAME)); mA11ySecurityPolicy.onSwitchUserLocked(2, new HashSet<>()); mA11ySecurityPolicy.onSwitchUserLocked(newUserId, new HashSet<>()); verify(mPolicyWarningUIController).onSwitchUserLocked(eq(2), eq(new HashSet<>())); verify(mPolicyWarningUIController).onSwitchUserLocked(eq(newUserId), eq(new HashSet<>())); verify(mPolicyWarningUIController).onNonA11yCategoryServiceUnbound(eq(TEST_USER_ID), eq(TEST_COMPONENT_NAME)); } private void initServiceInfoAndConnection(ComponentName componentName, AccessibilityServiceConnection connection, boolean isAccessibilityTool) throws PackageManager.NameNotFoundException { initServiceInfoAndConnection(componentName, connection, isAccessibilityTool, false, null); } private void initServiceInfoAndConnection(ComponentName componentName, AccessibilityServiceConnection connection, boolean isAccessibilityTool, boolean isSystemApp, InstallSourceInfo installSourceInfo) throws PackageManager.NameNotFoundException { when(connection.getServiceInfo()).thenReturn(mMockA11yServiceInfo); when(mMockA11yServiceInfo.getComponentName()).thenReturn(componentName); when(mMockA11yServiceInfo.isAccessibilityTool()).thenReturn(isAccessibilityTool); when(mMockA11yServiceInfo.getResolveInfo()).thenReturn(mMockResolveInfo); mMockResolveInfo.serviceInfo = mMockServiceInfo; mMockServiceInfo.applicationInfo = mMockApplicationInfo; mMockServiceInfo.packageName = componentName.getPackageName(); when(mMockApplicationInfo.isSystemApp()).thenReturn(isSystemApp); when(mMockPackageManager.getInstallSourceInfo(componentName.getPackageName())).thenReturn( installSourceInfo); } private InstallSourceInfo initInstallSourceInfo(String packageName, boolean isSystemApp) throws PackageManager.NameNotFoundException { final InstallSourceInfo installSourceInfo = new InstallSourceInfo( packageName, new SigningInfo(), null, packageName); when(mMockPackageManager.getPackageInfo(packageName, 0)).thenReturn( mMockSourcePackageInfo); mMockSourcePackageInfo.applicationInfo = mMockSourceApplicationInfo; when(mMockSourceApplicationInfo.isSystemApp()).thenReturn(isSystemApp); return installSourceInfo; } }