Loading services/core/java/com/android/server/pm/SuspendPackageHelper.java +14 −1 Original line number Diff line number Diff line Loading @@ -418,11 +418,24 @@ public final class SuspendPackageHelper { } String suspendingPackage = null; String suspendedBySystem = null; String qasPackage = null; for (int i = 0; i < userState.getSuspendParams().size(); i++) { suspendingPackage = userState.getSuspendParams().keyAt(i); var suspendParams = userState.getSuspendParams().valueAt(i); if (PLATFORM_PACKAGE_NAME.equals(suspendingPackage)) { return suspendingPackage; suspendedBySystem = suspendingPackage; } if (suspendParams.isQuarantined() && qasPackage == null) { qasPackage = suspendingPackage; } } // Precedence: quarantined, then system, then suspending. if (qasPackage != null) { return qasPackage; } if (suspendedBySystem != null) { return suspendedBySystem; } return suspendingPackage; } Loading services/tests/mockingservicestests/src/com/android/server/pm/PackageHelperTestBase.kt +1 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import org.mockito.MockitoAnnotations open class PackageHelperTestBase { companion object { const val PLATFORM_PACKAGE_NAME = "android" const val TEST_PACKAGE_1 = "com.android.test.package1" const val TEST_PACKAGE_2 = "com.android.test.package2" const val DEVICE_OWNER_PACKAGE = "com.android.test.owner" Loading services/tests/mockingservicestests/src/com/android/server/pm/SuspendPackageHelperTest.kt +66 −0 Original line number Diff line number Diff line Loading @@ -282,6 +282,72 @@ class SuspendPackageHelperTest : PackageHelperTestBase() { TEST_PACKAGE_2, TEST_USER_ID, deviceOwnerUid)).isEqualTo(DEVICE_OWNER_PACKAGE) } @Test fun getSuspendingPackagePrecedence() { val launcherExtras = PersistableBundle() launcherExtras.putString(TEST_PACKAGE_2, TEST_PACKAGE_2) val targetPackages = arrayOf(TEST_PACKAGE_2) // Suspend. var failedNames = suspendPackageHelper.setPackagesSuspended(pms.snapshotComputer(), targetPackages, true /* suspended */, null /* appExtras */, launcherExtras, null /* dialogInfo */, DEVICE_OWNER_PACKAGE, TEST_USER_ID, deviceOwnerUid, false /* quarantined */) assertThat(failedNames).isEmpty() testHandler.flush() assertThat(suspendPackageHelper.getSuspendingPackage(pms.snapshotComputer(), TEST_PACKAGE_2, TEST_USER_ID, deviceOwnerUid)).isEqualTo(DEVICE_OWNER_PACKAGE) // Suspend by system. failedNames = suspendPackageHelper.setPackagesSuspended(pms.snapshotComputer(), targetPackages, true /* suspended */, null /* appExtras */, launcherExtras, null /* dialogInfo */, PLATFORM_PACKAGE_NAME, TEST_USER_ID, deviceOwnerUid, false /* quarantined */) assertThat(failedNames).isEmpty() testHandler.flush() assertThat(suspendPackageHelper.getSuspendingPackage(pms.snapshotComputer(), TEST_PACKAGE_2, TEST_USER_ID, deviceOwnerUid)).isEqualTo(PLATFORM_PACKAGE_NAME) // QAS by package1. failedNames = suspendPackageHelper.setPackagesSuspended(pms.snapshotComputer(), targetPackages, true /* suspended */, null /* appExtras */, launcherExtras, null /* dialogInfo */, TEST_PACKAGE_1, TEST_USER_ID, deviceOwnerUid, true /* quarantined */) assertThat(failedNames).isEmpty() testHandler.flush() assertThat(suspendPackageHelper.getSuspendingPackage(pms.snapshotComputer(), TEST_PACKAGE_2, TEST_USER_ID, deviceOwnerUid)).isEqualTo(TEST_PACKAGE_1) // Un-QAS by package1. suspendPackageHelper.removeSuspensionsBySuspendingPackage(pms.snapshotComputer(), targetPackages, { suspendingPackage -> suspendingPackage == TEST_PACKAGE_1 }, TEST_USER_ID) testHandler.flush() assertThat(suspendPackageHelper.getSuspendingPackage(pms.snapshotComputer(), TEST_PACKAGE_2, TEST_USER_ID, deviceOwnerUid)).isEqualTo(PLATFORM_PACKAGE_NAME) // Un-suspend by system. suspendPackageHelper.removeSuspensionsBySuspendingPackage(pms.snapshotComputer(), targetPackages, { suspendingPackage -> suspendingPackage == PLATFORM_PACKAGE_NAME }, TEST_USER_ID) testHandler.flush() assertThat(suspendPackageHelper.getSuspendingPackage(pms.snapshotComputer(), TEST_PACKAGE_2, TEST_USER_ID, deviceOwnerUid)).isEqualTo(DEVICE_OWNER_PACKAGE) // Unsuspend. suspendPackageHelper.removeSuspensionsBySuspendingPackage(pms.snapshotComputer(), targetPackages, { suspendingPackage -> suspendingPackage == DEVICE_OWNER_PACKAGE }, TEST_USER_ID) testHandler.flush() assertThat(suspendPackageHelper.getSuspendingPackage(pms.snapshotComputer(), TEST_PACKAGE_2, TEST_USER_ID, deviceOwnerUid)).isNull() } @Test fun getSuspendedDialogInfo() { val dialogInfo = SuspendDialogInfo.Builder() Loading Loading
services/core/java/com/android/server/pm/SuspendPackageHelper.java +14 −1 Original line number Diff line number Diff line Loading @@ -418,11 +418,24 @@ public final class SuspendPackageHelper { } String suspendingPackage = null; String suspendedBySystem = null; String qasPackage = null; for (int i = 0; i < userState.getSuspendParams().size(); i++) { suspendingPackage = userState.getSuspendParams().keyAt(i); var suspendParams = userState.getSuspendParams().valueAt(i); if (PLATFORM_PACKAGE_NAME.equals(suspendingPackage)) { return suspendingPackage; suspendedBySystem = suspendingPackage; } if (suspendParams.isQuarantined() && qasPackage == null) { qasPackage = suspendingPackage; } } // Precedence: quarantined, then system, then suspending. if (qasPackage != null) { return qasPackage; } if (suspendedBySystem != null) { return suspendedBySystem; } return suspendingPackage; } Loading
services/tests/mockingservicestests/src/com/android/server/pm/PackageHelperTestBase.kt +1 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import org.mockito.MockitoAnnotations open class PackageHelperTestBase { companion object { const val PLATFORM_PACKAGE_NAME = "android" const val TEST_PACKAGE_1 = "com.android.test.package1" const val TEST_PACKAGE_2 = "com.android.test.package2" const val DEVICE_OWNER_PACKAGE = "com.android.test.owner" Loading
services/tests/mockingservicestests/src/com/android/server/pm/SuspendPackageHelperTest.kt +66 −0 Original line number Diff line number Diff line Loading @@ -282,6 +282,72 @@ class SuspendPackageHelperTest : PackageHelperTestBase() { TEST_PACKAGE_2, TEST_USER_ID, deviceOwnerUid)).isEqualTo(DEVICE_OWNER_PACKAGE) } @Test fun getSuspendingPackagePrecedence() { val launcherExtras = PersistableBundle() launcherExtras.putString(TEST_PACKAGE_2, TEST_PACKAGE_2) val targetPackages = arrayOf(TEST_PACKAGE_2) // Suspend. var failedNames = suspendPackageHelper.setPackagesSuspended(pms.snapshotComputer(), targetPackages, true /* suspended */, null /* appExtras */, launcherExtras, null /* dialogInfo */, DEVICE_OWNER_PACKAGE, TEST_USER_ID, deviceOwnerUid, false /* quarantined */) assertThat(failedNames).isEmpty() testHandler.flush() assertThat(suspendPackageHelper.getSuspendingPackage(pms.snapshotComputer(), TEST_PACKAGE_2, TEST_USER_ID, deviceOwnerUid)).isEqualTo(DEVICE_OWNER_PACKAGE) // Suspend by system. failedNames = suspendPackageHelper.setPackagesSuspended(pms.snapshotComputer(), targetPackages, true /* suspended */, null /* appExtras */, launcherExtras, null /* dialogInfo */, PLATFORM_PACKAGE_NAME, TEST_USER_ID, deviceOwnerUid, false /* quarantined */) assertThat(failedNames).isEmpty() testHandler.flush() assertThat(suspendPackageHelper.getSuspendingPackage(pms.snapshotComputer(), TEST_PACKAGE_2, TEST_USER_ID, deviceOwnerUid)).isEqualTo(PLATFORM_PACKAGE_NAME) // QAS by package1. failedNames = suspendPackageHelper.setPackagesSuspended(pms.snapshotComputer(), targetPackages, true /* suspended */, null /* appExtras */, launcherExtras, null /* dialogInfo */, TEST_PACKAGE_1, TEST_USER_ID, deviceOwnerUid, true /* quarantined */) assertThat(failedNames).isEmpty() testHandler.flush() assertThat(suspendPackageHelper.getSuspendingPackage(pms.snapshotComputer(), TEST_PACKAGE_2, TEST_USER_ID, deviceOwnerUid)).isEqualTo(TEST_PACKAGE_1) // Un-QAS by package1. suspendPackageHelper.removeSuspensionsBySuspendingPackage(pms.snapshotComputer(), targetPackages, { suspendingPackage -> suspendingPackage == TEST_PACKAGE_1 }, TEST_USER_ID) testHandler.flush() assertThat(suspendPackageHelper.getSuspendingPackage(pms.snapshotComputer(), TEST_PACKAGE_2, TEST_USER_ID, deviceOwnerUid)).isEqualTo(PLATFORM_PACKAGE_NAME) // Un-suspend by system. suspendPackageHelper.removeSuspensionsBySuspendingPackage(pms.snapshotComputer(), targetPackages, { suspendingPackage -> suspendingPackage == PLATFORM_PACKAGE_NAME }, TEST_USER_ID) testHandler.flush() assertThat(suspendPackageHelper.getSuspendingPackage(pms.snapshotComputer(), TEST_PACKAGE_2, TEST_USER_ID, deviceOwnerUid)).isEqualTo(DEVICE_OWNER_PACKAGE) // Unsuspend. suspendPackageHelper.removeSuspensionsBySuspendingPackage(pms.snapshotComputer(), targetPackages, { suspendingPackage -> suspendingPackage == DEVICE_OWNER_PACKAGE }, TEST_USER_ID) testHandler.flush() assertThat(suspendPackageHelper.getSuspendingPackage(pms.snapshotComputer(), TEST_PACKAGE_2, TEST_USER_ID, deviceOwnerUid)).isNull() } @Test fun getSuspendedDialogInfo() { val dialogInfo = SuspendDialogInfo.Builder() Loading