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

Commit eb090205 authored by Pavel Grafov's avatar Pavel Grafov Committed by Automerger Merge Worker
Browse files

Merge "Exempt mgmt role holder from quiet mode suspension" into udc-dev am: bbede1d8

parents de044aa7 bbede1d8
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3409,7 +3409,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
    }

    @Nullable
    private String getDevicePolicyManagementRoleHolderPackageName(int userId) {
    public String getDevicePolicyManagementRoleHolderPackageName(int userId) {
        return Binder.withCleanCallingIdentity(() -> {
            RoleManager roleManager = mContext.getSystemService(RoleManager.class);
            List<String> roleHolders =
+4 −0
Original line number Diff line number Diff line
@@ -724,6 +724,10 @@ public final class SuspendPackageHelper {
        for (PackageInfo info : pkgInfos) {
            result.add(info.packageName);
        }

        // Role holder may be null, but ArraySet handles it correctly.
        result.remove(mPm.getDevicePolicyManagementRoleHolderPackageName(userId));

        return result;
    }

+16 −2
Original line number Diff line number Diff line
@@ -280,6 +280,10 @@ class ActivityStartInterceptor {
            return false;
        }

        if (isKeepProfilesRunningEnabled() && !isPackageSuspended()) {
            return false;
        }

        IntentSender target = createIntentSenderForOriginalIntent(mCallingUid,
                FLAG_CANCEL_CURRENT | FLAG_ONE_SHOT);

@@ -322,8 +326,7 @@ class ActivityStartInterceptor {

    private boolean interceptSuspendedPackageIfNeeded() {
        // Do not intercept if the package is not suspended
        if (mAInfo == null || mAInfo.applicationInfo == null ||
                (mAInfo.applicationInfo.flags & FLAG_SUSPENDED) == 0) {
        if (!isPackageSuspended()) {
            return false;
        }
        final PackageManagerInternal pmi = mService.getPackageManagerInternalLocked();
@@ -467,6 +470,17 @@ class ActivityStartInterceptor {
        return true;
    }

    private boolean isPackageSuspended() {
        return mAInfo != null && mAInfo.applicationInfo != null
                && (mAInfo.applicationInfo.flags & FLAG_SUSPENDED) != 0;
    }

    private static boolean isKeepProfilesRunningEnabled() {
        DevicePolicyManagerInternal dpmi =
                LocalServices.getService(DevicePolicyManagerInternal.class);
        return dpmi == null || dpmi.isKeepProfilesRunningEnabled();
    }

    /**
     * Called when an activity is successfully launched.
     */
+3 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ open class PackageHelperTestBase {
        const val UNINSTALLER_PACKAGE = "com.android.test.known.uninstaller"
        const val VERIFIER_PACKAGE = "com.android.test.known.verifier"
        const val PERMISSION_CONTROLLER_PACKAGE = "com.android.test.known.permission"
        const val MGMT_ROLE_HOLDER_PACKAGE = "com.android.test.know.device_management"
        const val TEST_USER_ID = 0
    }

@@ -119,6 +120,8 @@ open class PackageHelperTestBase {
        Mockito.doReturn(arrayOf(PERMISSION_CONTROLLER_PACKAGE)).`when`(pms)
                .getKnownPackageNamesInternal(any(),
                        eq(KnownPackages.PACKAGE_PERMISSION_CONTROLLER), eq(TEST_USER_ID))
        Mockito.doReturn(MGMT_ROLE_HOLDER_PACKAGE).`when`(pms)
                .getDevicePolicyManagementRoleHolderPackageName(eq(TEST_USER_ID))
    }

    private fun createPackageManagerService(vararg stageExistingPackages: String):
+3 −2
Original line number Diff line number Diff line
@@ -128,13 +128,14 @@ class SuspendPackageHelperTest : PackageHelperTestBase() {
    fun setPackagesSuspended_forQuietMode() {
        val knownPackages = arrayOf(DEVICE_ADMIN_PACKAGE, DEFAULT_HOME_PACKAGE, DIALER_PACKAGE,
                INSTALLER_PACKAGE, UNINSTALLER_PACKAGE, VERIFIER_PACKAGE,
                PERMISSION_CONTROLLER_PACKAGE)
                PERMISSION_CONTROLLER_PACKAGE, MGMT_ROLE_HOLDER_PACKAGE)
        val failedNames = suspendPackageHelper.setPackagesSuspended(pms.snapshotComputer(),
                knownPackages, true /* suspended */, null /* appExtras */,
                null /* launcherExtras */, null /* dialogInfo */, DEVICE_OWNER_PACKAGE,
                TEST_USER_ID, deviceOwnerUid, true /* forQuietMode */)!!

        assertThat(failedNames.size).isEqualTo(0)
        assertThat(failedNames.size).isEqualTo(1)
        assertThat(failedNames[0]).isEqualTo(MGMT_ROLE_HOLDER_PACKAGE)
    }

    @Test
Loading