diff options
| author | 2024-07-25 07:00:44 +0000 | |
|---|---|---|
| committer | 2024-07-25 07:00:44 +0000 | |
| commit | b4eca62f4fdb10bb8fe342bc8f8fc54f20b2bc90 (patch) | |
| tree | 9b6c037279681f547d27b99aeb44b3513ddcbff3 | |
| parent | eb4760c4aa28721b1842357104126f5fc94bbdc2 (diff) | |
| parent | fc5c53f40f4d1558c88556fd41dc4f1fda24a9d9 (diff) | |
Merge "Update latest ActivityRecord#mLaunchSourceType if possible." into main
3 files changed, 15 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index d039b048a3e4..2dbf5bbf2326 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -495,7 +495,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A final String launchedFromPackage; // always the package who started the activity. @Nullable final String launchedFromFeatureId; // always the feature in launchedFromPackage - private final int mLaunchSourceType; // original launch source type + int mLaunchSourceType; // latest launch source type final Intent intent; // the original intent that generated us final String shortComponentName; // the short component name of the intent final String resolvedType; // as per original caller; @@ -2451,6 +2451,10 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A return mLaunchSourceType == type; } + void updateLaunchSourceType(int launchFromUid, WindowProcessController caller) { + mLaunchSourceType = determineLaunchSourceType(launchFromUid, caller); + } + private int determineLaunchSourceType(int launchFromUid, WindowProcessController caller) { if (launchFromUid == Process.SYSTEM_UID || launchFromUid == Process.ROOT_UID) { return LAUNCH_SOURCE_TYPE_SYSTEM; diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index 5bfe9d744975..c89f3a3a215e 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -1793,6 +1793,9 @@ class ActivityStarter { activity.destroyIfPossible("Removes redundant singleInstance"); } } + if (mLastStartActivityRecord != null) { + targetTaskTop.mLaunchSourceType = mLastStartActivityRecord.mLaunchSourceType; + } targetTaskTop.mTransitionController.collect(targetTaskTop); recordTransientLaunchIfNeeded(targetTaskTop); // Recycle the target task for this launch. diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java index b0d8925efcfe..afdbc0a6b43f 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java @@ -2801,6 +2801,13 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { targetActivity, activityOptions); } + if (callingPid > 0) { + final WindowProcessController wpc = mService.mProcessMap + .getProcess(callingPid); + if (wpc != null) { + targetActivity.updateLaunchSourceType(callingUid, wpc); + } + } mService.getActivityStartController().postStartActivityProcessingForLastStarter( task.getTopNonFinishingActivity(), ActivityManager.START_TASK_TO_FRONT, task.getRootTask()); |