diff options
| author | 2023-11-20 23:50:01 +0000 | |
|---|---|---|
| committer | 2023-11-20 23:50:01 +0000 | |
| commit | 5f74ebdf6218e81f3205675f3285ef5f169a90af (patch) | |
| tree | 96ba459fbb45d73d3613f5de4827ee4ab396155d | |
| parent | fc496ffbe42934192b276af6a43542bd6086ff30 (diff) | |
| parent | 3e9da3ec4705b072dbe8a10e8ffc841f4928381c (diff) | |
Merge "Restrict activity launch when caller is running in the background" into tm-dev
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityTaskManagerService.java | 53 | 
1 files changed, 31 insertions, 22 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 71ca8523ce71..375be381ad5a 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -1364,29 +1364,38 @@ 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() -                    .obtainStarter(intent, "startNextMatchingActivity") -                    .setCaller(r.app.getThread()) -                    .setResolvedType(r.resolvedType) -                    .setActivityInfo(aInfo) -                    .setResultTo(resultTo != null ? resultTo.token : null) -                    .setResultWho(resultWho) -                    .setRequestCode(requestCode) -                    .setCallingPid(-1) -                    .setCallingUid(r.launchedFromUid) -                    .setCallingPackage(r.launchedFromPackage) -                    .setCallingFeatureId(r.launchedFromFeatureId) -                    .setRealCallingPid(-1) -                    .setRealCallingUid(r.launchedFromUid) -                    .setActivityOptions(options) -                    .execute(); -            Binder.restoreCallingIdentity(origId); - -            r.finishing = wasFinishing; -            if (res != ActivityManager.START_SUCCESS) { -                return false; +            try { +                if (options == null) { +                    options = new SafeActivityOptions(ActivityOptions.makeBasic()); +                } +                // Fixes b/230492947 +                // Prevents background activity launch through #startNextMatchingActivity +                // An activity going into the background could still go back to the foreground +                // if the intent used matches both: +                // - the activity in the background +                // - a second activity. +                options.getOptions(r).setAvoidMoveToFront(); +                final int res = getActivityStartController() +                        .obtainStarter(intent, "startNextMatchingActivity") +                        .setCaller(r.app.getThread()) +                        .setResolvedType(r.resolvedType) +                        .setActivityInfo(aInfo) +                        .setResultTo(resultTo != null ? resultTo.token : null) +                        .setResultWho(resultWho) +                        .setRequestCode(requestCode) +                        .setCallingPid(-1) +                        .setCallingUid(r.launchedFromUid) +                        .setCallingPackage(r.launchedFromPackage) +                        .setCallingFeatureId(r.launchedFromFeatureId) +                        .setRealCallingPid(-1) +                        .setRealCallingUid(r.launchedFromUid) +                        .setActivityOptions(options) +                        .execute(); +                r.finishing = wasFinishing; +                return res == ActivityManager.START_SUCCESS; +            } finally { +                Binder.restoreCallingIdentity(origId);              } -            return true;          }      }  |