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

Commit d5dea3d6 authored by Pavel Grafov's avatar Pavel Grafov
Browse files

Fix session messages for affiliated HSUM DO

Under the hood setStartUserSessionMessage() sets the message to show
when _leaving_ main user, conversely setEndUserSessionMessage() sets
the message to show when _switching back_ to the main user.
On affiliated HSUM DO current code set it on USER_SYSTEM, while the
actual switch will happen from/to the main user. This CL uses main user
id in these cases.
This still will not work for mainless systems.

Bug: 433331731
Bug: 437845664
Test: manual, CTS-V
Flag: EXEMPT BUGFIX
Change-Id: I27daf5d7b054e258a48391968746874a32412987
parent 35f003c2
Loading
Loading
Loading
Loading
+27 −7
Original line number Diff line number Diff line
@@ -3872,11 +3872,11 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
                // Update user switcher message to activity manager.
                ActivityManagerInternal activityManagerInternal =
                        mInjector.getActivityManagerInternal();
                int deviceOwnerUserId = UserHandle.getUserId(deviceOwner.getUid());
                activityManagerInternal.setSwitchingFromUserMessage(deviceOwnerUserId,
                        deviceOwner.startUserSessionMessage);
                activityManagerInternal.setSwitchingToUserMessage(deviceOwnerUserId,
                        deviceOwner.endUserSessionMessage);
                int sessionMessageUserId = getSessionMessageTargetUserIdLocked(deviceOwner);
                activityManagerInternal.setSwitchingFromUserMessage(
                        sessionMessageUserId, deviceOwner.startUserSessionMessage);
                activityManagerInternal.setSwitchingToUserMessage(
                        sessionMessageUserId, deviceOwner.endUserSessionMessage);
            }
            revertTransferOwnershipIfNecessaryLocked();
@@ -20253,6 +20253,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
        final String startUserSessionMessageString =
                startUserSessionMessage != null ? startUserSessionMessage.toString() : null;
        int targetUserId;
        synchronized (getLockObject()) {
            final ActiveAdmin deviceOwner = getDeviceOwnerAdminLocked();
            if (TextUtils.equals(deviceOwner.startUserSessionMessage, startUserSessionMessage)) {
@@ -20260,10 +20261,11 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
            }
            deviceOwner.startUserSessionMessage = startUserSessionMessageString;
            saveSettingsLocked(caller.getUserId());
            targetUserId = getSessionMessageTargetUserIdLocked(deviceOwner);
        }
        mInjector.getActivityManagerInternal()
                .setSwitchingFromUserMessage(caller.getUserId(), startUserSessionMessageString);
                .setSwitchingFromUserMessage(targetUserId, startUserSessionMessageString);
    }
    @Override
@@ -20278,6 +20280,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
        final String endUserSessionMessageString =
                endUserSessionMessage != null ? endUserSessionMessage.toString() : null;
        int targetUserId;
        synchronized (getLockObject()) {
            final ActiveAdmin deviceOwner = getDeviceOwnerAdminLocked();
            if (TextUtils.equals(deviceOwner.endUserSessionMessage, endUserSessionMessage)) {
@@ -20285,10 +20288,27 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
            }
            deviceOwner.endUserSessionMessage = endUserSessionMessageString;
            saveSettingsLocked(caller.getUserId());
            targetUserId = getSessionMessageTargetUserIdLocked(deviceOwner);
        }
        mInjector.getActivityManagerInternal()
                .setSwitchingToUserMessage(caller.getUserId(), endUserSessionMessageString);
                .setSwitchingToUserMessage(targetUserId, endUserSessionMessageString);
    }
    /**
     * Returns id of the main human user managed by the device owner.
     */
    @GuardedBy("getLockObject()")
    private @UserIdInt int getSessionMessageTargetUserIdLocked(ActiveAdmin deviceOwner) {
        if (mInjector.userManagerIsHeadlessSystemUserMode()
                && deviceOwner.info.getHeadlessDeviceOwnerMode()
                        == HEADLESS_DEVICE_OWNER_MODE_AFFILIATED) {
            // TODO: This won't work on main-less devices, will return USER_SYSTEM.
            // Maybe we can assume there is only one admin user?
            return getMainUserId();
        } else {
            return deviceOwner.getUserHandle().getIdentifier();
        }
    }
    @Override