Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c41b4a4e authored by Alex Buynytskyy's avatar Alex Buynytskyy
Browse files

Suspension state(s) precedence.

Fixes: 315859704
Test: atest SuspendPackageHelperTest
Change-Id: I50bc322d247d20894071d46aca9db842d9d9034e
parent f350b433
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -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;
    }
+1 −0
Original line number Diff line number Diff line
@@ -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"
+66 −0
Original line number Diff line number Diff line
@@ -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()