diff options
author | Christophe Pinelli <cpinelli@google.com> | 2023-10-19 14:48:57 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-13 18:03:03 +0000 |
commit | dc835d9f6e52238a3190de009ca64502cf7edb55 (patch) | |
tree | aefc6964682891f22a301e36fa584c8c66b47138 | |
parent | 5aa036982265c6e88541163358ca5175ce42b8e1 (diff) | |
download | base-dc835d9f6e52238a3190de009ca64502cf7edb55.tar.gz |
Restrict activity launch when caller is running in the background
Test: atest BackgroundActivityLaunchTest#testBackgroundActivityBlockedInStartNextMatchingActivity
Bug: 230492947
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:e1edaa27ea2f6911977556c5bba876a2319d5e2d)
Merged-In: Ic88dd1e79b867b44cdcd6fc86650f5de6ebcc23d
Change-Id: Ic88dd1e79b867b44cdcd6fc86650f5de6ebcc23d
-rw-r--r-- | services/core/java/com/android/server/wm/ActivityTaskManagerService.java | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 6b65922c198e..dd3a3c5e6bbf 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -1412,7 +1412,12 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { final long origId = Binder.clearCallingIdentity(); // TODO(b/64750076): Check if calling pid should really be -1. - final int res = getActivityStartController() + try { + if (options == null) { + options = new SafeActivityOptions(ActivityOptions.makeBasic()); + } + options.getOptions(r).setAvoidMoveToFront(); + final int res = getActivityStartController() .obtainStarter(intent, "startNextMatchingActivity") .setCaller(r.app.getThread()) .setResolvedType(r.resolvedType) @@ -1428,13 +1433,11 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { .setRealCallingUid(r.launchedFromUid) .setActivityOptions(options) .execute(); - Binder.restoreCallingIdentity(origId); - - r.finishing = wasFinishing; - if (res != ActivityManager.START_SUCCESS) { - return false; + r.finishing = wasFinishing; + return res == ActivityManager.START_SUCCESS; + } finally { + Binder.restoreCallingIdentity(origId); } - return true; } } |