From d41841f469f3a9e134615e21674507454e0035af Mon Sep 17 00:00:00 2001 From: Jeff Chang Date: Fri, 5 Nov 2021 17:28:55 +0800 Subject: Consider the lock-task mode while using FLAG_ACTIVITY_TASK_ON_HOME The flag will cause a newly launching task to be placed on top of the current home activity task but it did ignore the lock-task mode mechansim. This CL checks the home task whether violated with lock-task mode when startActivity with task-on-home flag. Bug: 202980858 Test: atest TaskTests#testReturnsToHomeRootTask atest ActivityVisibilityTests#testLaunchTaskOnHome Change-Id: I521b9e4fc32648263afb70de3342dbb5f3583330 --- services/core/java/com/android/server/wm/Task.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index ba2da06efab4..dee2f8b831f6 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -1123,7 +1123,11 @@ class Task extends TaskFragment { if (inMultiWindowMode() || !hasChild()) return false; if (intent != null) { final int returnHomeFlags = FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_TASK_ON_HOME; - return intent != null && (intent.getFlags() & returnHomeFlags) == returnHomeFlags; + final Task task = getDisplayArea() != null ? getDisplayArea().getRootHomeTask() : null; + final boolean isLockTaskModeViolation = task != null + && mAtmService.getLockTaskController().isLockTaskModeViolation(task); + return (intent.getFlags() & returnHomeFlags) == returnHomeFlags + && !isLockTaskModeViolation; } final Task bottomTask = getBottomMostTask(); return bottomTask != this && bottomTask.returnsToHomeRootTask(); -- cgit v1.2.3-59-g8ed1b