Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5d339f00 authored by Winson Chung's avatar Winson Chung
Browse files

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: default avatarWinson Chung <winsonc@google.com>
parent 95111379
Loading
Loading
Loading
Loading
+7 −3
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@


package com.android.server.am;
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 static com.android.server.am.ActivityStackSupervisor.REMOVE_FROM_RECENTS;


import android.app.ActivityManager;
import android.app.ActivityManager;
@@ -76,7 +77,8 @@ class AppTaskImpl extends IAppTask.Stub {
        synchronized (mService) {
        synchronized (mService) {
            long origId = Binder.clearCallingIdentity();
            long origId = Binder.clearCallingIdentity();
            try {
            try {
                TaskRecord tr = mService.mStackSupervisor.anyTaskForIdLocked(mTaskId);
                TaskRecord tr = mService.mStackSupervisor.anyTaskForIdLocked(mTaskId,
                        MATCH_TASK_IN_STACKS_OR_RECENT_TASKS);
                if (tr == null) {
                if (tr == null) {
                    throw new IllegalArgumentException("Unable to find task ID " + mTaskId);
                    throw new IllegalArgumentException("Unable to find task ID " + mTaskId);
                }
                }
@@ -110,7 +112,8 @@ class AppTaskImpl extends IAppTask.Stub {
        TaskRecord tr;
        TaskRecord tr;
        IApplicationThread appThread;
        IApplicationThread appThread;
        synchronized (mService) {
        synchronized (mService) {
            tr = mService.mStackSupervisor.anyTaskForIdLocked(mTaskId);
            tr = mService.mStackSupervisor.anyTaskForIdLocked(mTaskId,
                    MATCH_TASK_IN_STACKS_OR_RECENT_TASKS);
            if (tr == null) {
            if (tr == null) {
                throw new IllegalArgumentException("Unable to find task ID " + mTaskId);
                throw new IllegalArgumentException("Unable to find task ID " + mTaskId);
            }
            }
@@ -131,7 +134,8 @@ class AppTaskImpl extends IAppTask.Stub {
        synchronized (mService) {
        synchronized (mService) {
            long origId = Binder.clearCallingIdentity();
            long origId = Binder.clearCallingIdentity();
            try {
            try {
                TaskRecord tr = mService.mStackSupervisor.anyTaskForIdLocked(mTaskId);
                TaskRecord tr = mService.mStackSupervisor.anyTaskForIdLocked(mTaskId,
                        MATCH_TASK_IN_STACKS_OR_RECENT_TASKS);
                if (tr == null) {
                if (tr == null) {
                    throw new IllegalArgumentException("Unable to find task ID " + mTaskId);
                    throw new IllegalArgumentException("Unable to find task ID " + mTaskId);
                }
                }