diff options
| author | 2024-12-25 11:49:40 +0000 | |
|---|---|---|
| committer | 2024-12-25 11:58:58 +0000 | |
| commit | b4945cf98c97121821c178713a613a6a6e830c3a (patch) | |
| tree | 7f46cc4148e30cd2f5e13d93817dd8eef2e11a40 | |
| parent | e1fb10c9a52d39f5dbeafe05b9c9dca84f1db9e5 (diff) | |
Avoid app pinning requests if the Task is already locked
Bug: 378514614
Test: LockTaskControllerTest
Flag: EXEMPT bugfix
Change-Id: Ic5d2125d39e5e98301d79c8f5aa8986a44e06794
| -rw-r--r-- | services/core/java/com/android/server/wm/LockTaskController.java | 4 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/LockTaskControllerTest.java | 5 |
2 files changed, 9 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/wm/LockTaskController.java b/services/core/java/com/android/server/wm/LockTaskController.java index 06049530da18..559b0636dc0b 100644 --- a/services/core/java/com/android/server/wm/LockTaskController.java +++ b/services/core/java/com/android/server/wm/LockTaskController.java @@ -653,6 +653,10 @@ public class LockTaskController { if (!isSystemCaller) { task.mLockTaskUid = callingUid; if (task.mLockTaskAuth == LOCK_TASK_AUTH_PINNABLE) { + if (mLockTaskModeTasks.contains(task)) { + ProtoLog.w(WM_DEBUG_LOCKTASK, "Already locked."); + return; + } // startLockTask() called by app, but app is not part of lock task allowlist. Show // app pinning request. We will come back here with isSystemCaller true. ProtoLog.w(WM_DEBUG_LOCKTASK, "Mode default, asking user"); diff --git a/services/tests/wmtests/src/com/android/server/wm/LockTaskControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/LockTaskControllerTest.java index bef4531c9f28..5122aeee588a 100644 --- a/services/tests/wmtests/src/com/android/server/wm/LockTaskControllerTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/LockTaskControllerTest.java @@ -239,6 +239,11 @@ public class LockTaskControllerTest { verifyLockTaskStarted(STATUS_BAR_MASK_PINNED, DISABLE2_NONE); // THEN screen pinning toast should be shown verify(mStatusBarService).showPinningEnterExitToast(eq(true /* entering */)); + + // WHEN the app calls startLockTaskMode while the Task is already locked + mLockTaskController.startLockTaskMode(tr, false, TEST_UID); + // THEN a pinning request should NOT be shown + verify(mStatusBarManagerInternal, never()).showScreenPinningRequest(anyInt(), anyInt()); } @Test |