diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2020-06-11 00:40:28 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-06-11 00:40:28 +0000 |
commit | b14310b5effd8187d34f4cde75ac2edc7aa2026b (patch) | |
tree | a9dcb6a3bbd0d96b46a9c1ea5fc291891e9e35a9 /services/devicepolicy | |
parent | cf2c8428f4f94c12fb5e05dc625a28059786834b (diff) | |
parent | 80b763830e277e9d4f44b82cbb793f06930dbcb2 (diff) |
Merge "Convert personal app suspension on COMP->COPE migration" into rvc-dev
Diffstat (limited to 'services/devicepolicy')
-rw-r--r-- | services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java | 55 |
1 files changed, 43 insertions, 12 deletions
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index df55b3bbd1a4..10ad07cff847 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -2755,7 +2755,8 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { Slog.i(LOG_TAG, "Giving the PO additional power..."); markProfileOwnerOnOrganizationOwnedDeviceUncheckedLocked(poAdminComponent, poUserId); Slog.i(LOG_TAG, "Migrating DO policies to PO..."); - moveDoPoliciesToProfileParentAdmin(doAdmin, poAdmin.getParentActiveAdmin()); + moveDoPoliciesToProfileParentAdminLocked(doAdmin, poAdmin.getParentActiveAdmin()); + migratePersonalAppSuspensionLocked(doUserId, poUserId, poAdmin); saveSettingsLocked(poUserId); Slog.i(LOG_TAG, "Clearing the DO..."); final ComponentName doAdminReceiver = doAdmin.info.getComponent(); @@ -2775,6 +2776,25 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { .write(); } + @GuardedBy("getLockObject()") + private void migratePersonalAppSuspensionLocked( + int doUserId, int poUserId, ActiveAdmin poAdmin) { + final PackageManagerInternal pmi = mInjector.getPackageManagerInternal(); + if (!pmi.isSuspendingAnyPackages(PLATFORM_PACKAGE_NAME, doUserId)) { + Slog.i(LOG_TAG, "DO is not suspending any apps."); + return; + } + + if (getTargetSdk(poAdmin.info.getPackageName(), poUserId) >= Build.VERSION_CODES.R) { + Slog.i(LOG_TAG, "PO is targeting R+, keeping personal apps suspended."); + getUserData(doUserId).mAppsSuspended = true; + poAdmin.mSuspendPersonalApps = true; + } else { + Slog.i(LOG_TAG, "PO isn't targeting R+, unsuspending personal apps."); + pmi.unsuspendForSuspendingPackage(PLATFORM_PACKAGE_NAME, doUserId); + } + } + private void uninstallOrDisablePackage(String packageName, int userHandle) { final ApplicationInfo appInfo; try { @@ -2816,7 +2836,9 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { pi.uninstall(packageName, 0 /* flags */, new IntentSender((IIntentSender) mLocalSender)); } - private void moveDoPoliciesToProfileParentAdmin(ActiveAdmin doAdmin, ActiveAdmin parentAdmin) { + @GuardedBy("getLockObject()") + private void moveDoPoliciesToProfileParentAdminLocked( + ActiveAdmin doAdmin, ActiveAdmin parentAdmin) { // The following policies can be already controlled via parent instance, skip if so. if (parentAdmin.mPasswordPolicy.quality == PASSWORD_QUALITY_UNSPECIFIED) { parentAdmin.mPasswordPolicy = doAdmin.mPasswordPolicy; @@ -16147,25 +16169,34 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { } Slog.i(LOG_TAG, String.format("%s personal apps for user %d", suspended ? "Suspending" : "Unsuspending", userId)); + + if (suspended) { + suspendPersonalAppsInPackageManager(userId); + } else { + mInjector.getPackageManagerInternal().unsuspendForSuspendingPackage( + PLATFORM_PACKAGE_NAME, userId); + } + + synchronized (getLockObject()) { + getUserData(userId).mAppsSuspended = suspended; + saveSettingsLocked(userId); + } + } + + private void suspendPersonalAppsInPackageManager(int userId) { mInjector.binderWithCleanCallingIdentity(() -> { try { final String[] appsToSuspend = mInjector.getPersonalAppsForSuspension(userId); - final String[] failedPackages = mIPackageManager.setPackagesSuspendedAsUser( - appsToSuspend, suspended, null, null, null, PLATFORM_PACKAGE_NAME, userId); - if (!ArrayUtils.isEmpty(failedPackages)) { - Slog.wtf(LOG_TAG, String.format("Failed to %s packages: %s", - suspended ? "suspend" : "unsuspend", String.join(",", failedPackages))); + final String[] failedApps = mIPackageManager.setPackagesSuspendedAsUser( + appsToSuspend, true, null, null, null, PLATFORM_PACKAGE_NAME, userId); + if (!ArrayUtils.isEmpty(failedApps)) { + Slog.wtf(LOG_TAG, "Failed to suspend apps: " + String.join(",", failedApps)); } } catch (RemoteException re) { // Shouldn't happen. Slog.e(LOG_TAG, "Failed talking to the package manager", re); } }); - - synchronized (getLockObject()) { - getUserData(userId).mAppsSuspended = suspended; - saveSettingsLocked(userId); - } } @GuardedBy("getLockObject()") |