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

Commit 5f7b7b5a authored by Hongwei Wang's avatar Hongwei Wang Committed by Automerger Merge Worker
Browse files

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

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

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

Change-Id: I07e8a346b7e860926a506e635a181788a7f1e7eb
parents 0197a6d5 bdeb63f8
Loading
Loading
Loading
Loading
+13 −8
Original line number Original line 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_NONE}, {@link ActivityManager#LOCK_TASK_MODE_LOCKED},
     * {@link ActivityManager#LOCK_TASK_MODE_PINNED}
     * {@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.
     * This is ActivityStackSupervisor's Handler.
@@ -500,24 +500,29 @@ public class LockTaskController {


    // This method should only be called on the handler thread
    // This method should only be called on the handler thread
    private void performStopLockTask(int userId) {
    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.
        // When lock task ends, we enable the status bars.
        try {
        try {
            setStatusBarState(LOCK_TASK_MODE_NONE, userId);
            setStatusBarState(mLockTaskModeState, userId);
            setKeyguardState(LOCK_TASK_MODE_NONE, userId);
            setKeyguardState(mLockTaskModeState, userId);
            if (mLockTaskModeState == LOCK_TASK_MODE_PINNED) {
            if (oldLockTaskModeState == LOCK_TASK_MODE_PINNED) {
                lockKeyguardIfNeeded();
                lockKeyguardIfNeeded();
            }
            }
            if (getDevicePolicyManager() != null) {
            if (getDevicePolicyManager() != null) {
                getDevicePolicyManager().notifyLockTaskModeChanged(false, null, userId);
                getDevicePolicyManager().notifyLockTaskModeChanged(false, null, userId);
            }
            }
            if (mLockTaskModeState == LOCK_TASK_MODE_PINNED) {
            if (oldLockTaskModeState == LOCK_TASK_MODE_PINNED) {
                getStatusBarService().showPinningEnterExitToast(false /* entering */);
                getStatusBarService().showPinningEnterExitToast(false /* entering */);
            }
            }
            mWindowManager.onLockTaskStateChanged(LOCK_TASK_MODE_NONE);
            mWindowManager.onLockTaskStateChanged(mLockTaskModeState);
        } catch (RemoteException ex) {
        } catch (RemoteException ex) {
            throw new RuntimeException(ex);
            throw new RuntimeException(ex);
        } finally {
            mLockTaskModeState = LOCK_TASK_MODE_NONE;
        }
        }
    }
    }