summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Hani Kazmi <hanikazmi@google.com> 2023-02-27 13:47:22 +0000
committer Hani Kazmi <hanikazmi@google.com> 2023-02-27 17:21:31 +0000
commit5cc88e94fd980cdbb4f7693ec4d5af78f642879b (patch)
tree4bd9ff5f9d822c8ac22bc070f260c58743a40146
parentaf730e95f9ee8addee88d45660dfdc7fce91e457 (diff)
ASM - Allow sources to launch into own task with NEW_TASK
This was previously blocked to try and provide consistency with launching into a different task. Relaxing for compatibility. Usecase: An app launches its main_activity, which trampolines with NEW_TASK and matching affinity to main_activity. If the user goes home before the trampoline, it would be blocked before this change. Bug: 270680647 Test: atest ActivitySecurityModelTest Change-Id: Ib9412d6cd9c7183da19fee8afd4bc47524d5736c
-rw-r--r--services/core/java/com/android/server/wm/ActivitySecurityModelFeatureFlags.java2
-rw-r--r--services/core/java/com/android/server/wm/ActivityStarter.java8
2 files changed, 7 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/wm/ActivitySecurityModelFeatureFlags.java b/services/core/java/com/android/server/wm/ActivitySecurityModelFeatureFlags.java
index 8a4fc0db0264..1f7af41df6e0 100644
--- a/services/core/java/com/android/server/wm/ActivitySecurityModelFeatureFlags.java
+++ b/services/core/java/com/android/server/wm/ActivitySecurityModelFeatureFlags.java
@@ -43,7 +43,7 @@ class ActivitySecurityModelFeatureFlags {
static final String DOC_LINK = "go/android-asm";
/** Used to determine which version of the ASM logic was used in logs while we iterate */
- static final int ASM_VERSION = 5;
+ static final int ASM_VERSION = 6;
private static final String NAMESPACE = NAMESPACE_WINDOW_MANAGER;
private static final String KEY_ASM_PREFIX = "ActivitySecurity__";
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index e99046041056..ac07248d15f2 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -1948,9 +1948,13 @@ class ActivityStarter {
boolean passesAsmChecks = true;
Task sourceTask = mSourceRecord.getTask();
- // Don't allow launches into a new task if the current task is not foreground.
+ // Allow launching into a new task (or a task matching the launched activity's
+ // affinity) only if the current task is foreground or mutating its own task.
+ // The latter can happen eg. if caller uses NEW_TASK flag and the activity being
+ // launched matches affinity of source task.
if (taskToFront) {
- passesAsmChecks = sourceTask != null && sourceTask.isVisible();
+ passesAsmChecks = sourceTask != null
+ && (sourceTask.isVisible() || sourceTask == targetTask);
}
if (passesAsmChecks) {