Merge "Allow background default container service in a less crashy way" into oc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
0283544c49
@@ -635,6 +635,11 @@ interface IActivityManager {
|
||||
*/
|
||||
int getLastResumedActivityUserId();
|
||||
|
||||
/**
|
||||
* Add a bare uid to the background restrictions whitelist. Only the system uid may call this.
|
||||
*/
|
||||
void backgroundWhitelistUid(int uid);
|
||||
|
||||
// WARNING: when these transactions are updated, check if they are any callers on the native
|
||||
// side. If so, make sure they are using the correct transaction ids and arguments.
|
||||
// If a transaction which will also be used on the native side is being inserted, add it
|
||||
|
||||
@@ -12143,6 +12143,24 @@ public class ActivityManagerService extends IActivityManager.Stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void backgroundWhitelistUid(final int uid) {
|
||||
if (Binder.getCallingUid() != Process.SYSTEM_UID) {
|
||||
throw new SecurityException("Only the OS may call backgroundWhitelistUid()");
|
||||
}
|
||||
|
||||
if (DEBUG_BACKGROUND_CHECK) {
|
||||
Slog.i(TAG, "Adding uid " + uid + " to bg uid whitelist");
|
||||
}
|
||||
synchronized (this) {
|
||||
final int N = mBackgroundUidWhitelist.length;
|
||||
int[] newList = new int[N+1];
|
||||
System.arraycopy(mBackgroundUidWhitelist, 0, newList, 0, N);
|
||||
newList[N] = uid;
|
||||
mBackgroundUidWhitelist = newList;
|
||||
}
|
||||
}
|
||||
|
||||
final ProcessRecord addAppLocked(ApplicationInfo info, String customProcess, boolean isolated,
|
||||
String abiOverride) {
|
||||
ProcessRecord app;
|
||||
|
||||
@@ -608,6 +608,10 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
final boolean mIsPreNUpgrade;
|
||||
final boolean mIsPreNMR1Upgrade;
|
||||
|
||||
// Have we told the Activity Manager to whitelist the default container service by uid yet?
|
||||
@GuardedBy("mPackages")
|
||||
boolean mDefaultContainerWhitelisted = false;
|
||||
|
||||
@GuardedBy("mPackages")
|
||||
private boolean mDexOptDialogShown;
|
||||
|
||||
@@ -13050,7 +13054,18 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
intent.setComponent(DEFAULT_CONTAINER_COMPONENT);
|
||||
IActivityManager am = ActivityManager.getService();
|
||||
if (am != null) {
|
||||
int dcsUid = -1;
|
||||
synchronized (mPackages) {
|
||||
if (!mDefaultContainerWhitelisted) {
|
||||
mDefaultContainerWhitelisted = true;
|
||||
PackageSetting ps = mSettings.mPackages.get(DEFAULT_CONTAINER_PACKAGE);
|
||||
dcsUid = UserHandle.getUid(UserHandle.USER_SYSTEM, ps.appId);
|
||||
}
|
||||
}
|
||||
try {
|
||||
if (dcsUid > 0) {
|
||||
am.backgroundWhitelistUid(dcsUid);
|
||||
}
|
||||
am.startService(null, intent, null, -1, null, false, mContext.getOpPackageName(),
|
||||
UserHandle.USER_SYSTEM);
|
||||
} catch (RemoteException e) {
|
||||
|
||||
Reference in New Issue
Block a user