When installing/enabling a system app, bootstrap it
Specifically, send it a BOOT_COMPLETED broadcast just as it would have received during device (or user) startup. Bug 8594153 Change-Id: I847c16df56d038a25758e594f951bc15348edc19
This commit is contained in:
@@ -6055,6 +6055,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
long callingId = Binder.clearCallingIdentity();
|
||||
try {
|
||||
boolean sendAdded = false;
|
||||
boolean isSystem = false;
|
||||
Bundle extras = new Bundle(1);
|
||||
|
||||
// writer
|
||||
@@ -6068,12 +6069,29 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
mSettings.writePackageRestrictionsLPr(userId);
|
||||
extras.putInt(Intent.EXTRA_UID, UserHandle.getUid(userId, pkgSetting.appId));
|
||||
sendAdded = true;
|
||||
isSystem = (pkgSetting.pkgFlags & ApplicationInfo.FLAG_SYSTEM) != 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (sendAdded) {
|
||||
sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED,
|
||||
packageName, extras, null, null, new int[] {userId});
|
||||
if (isSystem) {
|
||||
// The just-installed/enabled app is bundled on the system, so presumed
|
||||
// to be able to run automatically without needing an explicit launch.
|
||||
// Send it a BOOT_COMPLETED if it would ordinarily have gotten one.
|
||||
Intent bcIntent = new Intent(Intent.ACTION_BOOT_COMPLETED)
|
||||
.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)
|
||||
.setPackage(packageName);
|
||||
try {
|
||||
IActivityManager am = ActivityManagerNative.getDefault();
|
||||
am.broadcastIntent(null, bcIntent, null, null, 0, null, null, null,
|
||||
android.app.AppOpsManager.OP_NONE, false, false, userId);
|
||||
} catch (RemoteException e) {
|
||||
// shouldn't happen
|
||||
Slog.w(TAG, "Unable to bootstrap installed package", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
Binder.restoreCallingIdentity(callingId);
|
||||
|
||||
Reference in New Issue
Block a user