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

Commit 1708c3da authored by Pavel Grafov's avatar Pavel Grafov
Browse files

Make cross user suspension flag fixed read only

Bug: 331765915
Test: atest CtsSuspendAppsTestCases:android.suspendapps.cts.CrossUserSuspendTest
Test: manual, suspend an app, reboot

Change-Id: I67215c155caa647326155c3690fe1a74cde8c9e7
parent ef54218e
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -42,6 +42,14 @@ flag {
  bug: "263464464"
}

flag {
  name: "cross_user_suspension_enabled_ro"
  namespace: "enterprise"
  description: "Allow holders of INTERACT_ACROSS_USERS_FULL to suspend apps in different users."
  bug: "263464464"
  is_fixed_read_only: true
}

flag {
  name: "dedicated_device_control_enabled"
  namespace: "enterprise"
+3 −3
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@

package com.android.internal.app;

import static android.app.admin.flags.Flags.crossUserSuspensionEnabled;
import static android.app.admin.flags.Flags.crossUserSuspensionEnabledRo;
import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_AWARE;
import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_UNAWARE;
import static android.content.pm.SuspendDialogInfo.BUTTON_ACTION_MORE_DETAILS;
@@ -234,7 +234,7 @@ public class SuspendedAppActivity extends AlertActivity
        }
        mSuspendedPackage = intent.getStringExtra(EXTRA_SUSPENDED_PACKAGE);
        mSuspendingPackage = intent.getStringExtra(EXTRA_SUSPENDING_PACKAGE);
        if (crossUserSuspensionEnabled()) {
        if (crossUserSuspensionEnabledRo()) {
            mSuspendingUserId = intent.getIntExtra(EXTRA_SUSPENDING_USER, mUserId);
        } else {
            mSuspendingUserId = mUserId;
@@ -373,7 +373,7 @@ public class SuspendedAppActivity extends AlertActivity
                .putExtra(Intent.EXTRA_USER_ID, userId)
                .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                        | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
        if (crossUserSuspensionEnabled() && suspendingPackage != null) {
        if (crossUserSuspensionEnabledRo() && suspendingPackage != null) {
            intent.putExtra(EXTRA_SUSPENDING_USER, suspendingPackage.userId);
        }
        return intent;
+3 −3
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@

package com.android.server.pm;

import static android.app.admin.flags.Flags.crossUserSuspensionEnabled;
import static android.app.admin.flags.Flags.crossUserSuspensionEnabledRo;
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
import static android.content.pm.PackageManager.RESTRICTION_NONE;

@@ -690,7 +690,7 @@ abstract class PackageManagerInternalBase extends PackageManagerInternal {
    @Deprecated
    public final void unsuspendAdminSuspendedPackages(int affectedUser) {
        final int suspendingUserId =
                crossUserSuspensionEnabled() ? UserHandle.USER_SYSTEM : affectedUser;
                crossUserSuspensionEnabledRo() ? UserHandle.USER_SYSTEM : affectedUser;
        mService.unsuspendForSuspendingPackage(
                snapshot(), PLATFORM_PACKAGE_NAME, suspendingUserId, /* inAllUsers= */ false);
    }
@@ -699,7 +699,7 @@ abstract class PackageManagerInternalBase extends PackageManagerInternal {
    @Deprecated
    public final boolean isAdminSuspendingAnyPackages(int userId) {
        final int suspendingUserId =
                crossUserSuspensionEnabled() ? UserHandle.USER_SYSTEM : userId;
                crossUserSuspensionEnabledRo() ? UserHandle.USER_SYSTEM : userId;
        return snapshot().isSuspendingAnyPackages(PLATFORM_PACKAGE_NAME, suspendingUserId, userId);
    }

+6 −6
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ package com.android.server.pm;
import static android.Manifest.permission.MANAGE_DEVICE_ADMINS;
import static android.Manifest.permission.SET_HARMFUL_APP_WARNINGS;
import static android.app.AppOpsManager.MODE_IGNORED;
import static android.app.admin.flags.Flags.crossUserSuspensionEnabled;
import static android.app.admin.flags.Flags.crossUserSuspensionEnabledRo;
import static android.content.pm.PackageManager.APP_METADATA_SOURCE_APK;
import static android.content.pm.PackageManager.APP_METADATA_SOURCE_UNKNOWN;
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
@@ -3182,7 +3182,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
                    callingMethod);
        }

        if (crossUserSuspensionEnabled()) {
        if (crossUserSuspensionEnabledRo()) {
            final int suspendingPackageUid =
                    snapshot.getPackageUid(suspender.packageName, 0, suspender.userId);
            if (suspendingPackageUid != callingUid) {
@@ -3220,7 +3220,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
        final String[] allPackages = computer.getPackageStates().keySet().toArray(new String[0]);
        final Predicate<UserPackage> suspenderPredicate =
                UserPackage.of(suspendingUserId, suspendingPackage)::equals;
        if (!crossUserSuspensionEnabled() || !inAllUsers) {
        if (!crossUserSuspensionEnabledRo() || !inAllUsers) {
            mSuspendPackageHelper.removeSuspensionsBySuspendingPackage(computer,
                    allPackages, suspenderPredicate, suspendingUserId);
        } else {
@@ -4366,7 +4366,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
        }
        mInstantAppRegistry.onUserRemoved(userId);
        mPackageMonitorCallbackHelper.onUserRemoved(userId);
        if (crossUserSuspensionEnabled()) {
        if (crossUserSuspensionEnabledRo()) {
            cleanUpCrossUserSuspension(userId);
        }
    }
@@ -6302,7 +6302,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
            final boolean quarantined = ((flags & PackageManager.FLAG_SUSPEND_QUARANTINED) != 0)
                    && Flags.quarantinedEnabled();
            final Computer snapshot = snapshotComputer();
            final UserPackage suspender = crossUserSuspensionEnabled()
            final UserPackage suspender = crossUserSuspensionEnabledRo()
                    ? UserPackage.of(suspendingUserId, suspendingPackage)
                    : UserPackage.of(targetUserId, suspendingPackage);
            enforceCanSetPackagesSuspendedAsUser(snapshot, quarantined, suspender, callingUid,
@@ -6787,7 +6787,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
            // Suspension by admin isn't attributed to admin package but to the platform,
            // Using USER_SYSTEM for consistency with other internal suspenders, like shell or root.
            final int suspendingUserId =
                    crossUserSuspensionEnabled() ? UserHandle.USER_SYSTEM : userId;
                    crossUserSuspensionEnabledRo() ? UserHandle.USER_SYSTEM : userId;
            final UserPackage suspender = UserPackage.of(
                    suspendingUserId, PackageManagerService.PLATFORM_PACKAGE_NAME);
            return mSuspendPackageHelper.setPackagesSuspended(snapshotComputer(), packageNames,
+2 −2
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@

package com.android.server.pm;

import static android.app.admin.flags.Flags.crossUserSuspensionEnabled;
import static android.app.admin.flags.Flags.crossUserSuspensionEnabledRo;
import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_DEFAULT_TO_DEVICE_PROTECTED_STORAGE;
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
@@ -1241,7 +1241,7 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
                for (int j = 0; j < state.getSuspendParams().size(); j++) {
                    proto.write(PackageProto.UserInfoProto.SUSPENDING_PACKAGE,
                            state.getSuspendParams().keyAt(j).packageName);
                    if (crossUserSuspensionEnabled()) {
                    if (crossUserSuspensionEnabledRo()) {
                        proto.write(PackageProto.UserInfoProto.SUSPENDING_USER,
                                state.getSuspendParams().keyAt(j).userId);
                    }
Loading