[Multiple Users] Start activity as system user.

Ensure that activity is started as system user when launched within the
systemui process.

Bug: b/228193032
Test: Manual on device
Change-Id: I803d8961f2c11d98f08858506e9ff510c0427e94
This commit is contained in:
Aaron Liu
2022-04-05 18:23:31 +00:00
parent f86c86cd8f
commit 7e3f139b72

View File

@@ -1708,7 +1708,7 @@ public class CentralSurfaces extends CoreStartable implements
@Nullable ActivityLaunchAnimator.Controller animationController, @Nullable ActivityLaunchAnimator.Controller animationController,
boolean showOverLockscreenWhenLocked) { boolean showOverLockscreenWhenLocked) {
startActivity(intent, dismissShade, animationController, showOverLockscreenWhenLocked, startActivity(intent, dismissShade, animationController, showOverLockscreenWhenLocked,
UserHandle.CURRENT); getActivityUserHandle(intent));
} }
@Override @Override
@@ -1795,7 +1795,7 @@ public class CentralSurfaces extends CoreStartable implements
public void startActivity(Intent intent, boolean dismissShade, Callback callback) { public void startActivity(Intent intent, boolean dismissShade, Callback callback) {
startActivityDismissingKeyguard(intent, false, dismissShade, startActivityDismissingKeyguard(intent, false, dismissShade,
false /* disallowEnterPictureInPictureWhileLaunching */, callback, 0, false /* disallowEnterPictureInPictureWhileLaunching */, callback, 0,
null /* animationController */, UserHandle.CURRENT); null /* animationController */, getActivityUserHandle(intent));
} }
public void setQsExpanded(boolean expanded) { public void setQsExpanded(boolean expanded) {
@@ -2425,7 +2425,7 @@ public class CentralSurfaces extends CoreStartable implements
boolean dismissShade, int flags) { boolean dismissShade, int flags) {
startActivityDismissingKeyguard(intent, onlyProvisioned, dismissShade, startActivityDismissingKeyguard(intent, onlyProvisioned, dismissShade,
false /* disallowEnterPictureInPictureWhileLaunching */, null /* callback */, false /* disallowEnterPictureInPictureWhileLaunching */, null /* callback */,
flags, null /* animationController */, UserHandle.CURRENT); flags, null /* animationController */, getActivityUserHandle(intent));
} }
public void startActivityDismissingKeyguard(final Intent intent, boolean onlyProvisioned, public void startActivityDismissingKeyguard(final Intent intent, boolean onlyProvisioned,
@@ -2868,7 +2868,7 @@ public class CentralSurfaces extends CoreStartable implements
null /* callback */, null /* callback */,
0 /* flags */, 0 /* flags */,
animationController, animationController,
UserHandle.CURRENT), getActivityUserHandle(intent)),
delay); delay);
} }
@@ -3602,7 +3602,8 @@ public class CentralSurfaces extends CoreStartable implements
mLaunchEmergencyActionWhenFinishedWaking = false; mLaunchEmergencyActionWhenFinishedWaking = false;
Intent emergencyIntent = getEmergencyActionIntent(); Intent emergencyIntent = getEmergencyActionIntent();
if (emergencyIntent != null) { if (emergencyIntent != null) {
mContext.startActivityAsUser(emergencyIntent, UserHandle.CURRENT); mContext.startActivityAsUser(emergencyIntent,
getActivityUserHandle(emergencyIntent));
} }
} }
updateScrimController(); updateScrimController();
@@ -4500,4 +4501,20 @@ public class CentralSurfaces extends CoreStartable implements
@Override @Override
public void dispatchDemoCommand(String command, Bundle args) { } public void dispatchDemoCommand(String command, Bundle args) { }
}; };
/**
* Determines what UserHandle to use when launching an activity.
*
* We want to ensure that activities that are launched within the systemui process should be
* launched as user of the current process.
* @param intent
* @return UserHandle
*/
private UserHandle getActivityUserHandle(Intent intent) {
if (intent.getComponent() != null
&& mContext.getPackageName().equals(intent.getComponent().getPackageName())) {
return new UserHandle(UserHandle.myUserId());
}
return UserHandle.CURRENT;
}
} }