summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Pinelli <cpinelli@google.com>2023-10-19 14:48:57 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-12-13 18:03:03 +0000
commitdc835d9f6e52238a3190de009ca64502cf7edb55 (patch)
treeaefc6964682891f22a301e36fa584c8c66b47138
parent5aa036982265c6e88541163358ca5175ce42b8e1 (diff)
downloadbase-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.java17
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;
}
}