diff options
Diffstat (limited to 'core')
| -rw-r--r-- | core/java/android/app/ActivityManagerNative.java | 22 | ||||
| -rw-r--r-- | core/java/android/app/IActivityManager.java | 5 | ||||
| -rw-r--r-- | core/java/android/content/BroadcastReceiver.java | 12 |
3 files changed, 39 insertions, 0 deletions
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index a1cc8ec..d638de6 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -577,6 +577,15 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } + case GET_CALLING_PACKAGE_FOR_BROADCAST_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + boolean foreground = data.readInt() == 1 ? true : false; + String res = getCallingPackageForBroadcast(foreground); + reply.writeNoException(); + reply.writeString(res); + return true; + } + case GET_CALLING_ACTIVITY_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder token = data.readStrongBinder(); @@ -3192,6 +3201,19 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); return res; } + public String getCallingPackageForBroadcast(boolean foreground) throws RemoteException + { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + data.writeInt(foreground ? 1 : 0); + mRemote.transact(GET_CALLING_PACKAGE_FOR_BROADCAST_TRANSACTION, data, reply, 0); + reply.readException(); + String res = reply.readString(); + data.recycle(); + reply.recycle(); + return res; + } public ComponentName getCallingActivity(IBinder token) throws RemoteException { Parcel data = Parcel.obtain(); diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java index 17d0fa1..a27f9c8 100644 --- a/core/java/android/app/IActivityManager.java +++ b/core/java/android/app/IActivityManager.java @@ -122,6 +122,7 @@ public interface IActivityManager extends IInterface { public void activitySlept(IBinder token) throws RemoteException; public void activityDestroyed(IBinder token) throws RemoteException; public String getCallingPackage(IBinder token) throws RemoteException; + public String getCallingPackageForBroadcast(boolean foreground) throws RemoteException; public ComponentName getCallingActivity(IBinder token) throws RemoteException; public List<IAppTask> getAppTasks(String callingPackage) throws RemoteException; public int addAppTask(IBinder activityToken, Intent intent, @@ -840,6 +841,10 @@ public interface IActivityManager extends IInterface { int START_IN_PLACE_ANIMATION_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+240; int CHECK_PERMISSION_WITH_TOKEN_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+241; int REGISTER_TASK_STACK_LISTENER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+242; + // 243: Available + + // start of CM transactions + int GET_CALLING_PACKAGE_FOR_BROADCAST_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+244; // Start of M transactions int NOTIFY_CLEARTEXT_NETWORK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+280; diff --git a/core/java/android/content/BroadcastReceiver.java b/core/java/android/content/BroadcastReceiver.java index 2260d7e..bf0c48d 100644 --- a/core/java/android/content/BroadcastReceiver.java +++ b/core/java/android/content/BroadcastReceiver.java @@ -16,6 +16,7 @@ package android.content; +import android.app.ActivityManager; import android.app.ActivityManagerNative; import android.app.ActivityThread; import android.app.IActivityManager; @@ -747,6 +748,17 @@ public abstract class BroadcastReceiver { return mPendingResult.mSendingUser; } + /** @hide */ + public String getSendingPackage(Intent intent) { + final IActivityManager mgr = ActivityManagerNative.getDefault(); + try { + boolean fg = (intent.getFlags() & Intent.FLAG_RECEIVER_FOREGROUND) != 0; + return mgr.getCallingPackageForBroadcast(fg); + } catch (RemoteException ex) { + return null; + } + } + /** * Control inclusion of debugging help for mismatched * calls to {@link Context#registerReceiver(BroadcastReceiver, IntentFilter) |
