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
This commit is contained in:
nsl
2023-05-03 10:43:45 +00:00
parent 92b3d1a61a
commit 99e6fc16a1

View File

@@ -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();
// 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));
}
if (defaultSmsPackageName != null) {
shortcutOverrides.put(defaultSmsPackageName, defaultSmsPackageName);
}
mPolicyCache.setLauncherShortcutOverrides(shortcutOverrides);
}