diff options
| author | 2013-05-01 14:17:53 -0700 | |
|---|---|---|
| committer | 2013-05-01 14:25:26 -0700 | |
| commit | 3335644f7ae060c170f457ebf8c61622f56ae9a7 (patch) | |
| tree | dfd97175b3b1dc7c5236f8ebcac6d0919d71402e | |
| parent | 4e0ae8d6fdc4646a90949ddf95fd8d1f7a22055a (diff) | |
Bootstrap installed system apps only when the target user is running
I.e. don't bother trying to send a BOOT_COMPLETED broadcast to the
newly-installed/enabled system app when its host user isn't live.
Also use the static isSystemApp()-type helpers instead of duplicating
those tests locally.
Bug 8594153
Change-Id: I4bd0b86351d67f72c44eae8d1afce6a98f034d31
| -rw-r--r-- | services/java/com/android/server/pm/PackageManagerService.java | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java index fcea9e7238ac..ada600dc0f2d 100644 --- a/services/java/com/android/server/pm/PackageManagerService.java +++ b/services/java/com/android/server/pm/PackageManagerService.java @@ -6055,7 +6055,6 @@ public class PackageManagerService extends IPackageManager.Stub { long callingId = Binder.clearCallingIdentity(); try { boolean sendAdded = false; - boolean isSystem = false; Bundle extras = new Bundle(1); // writer @@ -6069,28 +6068,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(); + try { + IActivityManager am = ActivityManagerNative.getDefault(); + final boolean isSystem = + isSystemApp(pkgSetting) || isUpdatedSystemApp(pkgSetting); + if (isSystem && am.isUserRunning(userId, false)) { + // 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); 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); } + } catch (RemoteException e) { + // shouldn't happen + Slog.w(TAG, "Unable to bootstrap installed package", e); } } } finally { |