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

Commit cd7159b1 authored by Alex Buynytskyy's avatar Alex Buynytskyy Committed by Android (Google) Code Review
Browse files

Merge "Suspension state(s) precedence." into main

parents df4a15fb c41b4a4e
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()