diff options
6 files changed, 48 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/am/LockTaskController.java b/services/core/java/com/android/server/am/LockTaskController.java index af99111e4bfa..ed39329844ef 100644 --- a/services/core/java/com/android/server/am/LockTaskController.java +++ b/services/core/java/com/android/server/am/LockTaskController.java @@ -469,6 +469,7 @@ public class LockTaskController { if (mLockTaskModeState == LOCK_TASK_MODE_PINNED) { getStatusBarService().showPinningEnterExitToast(false /* entering */); } + mWindowManager.onLockTaskStateChanged(LOCK_TASK_MODE_NONE); } catch (RemoteException ex) { throw new RuntimeException(ex); } finally { @@ -580,6 +581,7 @@ public class LockTaskController { if (lockTaskModeState == LOCK_TASK_MODE_PINNED) { getStatusBarService().showPinningEnterExitToast(true /* entering */); } + mWindowManager.onLockTaskStateChanged(lockTaskModeState); mLockTaskModeState = lockTaskModeState; setStatusBarState(lockTaskModeState, userId); setKeyguardState(lockTaskModeState, userId); diff --git a/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java b/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java index c6ec287d9c6a..4aa24465215b 100644 --- a/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java +++ b/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java @@ -16,6 +16,9 @@ package com.android.server.policy; +import static android.app.ActivityManager.LOCK_TASK_MODE_LOCKED; +import static android.app.ActivityManager.LOCK_TASK_MODE_NONE; + import android.animation.ArgbEvaluator; import android.animation.ValueAnimator; import android.app.ActivityManager; @@ -78,6 +81,7 @@ public class ImmersiveModeConfirmation { // Local copy of vr mode enabled state, to avoid calling into VrManager with // the lock held. boolean mVrModeEnabled = false; + private int mLockTaskState = LOCK_TASK_MODE_NONE; public ImmersiveModeConfirmation(Context context) { mContext = ActivityThread.currentActivityThread().getSystemUiContext(); @@ -148,7 +152,8 @@ public class ImmersiveModeConfirmation { && userSetupComplete && !mVrModeEnabled && !navBarEmpty - && !UserManager.isDeviceInDemoMode(mContext)) { + && !UserManager.isDeviceInDemoMode(mContext) + && (mLockTaskState != LOCK_TASK_MODE_LOCKED)) { mHandler.sendEmptyMessageDelayed(H.SHOW, mShowDelayMs); } } else { @@ -401,4 +406,8 @@ public class ImmersiveModeConfirmation { } } }; + + void onLockTaskModeChangedLw(int lockTaskState) { + mLockTaskState = lockTaskState; + } } diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 87be0a21d7d3..bb28f2b9cd2b 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -8786,4 +8786,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { return Integer.toString(behavior); } } + + @Override + public void onLockTaskStateChangedLw(int lockTaskState) { + mImmersiveModeConfirmation.onLockTaskModeChangedLw(lockTaskState); + } } diff --git a/services/core/java/com/android/server/policy/WindowManagerPolicy.java b/services/core/java/com/android/server/policy/WindowManagerPolicy.java index 9bd508e60202..8dfaac2c3c4d 100644 --- a/services/core/java/com/android/server/policy/WindowManagerPolicy.java +++ b/services/core/java/com/android/server/policy/WindowManagerPolicy.java @@ -66,6 +66,7 @@ import static java.lang.annotation.RetentionPolicy.SOURCE; import android.Manifest; import android.annotation.IntDef; import android.annotation.Nullable; +import android.app.ActivityManager; import android.content.Context; import android.content.pm.ActivityInfo; import android.content.res.CompatibilityInfo; @@ -1730,4 +1731,15 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants { * on the next user activity. */ public void requestUserActivityNotification(); + + /** + * Called when the state of lock task mode changes. This should be used to disable immersive + * mode confirmation. + * + * @param lockTaskState the new lock task mode state. One of + * {@link ActivityManager#LOCK_TASK_MODE_NONE}, + * {@link ActivityManager#LOCK_TASK_MODE_LOCKED}, + * {@link ActivityManager#LOCK_TASK_MODE_PINNED}. + */ + void onLockTaskStateChangedLw(int lockTaskState); } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 1ded81d0351b..98e6bf9e319d 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -7436,5 +7436,19 @@ public class WindowManagerService extends IWindowManager.Stub mH.obtainMessage(H.SET_RUNNING_REMOTE_ANIMATION, pid, runningRemoteAnimation ? 1 : 0) .sendToTarget(); } -} + /** + * Called when the state of lock task mode changes. This should be used to disable immersive + * mode confirmation. + * + * @param lockTaskState the new lock task mode state. One of + * {@link ActivityManager#LOCK_TASK_MODE_NONE}, + * {@link ActivityManager#LOCK_TASK_MODE_LOCKED}, + * {@link ActivityManager#LOCK_TASK_MODE_PINNED}. + */ + public void onLockTaskStateChanged(int lockTaskState) { + synchronized (mWindowMap) { + mPolicy.onLockTaskStateChangedLw(lockTaskState); + } + } +} diff --git a/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java b/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java index 6784e302a5c4..6d9167fda585 100644 --- a/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java +++ b/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java @@ -656,4 +656,8 @@ class TestWindowManagerPolicy implements WindowManagerPolicy { @Override public void requestUserActivityNotification() { } + + @Override + public void onLockTaskStateChangedLw(int lockTaskState) { + } } |