From c85fa8964acc208b03a8b955b6ee58dd2be5e6e1 Mon Sep 17 00:00:00 2001 From: Hani Kazmi Date: Fri, 30 Jun 2023 16:48:04 +0000 Subject: [PATCH] Allow ASM launch if callingUid on top Fix for CtsAppTestCases:android.app.cts.AppTaskTests#testStartActivityInTask_NoNewTask. We would previosuly not allow launches by the top uid for in task starts if ActivityStarter did not have a source record present as well. Bug: 288759911 Test: atest AppTaskTest BackgroundActivityLaunchTest ActivitySecuityModelTest Change-Id: I0fa72c8b2445d98f909eeeac247f3da9b064df71 --- .../android/server/wm/ActivityStarter.java | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index d2715b6e498ae..7e9750b58253e 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -1993,11 +1993,7 @@ class ActivityStarter { } } - boolean shouldBlockActivityStart = true; - // Used for logging/toasts. Would we block the start if target sdk was U and feature was - // enabled? - boolean wouldBlockActivityStartIgnoringFlags = true; - + Pair pair = null; if (mSourceRecord != null) { boolean passesAsmChecks = true; Task sourceTask = mSourceRecord.getTask(); @@ -2013,14 +2009,25 @@ class ActivityStarter { if (passesAsmChecks) { Task taskToCheck = taskToFront ? sourceTask : targetTask; - // first == false means Should Block - // second == false means Would Block disregarding flags - Pair pair = ActivityTaskSupervisor + pair = ActivityTaskSupervisor .doesTopActivityMatchingUidExistForAsm(taskToCheck, mSourceRecord.getUid(), mSourceRecord); - shouldBlockActivityStart = !pair.first; - wouldBlockActivityStartIgnoringFlags = !pair.second; } + } else if (!taskToFront) { + // We don't have a sourceRecord, and we're launching into an existing task. + // Allow if callingUid is top of stack. + pair = ActivityTaskSupervisor + .doesTopActivityMatchingUidExistForAsm(targetTask, mCallingUid, + /*sourceRecord*/null); + } + + boolean shouldBlockActivityStart = true; + if (pair != null) { + // We block if feature flag is enabled + shouldBlockActivityStart = !pair.first; + // Used for logging/toasts. Would we block if target sdk was U and feature was + // enabled? If so, we can't return here but we also might not block at the end + boolean wouldBlockActivityStartIgnoringFlags = !pair.second; if (!wouldBlockActivityStartIgnoringFlags) { return true;