Merge "Set correct attribution==featureId and message for broadcasts"
This commit is contained in:
committed by
Android (Google) Code Review
commit
ea6cc6bb7e
@@ -2657,8 +2657,10 @@ public class AppOpsManager {
|
||||
* @hide
|
||||
*/
|
||||
// TODO: this should probably be @SystemApi as well
|
||||
public static @NonNull String toReceiverId(@NonNull Object obj) {
|
||||
if (obj instanceof PendingIntent) {
|
||||
public static @NonNull String toReceiverId(@Nullable Object obj) {
|
||||
if (obj == null) {
|
||||
return "null";
|
||||
} else if (obj instanceof PendingIntent) {
|
||||
return toReceiverId((PendingIntent) obj);
|
||||
} else {
|
||||
return obj.getClass().getName() + "@" + System.identityHashCode(obj);
|
||||
|
||||
@@ -1624,8 +1624,9 @@ class ContextImpl extends Context {
|
||||
}
|
||||
try {
|
||||
final Intent intent = ActivityManager.getService().registerReceiverWithFeature(
|
||||
mMainThread.getApplicationThread(), mBasePackageName, getAttributionTag(), rd,
|
||||
filter, broadcastPermission, userId, flags);
|
||||
mMainThread.getApplicationThread(), mBasePackageName, getAttributionTag(),
|
||||
AppOpsManager.toReceiverId(receiver), rd, filter, broadcastPermission, userId,
|
||||
flags);
|
||||
if (intent != null) {
|
||||
intent.setExtrasClassLoader(getClassLoader());
|
||||
intent.prepareToEnterProcess();
|
||||
|
||||
@@ -123,8 +123,8 @@ interface IActivityManager {
|
||||
in IIntentReceiver receiver, in IntentFilter filter,
|
||||
in String requiredPermission, int userId, int flags);
|
||||
Intent registerReceiverWithFeature(in IApplicationThread caller, in String callerPackage,
|
||||
in String callingFeatureId, in IIntentReceiver receiver, in IntentFilter filter,
|
||||
in String requiredPermission, int userId, int flags);
|
||||
in String callingFeatureId, in String receiverId, in IIntentReceiver receiver,
|
||||
in IntentFilter filter, in String requiredPermission, int userId, int flags);
|
||||
@UnsupportedAppUsage
|
||||
void unregisterReceiver(in IIntentReceiver receiver);
|
||||
/** @deprecated Use {@link #broadcastIntentWithFeature} instead */
|
||||
|
||||
@@ -14055,13 +14055,13 @@ public class ActivityManagerService extends IActivityManager.Stub
|
||||
public Intent registerReceiver(IApplicationThread caller, String callerPackage,
|
||||
IIntentReceiver receiver, IntentFilter filter, String permission, int userId,
|
||||
int flags) {
|
||||
return registerReceiverWithFeature(caller, callerPackage, null, receiver, filter,
|
||||
permission, userId, flags);
|
||||
return registerReceiverWithFeature(caller, callerPackage, null, null,
|
||||
receiver, filter, permission, userId, flags);
|
||||
}
|
||||
|
||||
public Intent registerReceiverWithFeature(IApplicationThread caller, String callerPackage,
|
||||
String callerFeatureId, IIntentReceiver receiver, IntentFilter filter,
|
||||
String permission, int userId, int flags) {
|
||||
String callerFeatureId, String receiverId, IIntentReceiver receiver,
|
||||
IntentFilter filter, String permission, int userId, int flags) {
|
||||
enforceNotIsolatedCaller("registerReceiver");
|
||||
ArrayList<Intent> stickyIntents = null;
|
||||
ProcessRecord callerApp = null;
|
||||
@@ -14198,7 +14198,7 @@ public class ActivityManagerService extends IActivityManager.Stub
|
||||
+ " callerPackage is " + callerPackage);
|
||||
}
|
||||
BroadcastFilter bf = new BroadcastFilter(filter, rl, callerPackage, callerFeatureId,
|
||||
permission, callingUid, userId, instantApp, visibleToInstantApps);
|
||||
receiverId, permission, callingUid, userId, instantApp, visibleToInstantApps);
|
||||
if (rl.containsFilter(filter)) {
|
||||
Slog.w(TAG, "Receiver with filter " + filter
|
||||
+ " already registered for pid " + rl.pid
|
||||
|
||||
@@ -28,6 +28,7 @@ final class BroadcastFilter extends IntentFilter {
|
||||
final ReceiverList receiverList;
|
||||
final String packageName;
|
||||
final String featureId;
|
||||
final String receiverId;
|
||||
final String requiredPermission;
|
||||
final int owningUid;
|
||||
final int owningUserId;
|
||||
@@ -35,12 +36,13 @@ final class BroadcastFilter extends IntentFilter {
|
||||
final boolean visibleToInstantApp;
|
||||
|
||||
BroadcastFilter(IntentFilter _filter, ReceiverList _receiverList,
|
||||
String _packageName, String _featureId, String _requiredPermission, int _owningUid, int _userId,
|
||||
boolean _instantApp, boolean _visibleToInstantApp) {
|
||||
String _packageName, String _featureId, String _receiverId, String _requiredPermission,
|
||||
int _owningUid, int _userId, boolean _instantApp, boolean _visibleToInstantApp) {
|
||||
super(_filter);
|
||||
receiverList = _receiverList;
|
||||
packageName = _packageName;
|
||||
featureId = _featureId;
|
||||
receiverId = _receiverId;
|
||||
requiredPermission = _requiredPermission;
|
||||
owningUid = _owningUid;
|
||||
owningUserId = _userId;
|
||||
|
||||
@@ -639,7 +639,7 @@ public final class BroadcastQueue {
|
||||
final int opCode = AppOpsManager.permissionToOpCode(filter.requiredPermission);
|
||||
if (opCode != AppOpsManager.OP_NONE
|
||||
&& mService.getAppOpsManager().noteOpNoThrow(opCode, r.callingUid,
|
||||
r.callerPackage, r.callerFeatureId, "")
|
||||
r.callerPackage, r.callerFeatureId, "Broadcast sent to protected receiver")
|
||||
!= AppOpsManager.MODE_ALLOWED) {
|
||||
Slog.w(TAG, "Appop Denial: broadcasting "
|
||||
+ r.intent.toString()
|
||||
@@ -672,7 +672,8 @@ public final class BroadcastQueue {
|
||||
int appOp = AppOpsManager.permissionToOpCode(requiredPermission);
|
||||
if (appOp != AppOpsManager.OP_NONE && appOp != r.appOp
|
||||
&& mService.getAppOpsManager().noteOpNoThrow(appOp,
|
||||
filter.receiverList.uid, filter.packageName, filter.featureId, "")
|
||||
filter.receiverList.uid, filter.packageName, filter.featureId,
|
||||
"Broadcast delivered to registered receiver " + filter.receiverId)
|
||||
!= AppOpsManager.MODE_ALLOWED) {
|
||||
Slog.w(TAG, "Appop Denial: receiving "
|
||||
+ r.intent.toString()
|
||||
@@ -704,7 +705,8 @@ public final class BroadcastQueue {
|
||||
}
|
||||
if (!skip && r.appOp != AppOpsManager.OP_NONE
|
||||
&& mService.getAppOpsManager().noteOpNoThrow(r.appOp,
|
||||
filter.receiverList.uid, filter.packageName, filter.featureId, "")
|
||||
filter.receiverList.uid, filter.packageName, filter.featureId,
|
||||
"Broadcast delivered to registered receiver " + filter.receiverId)
|
||||
!= AppOpsManager.MODE_ALLOWED) {
|
||||
Slog.w(TAG, "Appop Denial: receiving "
|
||||
+ r.intent.toString()
|
||||
@@ -1366,9 +1368,10 @@ public final class BroadcastQueue {
|
||||
skip = true;
|
||||
} else if (!skip && info.activityInfo.permission != null) {
|
||||
final int opCode = AppOpsManager.permissionToOpCode(info.activityInfo.permission);
|
||||
if (opCode != AppOpsManager.OP_NONE
|
||||
&& mService.getAppOpsManager().noteOpNoThrow(opCode, r.callingUid, r.callerPackage,
|
||||
r.callerFeatureId, "") != AppOpsManager.MODE_ALLOWED) {
|
||||
if (opCode != AppOpsManager.OP_NONE && mService.getAppOpsManager().noteOpNoThrow(opCode,
|
||||
r.callingUid, r.callerPackage, r.callerFeatureId,
|
||||
"Broadcast delivered to " + info.activityInfo.name)
|
||||
!= AppOpsManager.MODE_ALLOWED) {
|
||||
Slog.w(TAG, "Appop Denial: broadcasting "
|
||||
+ r.intent.toString()
|
||||
+ " from " + r.callerPackage + " (pid="
|
||||
@@ -1407,7 +1410,8 @@ public final class BroadcastQueue {
|
||||
if (appOp != AppOpsManager.OP_NONE && appOp != r.appOp
|
||||
&& mService.getAppOpsManager().noteOpNoThrow(appOp,
|
||||
info.activityInfo.applicationInfo.uid, info.activityInfo.packageName,
|
||||
null /* default featureId */, "")
|
||||
null /* default featureId */,
|
||||
"Broadcast delivered to " + info.activityInfo.name)
|
||||
!= AppOpsManager.MODE_ALLOWED) {
|
||||
Slog.w(TAG, "Appop Denial: receiving "
|
||||
+ r.intent + " to "
|
||||
@@ -1424,7 +1428,7 @@ public final class BroadcastQueue {
|
||||
if (!skip && r.appOp != AppOpsManager.OP_NONE
|
||||
&& mService.getAppOpsManager().noteOpNoThrow(r.appOp,
|
||||
info.activityInfo.applicationInfo.uid, info.activityInfo.packageName,
|
||||
null /* default featureId */, "")
|
||||
null /* default featureId */, "Broadcast delivered to " + info.activityInfo.name)
|
||||
!= AppOpsManager.MODE_ALLOWED) {
|
||||
Slog.w(TAG, "Appop Denial: receiving "
|
||||
+ r.intent + " to "
|
||||
|
||||
Reference in New Issue
Block a user