diff --git a/api/current.txt b/api/current.txt index 5dfde3b41597e..30db015d863b2 100644 --- a/api/current.txt +++ b/api/current.txt @@ -8876,9 +8876,9 @@ package android.content { method public abstract deprecated android.graphics.drawable.Drawable peekWallpaper(); method public void registerComponentCallbacks(android.content.ComponentCallbacks); method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter); - method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, boolean); + method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, int); method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler); - method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler, boolean); + method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler, int); method public abstract deprecated void removeStickyBroadcast(android.content.Intent); method public abstract deprecated void removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); method public abstract void revokeUriPermission(android.net.Uri, int); @@ -8969,6 +8969,7 @@ package android.content { field public static final java.lang.String NSD_SERVICE = "servicediscovery"; field public static final java.lang.String POWER_SERVICE = "power"; field public static final java.lang.String PRINT_SERVICE = "print"; + field public static final int RECEIVER_VISIBLE_TO_INSTANT_APPS = 1; // 0x1 field public static final java.lang.String RESTRICTIONS_SERVICE = "restrictions"; field public static final java.lang.String SEARCH_SERVICE = "search"; field public static final java.lang.String SENSOR_SERVICE = "sensor"; @@ -9068,9 +9069,9 @@ package android.content { method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory, android.database.DatabaseErrorHandler); method public deprecated android.graphics.drawable.Drawable peekWallpaper(); method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter); - method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, boolean); + method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, int); method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler); - method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler, boolean); + method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler, int); method public deprecated void removeStickyBroadcast(android.content.Intent); method public deprecated void removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); method public void revokeUriPermission(android.net.Uri, int); @@ -40881,9 +40882,9 @@ package android.test.mock { method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory, android.database.DatabaseErrorHandler); method public android.graphics.drawable.Drawable peekWallpaper(); method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter); - method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, boolean); + method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, int); method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler); - method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler, boolean); + method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler, int); method public void removeStickyBroadcast(android.content.Intent); method public void removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); method public void revokeUriPermission(android.net.Uri, int); diff --git a/api/system-current.txt b/api/system-current.txt index ce62bc92f6ab3..3408b5a07acaf 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -9376,9 +9376,9 @@ package android.content { method public abstract deprecated android.graphics.drawable.Drawable peekWallpaper(); method public void registerComponentCallbacks(android.content.ComponentCallbacks); method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter); - method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, boolean); + method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, int); method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler); - method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler, boolean); + method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler, int); method public abstract deprecated void removeStickyBroadcast(android.content.Intent); method public abstract deprecated void removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); method public abstract void revokeUriPermission(android.net.Uri, int); @@ -9478,6 +9478,7 @@ package android.content { field public static final java.lang.String PERSISTENT_DATA_BLOCK_SERVICE = "persistent_data_block"; field public static final java.lang.String POWER_SERVICE = "power"; field public static final java.lang.String PRINT_SERVICE = "print"; + field public static final int RECEIVER_VISIBLE_TO_INSTANT_APPS = 1; // 0x1 field public static final java.lang.String RESTRICTIONS_SERVICE = "restrictions"; field public static final java.lang.String SEARCH_SERVICE = "search"; field public static final java.lang.String SENSOR_SERVICE = "sensor"; @@ -9583,9 +9584,9 @@ package android.content { method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory, android.database.DatabaseErrorHandler); method public deprecated android.graphics.drawable.Drawable peekWallpaper(); method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter); - method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, boolean); + method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, int); method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler); - method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler, boolean); + method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler, int); method public deprecated void removeStickyBroadcast(android.content.Intent); method public deprecated void removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); method public void revokeUriPermission(android.net.Uri, int); @@ -44437,9 +44438,9 @@ package android.test.mock { method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory, android.database.DatabaseErrorHandler); method public android.graphics.drawable.Drawable peekWallpaper(); method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter); - method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, boolean); + method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, int); method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler); - method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler, boolean); + method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler, int); method public void removeStickyBroadcast(android.content.Intent); method public void removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); method public void revokeUriPermission(android.net.Uri, int); diff --git a/api/test-current.txt b/api/test-current.txt index 8e3de84a73e77..3957532d9f717 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -8909,9 +8909,9 @@ package android.content { method public abstract deprecated android.graphics.drawable.Drawable peekWallpaper(); method public void registerComponentCallbacks(android.content.ComponentCallbacks); method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter); - method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, boolean); + method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, int); method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler); - method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler, boolean); + method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler, int); method public abstract deprecated void removeStickyBroadcast(android.content.Intent); method public abstract deprecated void removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); method public abstract void revokeUriPermission(android.net.Uri, int); @@ -9002,6 +9002,7 @@ package android.content { field public static final java.lang.String NSD_SERVICE = "servicediscovery"; field public static final java.lang.String POWER_SERVICE = "power"; field public static final java.lang.String PRINT_SERVICE = "print"; + field public static final int RECEIVER_VISIBLE_TO_INSTANT_APPS = 1; // 0x1 field public static final java.lang.String RESTRICTIONS_SERVICE = "restrictions"; field public static final java.lang.String SEARCH_SERVICE = "search"; field public static final java.lang.String SENSOR_SERVICE = "sensor"; @@ -9102,9 +9103,9 @@ package android.content { method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory, android.database.DatabaseErrorHandler); method public deprecated android.graphics.drawable.Drawable peekWallpaper(); method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter); - method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, boolean); + method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, int); method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler); - method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler, boolean); + method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler, int); method public deprecated void removeStickyBroadcast(android.content.Intent); method public deprecated void removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); method public void revokeUriPermission(android.net.Uri, int); @@ -41076,9 +41077,9 @@ package android.test.mock { method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory, android.database.DatabaseErrorHandler); method public android.graphics.drawable.Drawable peekWallpaper(); method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter); - method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, boolean); + method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, int); method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler); - method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler, boolean); + method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler, int); method public void removeStickyBroadcast(android.content.Intent); method public void removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle); method public void revokeUriPermission(android.net.Uri, int); diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index 80de64b94519f..424e783603aee 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -1357,34 +1357,34 @@ class ContextImpl extends Context { @Override public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, - boolean visibleToInstantApps) { - return registerReceiver(receiver, filter, null, null, visibleToInstantApps); + int flags) { + return registerReceiver(receiver, filter, null, null, flags); } @Override public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler) { return registerReceiverInternal(receiver, getUserId(), - filter, broadcastPermission, scheduler, getOuterContext(), false); + filter, broadcastPermission, scheduler, getOuterContext(), 0); } @Override public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, - String broadcastPermission, Handler scheduler, boolean visibleToInstantApps) { + String broadcastPermission, Handler scheduler, int flags) { return registerReceiverInternal(receiver, getUserId(), - filter, broadcastPermission, scheduler, getOuterContext(), visibleToInstantApps); + filter, broadcastPermission, scheduler, getOuterContext(), flags); } @Override public Intent registerReceiverAsUser(BroadcastReceiver receiver, UserHandle user, IntentFilter filter, String broadcastPermission, Handler scheduler) { return registerReceiverInternal(receiver, user.getIdentifier(), - filter, broadcastPermission, scheduler, getOuterContext(), false); + filter, broadcastPermission, scheduler, getOuterContext(), 0); } private Intent registerReceiverInternal(BroadcastReceiver receiver, int userId, IntentFilter filter, String broadcastPermission, - Handler scheduler, Context context, boolean visibleToInstantApps) { + Handler scheduler, Context context, int flags) { IIntentReceiver rd = null; if (receiver != null) { if (mPackageInfo != null && context != null) { @@ -1405,7 +1405,7 @@ class ContextImpl extends Context { try { final Intent intent = ActivityManager.getService().registerReceiver( mMainThread.getApplicationThread(), mBasePackageName, rd, filter, - broadcastPermission, userId, visibleToInstantApps); + broadcastPermission, userId, flags); if (intent != null) { intent.setExtrasClassLoader(getClassLoader()); intent.prepareToEnterProcess(); diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl index ce4494b29fa69..d1eea3bdfb694 100644 --- a/core/java/android/app/IActivityManager.aidl +++ b/core/java/android/app/IActivityManager.aidl @@ -100,7 +100,7 @@ interface IActivityManager { boolean finishActivity(in IBinder token, int code, in Intent data, int finishTask); Intent registerReceiver(in IApplicationThread caller, in String callerPackage, in IIntentReceiver receiver, in IntentFilter filter, - in String requiredPermission, int userId, boolean visibleToInstantApps); + in String requiredPermission, int userId, int flags); void unregisterReceiver(in IIntentReceiver receiver); int broadcastIntent(in IApplicationThread caller, in Intent intent, in String resolvedType, in IIntentReceiver resultTo, int resultCode, diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index 46a704258c1a9..8af791aeb31f7 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -366,6 +366,19 @@ public abstract class Context { */ public static final int BIND_EXTERNAL_SERVICE = 0x80000000; + /** @hide */ + @IntDef(flag = true, + value = { + RECEIVER_VISIBLE_TO_INSTANT_APPS + }) + @Retention(RetentionPolicy.SOURCE) + public @interface RegisterReceiverFlags {} + + /** + * Flag for {@link #registerReceiver}: The receiver can receive broadcasts from Instant Apps. + */ + public static final int RECEIVER_VISIBLE_TO_INSTANT_APPS = 0x1; + /** * Returns an AssetManager instance for the application's package. *

@@ -2437,7 +2450,8 @@ public abstract class Context { * * @param receiver The BroadcastReceiver to handle the broadcast. * @param filter Selects the Intent broadcasts to be received. - * @param visibleToInstantApps If the receiver accepts broadcasts from Instant Apps. + * @param flags Additional options for the receiver. May be 0 or + * {@link #RECEIVER_VISIBLE_TO_INSTANT_APPS}. * * @return The first sticky intent found that matches filter, * or null if there are none. @@ -2449,7 +2463,7 @@ public abstract class Context { @Nullable public abstract Intent registerReceiver(@Nullable BroadcastReceiver receiver, IntentFilter filter, - boolean visibleToInstantApps); + @RegisterReceiverFlags int flags); /** * Register to receive intent broadcasts, to run in the context of @@ -2488,9 +2502,9 @@ public abstract class Context { @Nullable Handler scheduler); /** - * Register to receive intent broadcasts, with the receiver optionally being - * exposed to Instant Apps. See - * {@link #registerReceiver(BroadcastReceiver, IntentFilter, boolean)} and + * Register to receive intent broadcasts, to run in the context of + * scheduler. See + * {@link #registerReceiver(BroadcastReceiver, IntentFilter, int)} and * {@link #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)} * for more information. * @@ -2509,12 +2523,13 @@ public abstract class Context { * no permission is required. * @param scheduler Handler identifying the thread that will receive * the Intent. If null, the main thread of the process will be used. - * @param visibleToInstantApps If the receiver accepts broadcasts from Instant Apps. + * @param flags Additional options for the receiver. May be 0 or + * {@link #RECEIVER_VISIBLE_TO_INSTANT_APPS}. * * @return The first sticky intent found that matches filter, * or null if there are none. * - * @see #registerReceiver(BroadcastReceiver, IntentFilter, boolean) + * @see #registerReceiver(BroadcastReceiver, IntentFilter, int) * @see #registerReceiver(BroadcastReceiver, IntentFilter, String, Handler) * @see #sendBroadcast * @see #unregisterReceiver @@ -2522,7 +2537,7 @@ public abstract class Context { @Nullable public abstract Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, @Nullable String broadcastPermission, - @Nullable Handler scheduler, boolean visibleToInstantApps); + @Nullable Handler scheduler, @RegisterReceiverFlags int flags); /** * @hide diff --git a/core/java/android/content/ContextWrapper.java b/core/java/android/content/ContextWrapper.java index b59fc3ddbb84d..5264cd7c8cfc8 100644 --- a/core/java/android/content/ContextWrapper.java +++ b/core/java/android/content/ContextWrapper.java @@ -605,8 +605,8 @@ public class ContextWrapper extends Context { @Override public Intent registerReceiver( - BroadcastReceiver receiver, IntentFilter filter, boolean visibleToInstantApps) { - return mBase.registerReceiver(receiver, filter, visibleToInstantApps); + BroadcastReceiver receiver, IntentFilter filter, int flags) { + return mBase.registerReceiver(receiver, filter, flags); } @Override @@ -620,9 +620,9 @@ public class ContextWrapper extends Context { @Override public Intent registerReceiver( BroadcastReceiver receiver, IntentFilter filter, - String broadcastPermission, Handler scheduler, boolean visibleToInstantApps) { + String broadcastPermission, Handler scheduler, int flags) { return mBase.registerReceiver(receiver, filter, broadcastPermission, - scheduler, visibleToInstantApps); + scheduler, flags); } /** @hide */ diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index f431f21485d12..6e9e8a46122ef 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -18376,10 +18376,12 @@ public class ActivityManagerService extends IActivityManager.Stub public Intent registerReceiver(IApplicationThread caller, String callerPackage, IIntentReceiver receiver, IntentFilter filter, String permission, int userId, - boolean visibleToInstantApps) { + int flags) { enforceNotIsolatedCaller("registerReceiver"); ArrayList stickyIntents = null; ProcessRecord callerApp = null; + final boolean visibleToInstantApps + = (flags & Context.RECEIVER_VISIBLE_TO_INSTANT_APPS) != 0; int callingUid; int callingPid; boolean instantApp; diff --git a/test-runner/src/android/test/mock/MockContext.java b/test-runner/src/android/test/mock/MockContext.java index b4e3a476425ad..bfc2d728ad5c4 100644 --- a/test-runner/src/android/test/mock/MockContext.java +++ b/test-runner/src/android/test/mock/MockContext.java @@ -492,7 +492,7 @@ public class MockContext extends Context { @Override public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, - boolean visibleToInstantApps) { + int flags) { throw new UnsupportedOperationException(); } @@ -504,7 +504,7 @@ public class MockContext extends Context { @Override public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, - String broadcastPermission, Handler scheduler, boolean visibleToInstantApps) { + String broadcastPermission, Handler scheduler, int flags) { throw new UnsupportedOperationException(); } diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java index 1e77ac1700285..8bd924ea9cfb0 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java @@ -1614,7 +1614,7 @@ public class BridgeContext extends Context { } @Override - public Intent registerReceiver(BroadcastReceiver arg0, IntentFilter arg1, boolean arg2) { + public Intent registerReceiver(BroadcastReceiver arg0, IntentFilter arg1, int arg2) { // pass return null; } @@ -1628,7 +1628,7 @@ public class BridgeContext extends Context { @Override public Intent registerReceiver(BroadcastReceiver arg0, IntentFilter arg1, - String arg2, Handler arg3, boolean arg4) { + String arg2, Handler arg3, int arg4) { // pass return null; }