diff options
| author | 2023-11-06 10:31:48 +0000 | |
|---|---|---|
| committer | 2023-11-06 10:31:48 +0000 | |
| commit | 72f2a2b95e338afa6080e7dca48ac235fe115718 (patch) | |
| tree | 8e29f637f9dfbb3dbf35cb8b19cccd13283b65a0 | |
| parent | f55c09d24deca4d209efb951e3bd75ad3e24dd39 (diff) | |
| parent | eb0a09cb2fb3b4a38019613342867a067abe89a8 (diff) | |
Merge "Add SdkSandboxActivityAuthority" into main
4 files changed, 27 insertions, 10 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 3b6ea14ab0b6..dfb416abd495 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -56,7 +56,7 @@ import android.app.backup.BackupAnnotations.BackupDestination; import android.app.backup.BackupAnnotations.OperationType; import android.app.compat.CompatChanges; import android.app.sdksandbox.sandboxactivity.ActivityContextInfo; -import android.app.sdksandbox.sandboxactivity.ActivityContextInfoProvider; +import android.app.sdksandbox.sandboxactivity.SdkSandboxActivityAuthority; import android.app.servertransaction.ActivityLifecycleItem; import android.app.servertransaction.ActivityLifecycleItem.LifecycleState; import android.app.servertransaction.ActivityRelaunchItem; @@ -2272,7 +2272,8 @@ public final class ActivityThread extends ClientTransactionHandler case DUMP_HEAP: return "DUMP_HEAP"; case DUMP_ACTIVITY: return "DUMP_ACTIVITY"; case SET_CORE_SETTINGS: return "SET_CORE_SETTINGS"; - case UPDATE_PACKAGE_COMPATIBILITY_INFO: return "UPDATE_PACKAGE_COMPATIBILITY_INFO"; + case UPDATE_PACKAGE_COMPATIBILITY_INFO: + return "UPDATE_PACKAGE_COMPATIBILITY_INFO"; case DUMP_PROVIDER: return "DUMP_PROVIDER"; case UNSTABLE_PROVIDER_DIED: return "UNSTABLE_PROVIDER_DIED"; case REQUEST_ASSIST_CONTEXT_EXTRAS: return "REQUEST_ASSIST_CONTEXT_EXTRAS"; @@ -3776,8 +3777,10 @@ public final class ActivityThread extends ClientTransactionHandler r.activityInfo.targetActivity); } - boolean isSandboxActivityContext = sandboxActivitySdkBasedContext() - && r.intent.isSandboxActivity(mSystemContext); + boolean isSandboxActivityContext = + sandboxActivitySdkBasedContext() + && SdkSandboxActivityAuthority.isSdkSandboxActivity( + mSystemContext, r.intent); boolean isSandboxedSdkContextUsed = false; ContextImpl activityBaseContext; if (isSandboxActivityContext) { @@ -4022,11 +4025,12 @@ public final class ActivityThread extends ClientTransactionHandler */ @Nullable private ContextImpl createBaseContextForSandboxActivity(@NonNull ActivityClientRecord r) { - ActivityContextInfoProvider contextInfoProvider = ActivityContextInfoProvider.getInstance(); + SdkSandboxActivityAuthority sdkSandboxActivityAuthority = + SdkSandboxActivityAuthority.getInstance(); ActivityContextInfo contextInfo; try { - contextInfo = contextInfoProvider.getActivityContextInfo(r.intent); + contextInfo = sdkSandboxActivityAuthority.getActivityContextInfo(r.intent); } catch (IllegalArgumentException e) { Log.e(TAG, "Passed intent does not match an expected sandbox activity", e); return null; diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index ea54c912d4b9..02e0cf6c5203 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -12587,8 +12587,12 @@ public class Intent implements Parcelable, Cloneable { return (mFlags & FLAG_ACTIVITY_NEW_DOCUMENT) == FLAG_ACTIVITY_NEW_DOCUMENT; } - // TODO(b/299109198): Refactor into the {@link SdkSandboxManagerLocal} - /** @hide */ + /** + * @deprecated Use {@link SdkSandboxActivityAuthority#isSdkSandboxActivity} instead. + * Once the other API is finalized this method will be removed. + * @hide + */ + @Deprecated public boolean isSandboxActivity(@NonNull Context context) { if (mAction != null && mAction.equals(ACTION_START_SANDBOXED_ACTIVITY)) { return true; diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index f462efc00ce6..f0698be4d834 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -125,6 +125,7 @@ import static com.android.server.wm.RootWindowContainer.MATCH_ATTACHED_TASK_OR_R import static com.android.server.wm.Task.REPARENT_KEEP_ROOT_TASK_AT_FRONT; import static com.android.server.wm.WindowManagerService.MY_PID; import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_NORMAL; +import static com.android.sdksandbox.flags.Flags.sandboxActivitySdkBasedContext; import android.Manifest; import android.annotation.IntDef; @@ -165,6 +166,7 @@ import android.app.assist.ActivityId; import android.app.assist.AssistContent; import android.app.assist.AssistStructure; import android.app.compat.CompatChanges; +import android.app.sdksandbox.sandboxactivity.SdkSandboxActivityAuthority; import android.app.usage.UsageStatsManagerInternal; import android.content.ActivityNotFoundException; import android.content.ComponentName; @@ -1258,6 +1260,13 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { true /*validateIncomingUser*/); } + static boolean isSdkSandboxActivity(Context context, Intent intent) { + return intent != null + && (sandboxActivitySdkBasedContext() + ? SdkSandboxActivityAuthority.isSdkSandboxActivity(context, intent) + : intent.isSandboxActivity(context)); + } + private int startActivityAsUser(IApplicationThread caller, String callingPackage, @Nullable String callingFeatureId, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int startFlags, @@ -1268,7 +1277,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { assertPackageMatchesCallingUid(callingPackage); enforceNotIsolatedCaller("startActivityAsUser"); - if (intent != null && intent.isSandboxActivity(mContext)) { + if (isSdkSandboxActivity(mContext, intent)) { SdkSandboxManagerLocal sdkSandboxManagerLocal = LocalManagerRegistry.getManager( SdkSandboxManagerLocal.class); sdkSandboxManagerLocal.enforceAllowedToHostSandboxedActivity( diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java index 777b5cd4337b..e5eb3033f86a 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java @@ -1089,7 +1089,7 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { // Remove the process record so it won't be considered as alive. mService.mProcessNames.remove(wpc.mName, wpc.mUid); mService.mProcessMap.remove(wpc.getPid()); - } else if (r.intent.isSandboxActivity(mService.mContext)) { + } else if (ActivityTaskManagerService.isSdkSandboxActivity(mService.mContext, r.intent)) { Slog.e(TAG, "Abort sandbox activity launching as no sandbox process to host it."); r.finishIfPossible("No sandbox process for the activity", false /* oomAdj */); r.launchFailed = true; |