diff options
Diffstat (limited to 'services/core/java/com/android/server/am/ActivityStarter.java')
-rw-r--r-- | services/core/java/com/android/server/am/ActivityStarter.java | 56 |
1 files changed, 45 insertions, 11 deletions
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java index 06d8e4875e0a..0a2ef6ad3be7 100644 --- a/services/core/java/com/android/server/am/ActivityStarter.java +++ b/services/core/java/com/android/server/am/ActivityStarter.java @@ -127,6 +127,8 @@ import java.util.ArrayList; * an activity and associated task and stack. */ class ActivityStarter { + public static final int PID_NULL = 0; + private static final String TAG = TAG_WITH_CLASS_NAME ? "ActivityStarter" : TAG_AM; private static final String TAG_RESULTS = TAG + POSTFIX_RESULTS; private static final String TAG_FOCUS = TAG + POSTFIX_FOCUS; @@ -712,12 +714,24 @@ class ActivityStarter { UserHandle.CURRENT); } + final int startActivityMayWait(IApplicationThread caller, int callingUid, String callingPackage, + Intent intent, String resolvedType, IVoiceInteractionSession voiceSession, + IVoiceInteractor voiceInteractor, IBinder resultTo, String resultWho, int requestCode, + int startFlags, ProfilerInfo profilerInfo, IActivityManager.WaitResult outResult, + Configuration config, Bundle bOptions, boolean ignoreTargetSecurity, int userId, + IActivityContainer iContainer, TaskRecord inTask) { + return startActivityMayWait(caller, callingUid, PID_NULL, UserHandle.USER_NULL, + callingPackage, intent, resolvedType, voiceSession, voiceInteractor, resultTo, + resultWho, requestCode, startFlags, profilerInfo, outResult, config, bOptions, + ignoreTargetSecurity, userId, iContainer, inTask); + } + final int startActivityMayWait(IApplicationThread caller, int callingUid, - String callingPackage, Intent intent, String resolvedType, - IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor, - IBinder resultTo, String resultWho, int requestCode, int startFlags, - ProfilerInfo profilerInfo, IActivityManager.WaitResult outResult, Configuration config, - Bundle bOptions, boolean ignoreTargetSecurity, int userId, + int requestRealCallingPid, int requestRealCallingUid, String callingPackage, + Intent intent, String resolvedType, IVoiceInteractionSession voiceSession, + IVoiceInteractor voiceInteractor, IBinder resultTo, String resultWho, int requestCode, + int startFlags, ProfilerInfo profilerInfo, IActivityManager.WaitResult outResult, + Configuration config, Bundle bOptions, boolean ignoreTargetSecurity, int userId, IActivityContainer iContainer, TaskRecord inTask) { // Refuse possible leaked file descriptors if (intent != null && intent.hasFileDescriptors()) { @@ -768,8 +782,14 @@ class ActivityStarter { // Cannot start a child activity if the parent is not resumed. return ActivityManager.START_CANCELED; } - final int realCallingPid = Binder.getCallingPid(); - final int realCallingUid = Binder.getCallingUid(); + + final int realCallingPid = requestRealCallingPid != PID_NULL + ? requestRealCallingPid + : Binder.getCallingPid(); + final int realCallingUid = requestRealCallingUid != UserHandle.USER_NULL + ? requestRealCallingUid + : Binder.getCallingUid(); + int callingPid; if (callingUid >= 0) { callingPid = -1; @@ -780,6 +800,7 @@ class ActivityStarter { callingPid = callingUid = -1; } + final ActivityStack stack; if (container == null || container.mStack.isOnHomeDisplay()) { stack = mSupervisor.mFocusedStack; @@ -921,8 +942,16 @@ class ActivityStarter { } final int startActivities(IApplicationThread caller, int callingUid, String callingPackage, - Intent[] intents, String[] resolvedTypes, IBinder resultTo, - Bundle bOptions, int userId) { + Intent[] intents, String[] resolvedTypes, IBinder resultTo, Bundle bOptions, + int userId) { + return startActivities(caller, callingUid, PID_NULL, UserHandle.USER_NULL, callingPackage, + intents, resolvedTypes, resultTo, bOptions, userId); + } + + final int startActivities(IApplicationThread caller, int callingUid, + int incomingRealCallingPid, int incomingRealCallingUid, String callingPackage, + Intent[] intents, String[] resolvedTypes, IBinder resultTo, Bundle bOptions, + int userId) { if (intents == null) { throw new NullPointerException("intents is null"); } @@ -933,8 +962,13 @@ class ActivityStarter { throw new IllegalArgumentException("intents are length different than resolvedTypes"); } - final int realCallingPid = Binder.getCallingPid(); - final int realCallingUid = Binder.getCallingUid(); + final int realCallingPid = incomingRealCallingPid != PID_NULL + ? incomingRealCallingPid + : Binder.getCallingPid(); + + final int realCallingUid = incomingRealCallingUid != UserHandle.USER_NULL + ? incomingRealCallingUid + : Binder.getCallingUid(); int callingPid; if (callingUid >= 0) { |