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

Commit b6698f7a authored by Automerger Merge Worker's avatar Automerger Merge Worker Committed by Android (Google) Code Review
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
parents 56fa460b 5f7b7b5a
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;
        }
    }