From 860d8b9a7c1742817ea360a7433139786196accb Mon Sep 17 00:00:00 2001 From: Christopher Tate Date: Wed, 15 Feb 2017 15:40:29 -0800 Subject: [PATCH] Put package verifier on the power whitelist when invoked Give the package verifier the right to run services while we're asking it to do its thing. Bug 31025833 Change-Id: If6a593d95fe37d4c2c7ab6d59aa2661c1e5df6b3 --- .../server/pm/PackageManagerService.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index ebd0b343f9cf1..4cfa49161e91a 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -256,6 +256,7 @@ import com.android.internal.util.Preconditions; import com.android.internal.util.XmlUtils; import com.android.server.AttributeCache; import com.android.server.BackgroundDexOptJobService; +import com.android.server.DeviceIdleController; import com.android.server.EventLogTags; import com.android.server.FgThread; import com.android.server.IntentResolver; @@ -834,6 +835,8 @@ public class PackageManagerService extends IPackageManager.Stub { private UserManagerInternal mUserManagerInternal; + private DeviceIdleController.LocalService mDeviceIdleController; + private File mCacheDir; private ArraySet mPrivappPermissionsViolations; @@ -3841,6 +3844,14 @@ public class PackageManagerService extends IPackageManager.Stub { return mUserManagerInternal; } + private DeviceIdleController.LocalService getDeviceIdleController() { + if (mDeviceIdleController == null) { + mDeviceIdleController = + LocalServices.getService(DeviceIdleController.LocalService.class); + } + return mDeviceIdleController; + } + /** * Update given flags when being used to request {@link PackageInfo}. */ @@ -14598,6 +14609,9 @@ public class PackageManagerService extends IPackageManager.Stub { final List sufficientVerifiers = matchVerifiers(pkgLite, receivers, verificationState); + DeviceIdleController.LocalService idleController = getDeviceIdleController(); + final long idleDuration = getVerificationTimeout(); + /* * If any sufficient verifiers were listed in the package * manifest, attempt to ask them. @@ -14610,6 +14624,9 @@ public class PackageManagerService extends IPackageManager.Stub { } else { for (int i = 0; i < N; i++) { final ComponentName verifierComponent = sufficientVerifiers.get(i); + idleController.addPowerSaveTempWhitelistApp(Process.myUid(), + verifierComponent.getPackageName(), idleDuration, + verifierUser.getIdentifier(), false, "package verifier"); final Intent sufficientIntent = new Intent(verification); sufficientIntent.setComponent(verifierComponent); @@ -14630,6 +14647,9 @@ public class PackageManagerService extends IPackageManager.Stub { * target BroadcastReceivers have run. */ verification.setComponent(requiredVerifierComponent); + idleController.addPowerSaveTempWhitelistApp(Process.myUid(), + requiredVerifierComponent.getPackageName(), idleDuration, + verifierUser.getIdentifier(), false, "package verifier"); mContext.sendOrderedBroadcastAsUser(verification, verifierUser, android.Manifest.permission.PACKAGE_VERIFICATION_AGENT, new BroadcastReceiver() {