From 5d339f001b17ea4dbfd9a50b15161ab9b90585cb Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Mon, 23 Oct 2017 11:10:58 -0700 Subject: [PATCH] Prevent restoring task when updating task Cherry-pick from: Ie501add4b72a63be0b8514136f10a09fbdd0c6c3 Symptom: App activity shown between launcher & wallpaper. RootCause: Some AM public Apis (getTaskInfo(), setExcluteFromRecent()) will calling AM.anyTaskForIdLocked with MATCH_TASK_IN_STACKS_OR_RECENT_TASKS_AND_RESTORE parameter to get task record & add task into stack bottom, that will affect wm side also create task & bring task stack to bottom due to task.createWindowContainer() in restoreRecentTaskLocked(). Solution: using MATCH_TASK_IN_STACKS_OR_RECENT_TASKS to get task record without restore record into stack. Bug: 67634904 Test: As below issue described sample app flows. b/68038609 Change-Id: I8241c0956a3323a70e754c794dd562540ff4eaf4 Signed-off-by: Winson Chung --- .../core/java/com/android/server/am/AppTaskImpl.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/am/AppTaskImpl.java b/services/core/java/com/android/server/am/AppTaskImpl.java index a4e2e70e0e606..64fefca428b40 100644 --- a/services/core/java/com/android/server/am/AppTaskImpl.java +++ b/services/core/java/com/android/server/am/AppTaskImpl.java @@ -16,6 +16,7 @@ package com.android.server.am; +import static com.android.server.am.ActivityStackSupervisor.MATCH_TASK_IN_STACKS_OR_RECENT_TASKS; import static com.android.server.am.ActivityStackSupervisor.REMOVE_FROM_RECENTS; import android.app.ActivityManager; @@ -76,7 +77,8 @@ class AppTaskImpl extends IAppTask.Stub { synchronized (mService) { long origId = Binder.clearCallingIdentity(); try { - TaskRecord tr = mService.mStackSupervisor.anyTaskForIdLocked(mTaskId); + TaskRecord tr = mService.mStackSupervisor.anyTaskForIdLocked(mTaskId, + MATCH_TASK_IN_STACKS_OR_RECENT_TASKS); if (tr == null) { throw new IllegalArgumentException("Unable to find task ID " + mTaskId); } @@ -110,7 +112,8 @@ class AppTaskImpl extends IAppTask.Stub { TaskRecord tr; IApplicationThread appThread; synchronized (mService) { - tr = mService.mStackSupervisor.anyTaskForIdLocked(mTaskId); + tr = mService.mStackSupervisor.anyTaskForIdLocked(mTaskId, + MATCH_TASK_IN_STACKS_OR_RECENT_TASKS); if (tr == null) { throw new IllegalArgumentException("Unable to find task ID " + mTaskId); } @@ -131,7 +134,8 @@ class AppTaskImpl extends IAppTask.Stub { synchronized (mService) { long origId = Binder.clearCallingIdentity(); try { - TaskRecord tr = mService.mStackSupervisor.anyTaskForIdLocked(mTaskId); + TaskRecord tr = mService.mStackSupervisor.anyTaskForIdLocked(mTaskId, + MATCH_TASK_IN_STACKS_OR_RECENT_TASKS); if (tr == null) { throw new IllegalArgumentException("Unable to find task ID " + mTaskId); }