Merge "Updates internal lock task mode state early" into rvc-dev am: 836d2b0fac am: 433364c4fe am: bdeb63f8f6
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11942587 Change-Id: I07e8a346b7e860926a506e635a181788a7f1e7eb
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user