diff options
| -rw-r--r-- | services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java | 53 |
1 files changed, 31 insertions, 22 deletions
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 675ebd3ddd60..9c40af1c0105 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -3611,10 +3611,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { if (isProfileOwnerOfOrganizationOwnedDevice(userId) && getManagedSubscriptionsPolicy().getPolicyType() == ManagedSubscriptionsPolicy.TYPE_ALL_MANAGED_SUBSCRIPTIONS) { - String defaultDialerPackageName = getOemDefaultDialerPackage(); - String defaultSmsPackageName = getOemDefaultSmsPackage(); - updateDialerAndSmsManagedShortcutsOverrideCache(defaultDialerPackageName, - defaultSmsPackageName); + updateDialerAndSmsManagedShortcutsOverrideCache(); } startOwnerService(userId, "start-user"); @@ -10683,15 +10680,6 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { return UserHandle.USER_NULL; } - private @UserIdInt int getManagedProfileUserId() { - for (UserInfo ui : mUserManagerInternal.getUserInfos()) { - if (ui.isManagedProfile()) { - return ui.id; - } - } - return UserHandle.USER_NULL; - } - /** * This API is cached: invalidate with invalidateBinderCaches(). */ @@ -11552,6 +11540,12 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { synchronized (getLockObject()) { final ActiveAdmin activeAdmin = getParentOfAdminIfRequired( getProfileOwnerOrDeviceOwnerLocked(caller.getUserId()), parent); + + if (isManagedProfile(userId)) { + mInjector.binderWithCleanCallingIdentity( + () -> updateDialerAndSmsManagedShortcutsOverrideCache()); + } + if (!Objects.equals(activeAdmin.mSmsPackage, packageName)) { activeAdmin.mSmsPackage = packageName; saveSettingsLocked(caller.getUserId()); @@ -11597,6 +11591,11 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { }); // Only save the package when the setting the role succeeded without exception. synchronized (getLockObject()) { + if (isManagedProfile(callerUserId)) { + mInjector.binderWithCleanCallingIdentity( + () -> updateDialerAndSmsManagedShortcutsOverrideCache()); + } + final ActiveAdmin admin = getProfileOwnerOrDeviceOwnerLocked(callerUserId); if (!Objects.equals(admin.mDialerPackage, packageName)) { admin.mDialerPackage = packageName; @@ -23829,8 +23828,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { Slogf.w(LOG_TAG, "Couldn't install sms app, sms app package is null"); } - updateDialerAndSmsManagedShortcutsOverrideCache(defaultDialerPackageName, - defaultSmsPackageName); + updateDialerAndSmsManagedShortcutsOverrideCache(); } catch (RemoteException re) { // shouldn't happen Slogf.wtf(LOG_TAG, "Failed to install dialer/sms app", re); @@ -23846,17 +23844,28 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { return mContext.getString(R.string.config_defaultSms); } - private void updateDialerAndSmsManagedShortcutsOverrideCache( - String defaultDialerPackageName, String defaultSmsPackageName) { + private void updateDialerAndSmsManagedShortcutsOverrideCache() { ArrayMap<String, String> shortcutOverrides = new ArrayMap<>(); + int managedUserId = getManagedUserId(); + List<String> dialerRoleHolders = mRoleManager.getRoleHoldersAsUser(RoleManager.ROLE_DIALER, + UserHandle.of(managedUserId)); + List<String> smsRoleHolders = mRoleManager.getRoleHoldersAsUser(RoleManager.ROLE_SMS, + UserHandle.of(managedUserId)); - if (defaultDialerPackageName != null) { - shortcutOverrides.put(defaultDialerPackageName, defaultDialerPackageName); - } + String dialerPackageToOverride = getOemDefaultDialerPackage(); + String smsPackageToOverride = getOemDefaultSmsPackage(); - if (defaultSmsPackageName != null) { - shortcutOverrides.put(defaultSmsPackageName, defaultSmsPackageName); + // To get the default app, we can get all the role holders and get the first element. + if (dialerPackageToOverride != null) { + shortcutOverrides.put(dialerPackageToOverride, + dialerRoleHolders.isEmpty() ? dialerPackageToOverride + : dialerRoleHolders.get(0)); } + if (smsPackageToOverride != null) { + shortcutOverrides.put(smsPackageToOverride, + smsRoleHolders.isEmpty() ? smsPackageToOverride : smsRoleHolders.get(0)); + } + mPolicyCache.setLauncherShortcutOverrides(shortcutOverrides); } |