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

Commit 81421e05 authored by Michael Groover's avatar Michael Groover Committed by Android (Google) Code Review
Browse files

Merge "Add APIs to allow broadcaster to share identity with receivers"

parents 4f827d33 9199fb9a
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -5206,6 +5206,13 @@ package android.app {
    field @NonNull public static final android.os.Parcelable.Creator<android.app.BackgroundServiceStartNotAllowedException> CREATOR;
  }
  public class BroadcastOptions {
    method public boolean isShareIdentityEnabled();
    method @NonNull public static android.app.BroadcastOptions makeBasic();
    method @NonNull public android.app.BroadcastOptions setShareIdentityEnabled(boolean);
    method @NonNull public android.os.Bundle toBundle();
  }
  public class DatePickerDialog extends android.app.AlertDialog implements android.widget.DatePicker.OnDateChangedListener android.content.DialogInterface.OnClickListener {
    ctor public DatePickerDialog(@NonNull android.content.Context);
    ctor public DatePickerDialog(@NonNull android.content.Context, @StyleRes int);
@@ -9569,6 +9576,8 @@ package android.content {
    method public final int getResultCode();
    method public final String getResultData();
    method public final android.os.Bundle getResultExtras(boolean);
    method @Nullable public String getSentFromPackage();
    method public int getSentFromUid();
    method public final android.content.BroadcastReceiver.PendingResult goAsync();
    method public final boolean isInitialStickyBroadcast();
    method public final boolean isOrderedBroadcast();
@@ -10169,11 +10178,14 @@ package android.content {
    method public abstract void revokeUriPermission(String, android.net.Uri, int);
    method public abstract void sendBroadcast(@RequiresPermission android.content.Intent);
    method public abstract void sendBroadcast(@RequiresPermission android.content.Intent, @Nullable String);
    method public void sendBroadcast(@NonNull android.content.Intent, @Nullable String, @Nullable android.os.Bundle);
    method @RequiresPermission("android.permission.INTERACT_ACROSS_USERS") public abstract void sendBroadcastAsUser(@RequiresPermission android.content.Intent, android.os.UserHandle);
    method @RequiresPermission("android.permission.INTERACT_ACROSS_USERS") public abstract void sendBroadcastAsUser(@RequiresPermission android.content.Intent, android.os.UserHandle, @Nullable String);
    method public void sendBroadcastWithMultiplePermissions(@NonNull android.content.Intent, @NonNull String[]);
    method public abstract void sendOrderedBroadcast(@RequiresPermission android.content.Intent, @Nullable String);
    method public void sendOrderedBroadcast(@NonNull android.content.Intent, @Nullable String, @Nullable android.os.Bundle);
    method public abstract void sendOrderedBroadcast(@NonNull @RequiresPermission android.content.Intent, @Nullable String, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
    method public void sendOrderedBroadcast(@NonNull android.content.Intent, @Nullable String, @Nullable android.os.Bundle, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
    method public void sendOrderedBroadcast(@NonNull android.content.Intent, @Nullable String, @Nullable String, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
    method @RequiresPermission("android.permission.INTERACT_ACROSS_USERS") public abstract void sendOrderedBroadcastAsUser(@RequiresPermission android.content.Intent, android.os.UserHandle, @Nullable String, android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
    method @Deprecated @RequiresPermission(android.Manifest.permission.BROADCAST_STICKY) public abstract void sendStickyBroadcast(@RequiresPermission android.content.Intent);
+0 −6
Original line number Diff line number Diff line
@@ -817,7 +817,6 @@ package android.app {
    method public int getPendingIntentBackgroundActivityStartMode();
    method public boolean isDeferUntilActive();
    method @Deprecated public boolean isPendingIntentBackgroundActivityLaunchAllowed();
    method public static android.app.BroadcastOptions makeBasic();
    method @RequiresPermission(android.Manifest.permission.ACCESS_BROADCAST_RESPONSE_STATS) public void recordResponseEventWhileInBackground(@IntRange(from=0) long);
    method @RequiresPermission(android.Manifest.permission.START_ACTIVITIES_FROM_BACKGROUND) public void setBackgroundActivityStartsAllowed(boolean);
    method @NonNull public android.app.BroadcastOptions setDeferUntilActive(boolean);
@@ -832,7 +831,6 @@ package android.app {
    method public void setRequireNoneOfPermissions(@Nullable String[]);
    method @RequiresPermission(anyOf={android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST, android.Manifest.permission.START_ACTIVITIES_FROM_BACKGROUND, android.Manifest.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND}) public void setTemporaryAppAllowlist(long, int, int, @Nullable String);
    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST, android.Manifest.permission.START_ACTIVITIES_FROM_BACKGROUND, android.Manifest.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND}) public void setTemporaryAppWhitelistDuration(long);
    method public android.os.Bundle toBundle();
    field public static final int DELIVERY_GROUP_POLICY_ALL = 0; // 0x0
    field public static final int DELIVERY_GROUP_POLICY_MOST_RECENT = 1; // 0x1
  }
@@ -3232,10 +3230,8 @@ package android.content {
    method public abstract boolean isCredentialProtectedStorage();
    method @Nullable @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public android.content.Intent registerReceiverForAllUsers(@Nullable android.content.BroadcastReceiver, @NonNull android.content.IntentFilter, @Nullable String, @Nullable android.os.Handler);
    method @Nullable @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public android.content.Intent registerReceiverForAllUsers(@Nullable android.content.BroadcastReceiver, @NonNull android.content.IntentFilter, @Nullable String, @Nullable android.os.Handler, int);
    method public abstract void sendBroadcast(android.content.Intent, @Nullable String, @Nullable android.os.Bundle);
    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public abstract void sendBroadcastAsUser(@RequiresPermission android.content.Intent, android.os.UserHandle, @Nullable String, @Nullable android.os.Bundle);
    method public void sendBroadcastMultiplePermissions(@NonNull android.content.Intent, @NonNull String[], @Nullable android.app.BroadcastOptions);
    method public abstract void sendOrderedBroadcast(@NonNull android.content.Intent, @Nullable String, @Nullable android.os.Bundle, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public void startActivityAsUser(@NonNull @RequiresPermission android.content.Intent, @NonNull android.os.UserHandle);
    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public void startActivityAsUser(@NonNull @RequiresPermission android.content.Intent, @Nullable android.os.Bundle, @NonNull android.os.UserHandle);
    field public static final String AMBIENT_CONTEXT_SERVICE = "ambient_context";
@@ -3298,9 +3294,7 @@ package android.content {
    method public android.content.Context createCredentialProtectedStorageContext();
    method @Nullable public java.io.File getPreloadsFileCache();
    method public boolean isCredentialProtectedStorage();
    method public void sendBroadcast(android.content.Intent, @Nullable String, @Nullable android.os.Bundle);
    method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle, @Nullable String, @Nullable android.os.Bundle);
    method public void sendOrderedBroadcast(android.content.Intent, @Nullable String, @Nullable android.os.Bundle, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
  }
  public class Intent implements java.lang.Cloneable android.os.Parcelable {
+8 −2
Original line number Diff line number Diff line
@@ -165,7 +165,7 @@ package android.app {
    method @Nullable public String getIconResourcePackage();
  }

  public class ActivityOptions {
  public class ActivityOptions extends android.app.ComponentOptions {
    method public boolean isEligibleForLegacyPermissionPrompt();
    method @NonNull public static android.app.ActivityOptions makeCustomAnimation(@NonNull android.content.Context, int, int, int, @Nullable android.os.Handler, @Nullable android.app.ActivityOptions.OnAnimationStartedListener, @Nullable android.app.ActivityOptions.OnAnimationFinishedListener);
    method @NonNull @RequiresPermission(android.Manifest.permission.START_TASKS_FROM_RECENTS) public static android.app.ActivityOptions makeCustomTaskAnimation(@NonNull android.content.Context, int, int, @Nullable android.os.Handler, @Nullable android.app.ActivityOptions.OnAnimationStartedListener, @Nullable android.app.ActivityOptions.OnAnimationFinishedListener);
@@ -269,7 +269,7 @@ package android.app {
    method public default void onOpActiveChanged(@NonNull String, int, @NonNull String, @Nullable String, boolean, int, int);
  }

  public class BroadcastOptions {
  public class BroadcastOptions extends android.app.ComponentOptions {
    ctor public BroadcastOptions(@NonNull android.os.Bundle);
    method @Deprecated public int getMaxManifestReceiverApiLevel();
    method public long getTemporaryAppAllowlistDuration();
@@ -282,6 +282,12 @@ package android.app {
    field public static final long CHANGE_ALWAYS_ENABLED = 209888056L; // 0xc82a338L
  }

  public class ComponentOptions {
    field public static final int MODE_BACKGROUND_ACTIVITY_START_ALLOWED = 1; // 0x1
    field public static final int MODE_BACKGROUND_ACTIVITY_START_DENIED = 2; // 0x2
    field public static final int MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED = 0; // 0x0
  }

  public class DownloadManager {
    field public static final String COLUMN_MEDIASTORE_URI = "mediastore_uri";
  }
+34 −0
Original line number Diff line number Diff line
@@ -88,6 +88,16 @@ public class ActivityOptions extends ComponentOptions {
     */
    public static final String EXTRA_USAGE_TIME_REPORT_PACKAGES = "android.usage_time_packages";

    /** No explicit value chosen. The system will decide whether to grant privileges. */
    public static final int MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED =
            ComponentOptions.MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED;
    /** Allow the {@link PendingIntent} to use the background activity start privileges. */
    public static final int MODE_BACKGROUND_ACTIVITY_START_ALLOWED =
            ComponentOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED;
    /** Deny the {@link PendingIntent} to use the background activity start privileges. */
    public static final int MODE_BACKGROUND_ACTIVITY_START_DENIED =
            ComponentOptions.MODE_BACKGROUND_ACTIVITY_START_DENIED;

    /**
     * The package name that created the options.
     * @hide
@@ -2430,6 +2440,30 @@ public class ActivityOptions extends ComponentOptions {
        return super.getPendingIntentBackgroundActivityStartMode();
    }

    /**
     * Set PendingIntent activity is allowed to be started in the background if the caller
     * can start background activities.
     *
     * @deprecated use #setPendingIntentBackgroundActivityStartMode(int) to set the full range
     * of states
     */
    @Override
    @Deprecated public void setPendingIntentBackgroundActivityLaunchAllowed(boolean allowed) {
        super.setPendingIntentBackgroundActivityLaunchAllowed(allowed);
    }

    /**
     * Get PendingIntent activity is allowed to be started in the background if the caller can start
     * background activities.
     *
     * @deprecated use {@link #getPendingIntentBackgroundActivityStartMode()} since for apps
     * targeting {@link android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE} or higher this value might
     * not match the actual behavior if the value was not explicitly set.
     */
    @Deprecated public boolean isPendingIntentBackgroundActivityLaunchAllowed() {
        return super.isPendingIntentBackgroundActivityLaunchAllowed();
    }

    /** @hide */
    @Override
    public String toString() {
+23 −9
Original line number Diff line number Diff line
@@ -785,9 +785,10 @@ public final class ActivityThread extends ClientTransactionHandler
    static final class ReceiverData extends BroadcastReceiver.PendingResult {
        public ReceiverData(Intent intent, int resultCode, String resultData, Bundle resultExtras,
                boolean ordered, boolean sticky, boolean assumeDelivered, IBinder token,
                int sendingUser) {
                int sendingUser, int sentFromUid, String sentFromPackage) {
            super(resultCode, resultData, resultExtras, TYPE_COMPONENT, ordered, sticky,
                    assumeDelivered, token, sendingUser, intent.getFlags());
                    assumeDelivered, token, sendingUser, intent.getFlags(), sentFromUid,
                    sentFromPackage);
            this.intent = intent;
        }

@@ -801,7 +802,8 @@ public final class ActivityThread extends ClientTransactionHandler
            return "ReceiverData{intent=" + intent + " packageName=" +
                    info.packageName + " resultCode=" + getResultCode()
                    + " resultData=" + getResultData() + " resultExtras="
                    + getResultExtras(false) + "}";
                    + getResultExtras(false) + " sentFromUid="
                    + getSentFromUid() + " sentFromPackage=" + getSentFromPackage() + "}";
        }
    }

@@ -1041,10 +1043,12 @@ public final class ActivityThread extends ClientTransactionHandler

        public final void scheduleReceiver(Intent intent, ActivityInfo info,
                CompatibilityInfo compatInfo, int resultCode, String data, Bundle extras,
                boolean ordered, boolean assumeDelivered, int sendingUser, int processState) {
                boolean ordered, boolean assumeDelivered, int sendingUser, int processState,
                int sentFromUid, String sentFromPackage) {
            updateProcessState(processState, false);
            ReceiverData r = new ReceiverData(intent, resultCode, data, extras,
                    ordered, false, assumeDelivered, mAppThread.asBinder(), sendingUser);
                    ordered, false, assumeDelivered, mAppThread.asBinder(), sendingUser,
                    sentFromUid, sentFromPackage);
            r.info = info;
            sendMessage(H.RECEIVER, r);
        }
@@ -1055,11 +1059,13 @@ public final class ActivityThread extends ClientTransactionHandler
                if (r.registered) {
                    scheduleRegisteredReceiver(r.receiver, r.intent,
                            r.resultCode, r.data, r.extras, r.ordered, r.sticky,
                            r.assumeDelivered, r.sendingUser, r.processState);
                            r.assumeDelivered, r.sendingUser, r.processState,
                            r.sentFromUid, r.sentFromPackage);
                } else {
                    scheduleReceiver(r.intent, r.activityInfo, r.compatInfo,
                            r.resultCode, r.data, r.extras, r.sync,
                            r.assumeDelivered, r.sendingUser, r.processState);
                            r.assumeDelivered, r.sendingUser, r.processState,
                            r.sentFromUid, r.sentFromPackage);
                }
            }
        }
@@ -1289,7 +1295,8 @@ public final class ActivityThread extends ClientTransactionHandler
        // applies transaction ordering per object for such calls.
        public void scheduleRegisteredReceiver(IIntentReceiver receiver, Intent intent,
                int resultCode, String dataStr, Bundle extras, boolean ordered,
                boolean sticky, boolean assumeDelivered, int sendingUser, int processState)
                boolean sticky, boolean assumeDelivered, int sendingUser, int processState,
                int sentFromUid, String sentFromPackage)
                throws RemoteException {
            updateProcessState(processState, false);

@@ -1299,12 +1306,19 @@ public final class ActivityThread extends ClientTransactionHandler
            // report an expected delivery event
            if (receiver instanceof LoadedApk.ReceiverDispatcher.InnerReceiver) {
                ((LoadedApk.ReceiverDispatcher.InnerReceiver) receiver).performReceive(intent,
                        resultCode, dataStr, extras, ordered, sticky, assumeDelivered, sendingUser);
                        resultCode, dataStr, extras, ordered, sticky, assumeDelivered, sendingUser,
                        sentFromUid, sentFromPackage);
            } else {
                if (!assumeDelivered) {
                    Log.wtf(TAG, "scheduleRegisteredReceiver() called for " + receiver
                            + " and " + intent + " without mechanism to finish delivery");
                }
                if (sentFromUid != Process.INVALID_UID || sentFromPackage != null) {
                    Log.wtf(TAG,
                            "scheduleRegisteredReceiver() called for " + receiver + " and " + intent
                                    + " from " + sentFromPackage + " (UID: " + sentFromUid
                                    + ") without mechanism to propagate the sender's identity");
                }
                receiver.performReceive(intent, resultCode, dataStr, extras, ordered, sticky,
                        sendingUser);
            }
Loading