Don't end task in finishActivityLocked if task is being reused
In scenarios when the task is being cleared for reuse, endTask
is true in finishActivityLocked even though the task is not actually
going to be removed later on. On Arc++, this leads to issues
because the notifyTaskRemovalStarted notification is delivered
and cleanup work happens for a task that isn't actually removed.
Fix this by looking at TaskRecord.mReuseTask, which is set to
true when the task is cleared in order to be reused.
Cherry-picked from
I3c422f57a8cda55f7b0c08e183f4f1a15d3b7ddd
Bug: 37093330
Test: Launch a test activity that relaunches itself with
FLAG_ACTIVITY_NEW_TASK AND FLAG_ACTIVITY_CLEAR_TASK, verify that
notifyTaskRemovalStarted call back is not sent.
Change-Id: Ifee23ad7104124e38b5ee5e6c520eb25a5846ef2
diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java
index 0c2c204..0ae3619 100644
--- a/services/core/java/com/android/server/am/TaskRecord.java
+++ b/services/core/java/com/android/server/am/TaskRecord.java
@@ -1565,6 +1565,13 @@
}
/**
+ * @return {@code true} if the task is being cleared for the purposes of being reused.
+ */
+ boolean isClearingToReuseTask() {
+ return mReuseTask;
+ }
+
+ /**
* Find the activity in the history stack within the given task. Returns
* the index within the history at which it's found, or < 0 if not found.
*/