Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 99e6fc16 authored by nsl's avatar nsl
Browse files

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
parent 92b3d1a6
Loading
Loading
Loading
Loading
+31 −22
Original line number Original line Diff line number Diff line
@@ -3611,10 +3611,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
        if (isProfileOwnerOfOrganizationOwnedDevice(userId)
        if (isProfileOwnerOfOrganizationOwnedDevice(userId)
                && getManagedSubscriptionsPolicy().getPolicyType()
                && getManagedSubscriptionsPolicy().getPolicyType()
                == ManagedSubscriptionsPolicy.TYPE_ALL_MANAGED_SUBSCRIPTIONS) {
                == ManagedSubscriptionsPolicy.TYPE_ALL_MANAGED_SUBSCRIPTIONS) {
            String defaultDialerPackageName = getOemDefaultDialerPackage();
            updateDialerAndSmsManagedShortcutsOverrideCache();
            String defaultSmsPackageName = getOemDefaultSmsPackage();
            updateDialerAndSmsManagedShortcutsOverrideCache(defaultDialerPackageName,
                    defaultSmsPackageName);
        }
        }
        startOwnerService(userId, "start-user");
        startOwnerService(userId, "start-user");
@@ -10683,15 +10680,6 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
        return UserHandle.USER_NULL;
        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().
     * This API is cached: invalidate with invalidateBinderCaches().
     */
     */
@@ -11552,6 +11540,12 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
        synchronized (getLockObject()) {
        synchronized (getLockObject()) {
            final ActiveAdmin activeAdmin = getParentOfAdminIfRequired(
            final ActiveAdmin activeAdmin = getParentOfAdminIfRequired(
                    getProfileOwnerOrDeviceOwnerLocked(caller.getUserId()), parent);
                    getProfileOwnerOrDeviceOwnerLocked(caller.getUserId()), parent);
            if (isManagedProfile(userId)) {
                mInjector.binderWithCleanCallingIdentity(
                        () -> updateDialerAndSmsManagedShortcutsOverrideCache());
            }
            if (!Objects.equals(activeAdmin.mSmsPackage, packageName)) {
            if (!Objects.equals(activeAdmin.mSmsPackage, packageName)) {
                activeAdmin.mSmsPackage = packageName;
                activeAdmin.mSmsPackage = packageName;
                saveSettingsLocked(caller.getUserId());
                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.
        // Only save the package when the setting the role succeeded without exception.
        synchronized (getLockObject()) {
        synchronized (getLockObject()) {
            if (isManagedProfile(callerUserId)) {
                mInjector.binderWithCleanCallingIdentity(
                        () -> updateDialerAndSmsManagedShortcutsOverrideCache());
            }
            final ActiveAdmin admin = getProfileOwnerOrDeviceOwnerLocked(callerUserId);
            final ActiveAdmin admin = getProfileOwnerOrDeviceOwnerLocked(callerUserId);
            if (!Objects.equals(admin.mDialerPackage, packageName)) {
            if (!Objects.equals(admin.mDialerPackage, packageName)) {
                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");
                Slogf.w(LOG_TAG, "Couldn't install sms app, sms app package is null");
            }
            }
            updateDialerAndSmsManagedShortcutsOverrideCache(defaultDialerPackageName,
            updateDialerAndSmsManagedShortcutsOverrideCache();
                    defaultSmsPackageName);
        } catch (RemoteException re) {
        } catch (RemoteException re) {
            // shouldn't happen
            // shouldn't happen
            Slogf.wtf(LOG_TAG, "Failed to install dialer/sms app", re);
            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);
        return mContext.getString(R.string.config_defaultSms);
    }
    }
    private void updateDialerAndSmsManagedShortcutsOverrideCache(
    private void updateDialerAndSmsManagedShortcutsOverrideCache() {
            String defaultDialerPackageName, String defaultSmsPackageName) {
        ArrayMap<String, String> shortcutOverrides = new ArrayMap<>();
        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) {
        String dialerPackageToOverride = getOemDefaultDialerPackage();
            shortcutOverrides.put(defaultDialerPackageName, defaultDialerPackageName);
        String smsPackageToOverride = getOemDefaultSmsPackage();
        }
        if (defaultSmsPackageName != null) {
        // To get the default app, we can get all the role holders and get the first element.
            shortcutOverrides.put(defaultSmsPackageName, defaultSmsPackageName);
        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);
        mPolicyCache.setLauncherShortcutOverrides(shortcutOverrides);
    }
    }