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

Commit f80ac25c authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Merge "Updates internal lock task mode state early" into rvc-dev am:...

Merge "Merge "Updates internal lock task mode state early" into rvc-dev am: 836d2b0f am: 433364c4 am: bdeb63f8" into rvc-qpr-dev-plus-aosp am: b6698f7a

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11942587

Change-Id: Ic3c308b1cd465ee64ed4c1a34599ecd4d6ed22c5
parents f29cf4a8 b6698f7a
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -175,7 +175,7 @@ public class LockTaskController {
     * {@link ActivityManager#LOCK_TASK_MODE_NONE}, {@link ActivityManager#LOCK_TASK_MODE_LOCKED},
     * {@link ActivityManager#LOCK_TASK_MODE_PINNED}
     */
    private int mLockTaskModeState = LOCK_TASK_MODE_NONE;
    private volatile int mLockTaskModeState = LOCK_TASK_MODE_NONE;

    /**
     * This is ActivityStackSupervisor's Handler.
@@ -500,24 +500,29 @@ public class LockTaskController {

    // This method should only be called on the handler thread
    private void performStopLockTask(int userId) {
        // Update the internal mLockTaskModeState early to avoid the scenario that SysUI queries
        // mLockTaskModeState (from setStatusBarState) and gets staled state.
        // TODO: revisit this approach.
        // The race condition raised above can be addressed by moving this function out of handler
        // thread, which makes it guarded by ATMS#mGlobalLock as ATMS#getLockTaskModeState.
        final int oldLockTaskModeState = mLockTaskModeState;
        mLockTaskModeState = LOCK_TASK_MODE_NONE;
        // When lock task ends, we enable the status bars.
        try {
            setStatusBarState(LOCK_TASK_MODE_NONE, userId);
            setKeyguardState(LOCK_TASK_MODE_NONE, userId);
            if (mLockTaskModeState == LOCK_TASK_MODE_PINNED) {
            setStatusBarState(mLockTaskModeState, userId);
            setKeyguardState(mLockTaskModeState, userId);
            if (oldLockTaskModeState == LOCK_TASK_MODE_PINNED) {
                lockKeyguardIfNeeded();
            }
            if (getDevicePolicyManager() != null) {
                getDevicePolicyManager().notifyLockTaskModeChanged(false, null, userId);
            }
            if (mLockTaskModeState == LOCK_TASK_MODE_PINNED) {
            if (oldLockTaskModeState == LOCK_TASK_MODE_PINNED) {
                getStatusBarService().showPinningEnterExitToast(false /* entering */);
            }
            mWindowManager.onLockTaskStateChanged(LOCK_TASK_MODE_NONE);
            mWindowManager.onLockTaskStateChanged(mLockTaskModeState);
        } catch (RemoteException ex) {
            throw new RuntimeException(ex);
        } finally {
            mLockTaskModeState = LOCK_TASK_MODE_NONE;
        }
    }