From dd31a10c7f194d70411c8fb8ca8c0ab6751dccb2 Mon Sep 17 00:00:00 2001 From: Jessica Hummel Date: Tue, 16 Sep 2014 11:56:50 +0100 Subject: [PATCH] bug fix: Allow enableSystemApps to be called by profile and device owner. We had an additional check for managed profile in there, so it wasn't working for device owners. Also needed to look at uninstalled packages. Change-Id: I4813f23b00d7905e92ade582ce082a6f295a322d Bug: 17384318 --- .../DevicePolicyManagerService.java | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 95332bc607184..60ed93af3e284 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -17,6 +17,7 @@ package com.android.server.devicepolicy; import static android.Manifest.permission.MANAGE_CA_CERTIFICATES; +import static android.content.pm.PackageManager.GET_UNINSTALLED_PACKAGES; import android.accessibilityservice.AccessibilityServiceInfo; import android.accounts.AccountManager; @@ -4801,19 +4802,19 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { long id = Binder.clearCallingIdentity(); try { - UserManager um = UserManager.get(mContext); - if (!um.getUserInfo(userId).isManagedProfile()) { - throw new IllegalStateException( - "Only call this method from a managed profile."); - } - - UserInfo primaryUser = um.getProfileParent(userId); - if (DBG) { Slog.v(LOG_TAG, "installing " + packageName + " for " + userId); } + UserManager um = UserManager.get(mContext); + UserInfo primaryUser = um.getProfileParent(userId); + + // Call did not come from a managed profile + if (primaryUser == null) { + primaryUser = um.getUserInfo(userId); + } + IPackageManager pm = AppGlobals.getPackageManager(); if (!isSystemApp(pm, packageName, primaryUser.id)) { throw new IllegalArgumentException("Only system apps can be enabled this way."); @@ -4847,13 +4848,13 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { try { UserManager um = UserManager.get(mContext); - if (!um.getUserInfo(userId).isManagedProfile()) { - throw new IllegalStateException( - "Only call this method from a managed profile."); - } - UserInfo primaryUser = um.getProfileParent(userId); + // Call did not come from a managed profile. + if (primaryUser == null) { + primaryUser = um.getUserInfo(userId); + } + IPackageManager pm = AppGlobals.getPackageManager(); List activitiesToEnable = pm.queryIntentActivities(intent, intent.resolveTypeIfNeeded(mContext.getContentResolver()), @@ -4890,7 +4891,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { private boolean isSystemApp(IPackageManager pm, String packageName, int userId) throws RemoteException { - ApplicationInfo appInfo = pm.getApplicationInfo(packageName, 0, userId); + ApplicationInfo appInfo = pm.getApplicationInfo(packageName, GET_UNINSTALLED_PACKAGES, + userId); return (appInfo.flags & ApplicationInfo.FLAG_SYSTEM) > 0; }