Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 72f2a2b9 authored by Sandro Montanari's avatar Sandro Montanari Committed by Android (Google) Code Review
Browse files

Merge "Add SdkSandboxActivityAuthority" into main

parents f55c09d2 eb0a09cb
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -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;
+6 −2
Original line number Diff line number Diff line
@@ -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;
+10 −1
Original line number Diff line number Diff line
@@ -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(
+1 −1
Original line number Diff line number Diff line
@@ -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;