From 99e6fc16a13fce709f7d37c3e99daa541b30f8f3 Mon Sep 17 00:00:00 2001 From: nsl Date: Wed, 3 May 2023 10:43:45 +0000 Subject: Override work profile OEM telephony shortcuts with defaults Using the DIALER and SMS role holders to replace the shortucts in the launcher. Bug: 279035836 Test: btest a.d.g.WorkTelephonyTest Change-Id: I9e6dc0c8b751901f27b2744c2c2b9111e80906d6 --- .../devicepolicy/DevicePolicyManagerService.java | 53 +++++++++++++--------- 1 file 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 shortcutOverrides = new ArrayMap<>(); + int managedUserId = getManagedUserId(); + List dialerRoleHolders = mRoleManager.getRoleHoldersAsUser(RoleManager.ROLE_DIALER, + UserHandle.of(managedUserId)); + List 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); } -- cgit v1.2.3-59-g8ed1b