diff options
| author | 2019-01-14 00:05:45 -0800 | |
|---|---|---|
| committer | 2019-01-14 22:34:52 +0000 | |
| commit | ffb94e69c3fc308d6d4164e2309f74442282fc84 (patch) | |
| tree | 60d1459f01cffbe1a588e817e4bc77211a23e3ad | |
| parent | 6ec5ba9a6c3aaa88405b6d0a1c1ca38c92a4bb1f (diff) | |
Pre-grant location permisson to location extra packages.
Grant location permission to extra packages configurated in xml config
file. This is necessary as pre-grant happens right after system starts,
before location provider sets the *real* location extra package.
Bug: 119225658
Test: Manual, atest GtsPermissionTestCases:com.google.android.permission.gts.DefaultPermissionGrantPolicyTest
Change-Id: Ibbfbfb78aa062fa6dc013a1001ea3486d62f4331
6 files changed, 35 insertions, 0 deletions
diff --git a/core/java/android/content/pm/PackageManagerInternal.java b/core/java/android/content/pm/PackageManagerInternal.java index 83979e925be1..ed7f1c2cba04 100644 --- a/core/java/android/content/pm/PackageManagerInternal.java +++ b/core/java/android/content/pm/PackageManagerInternal.java @@ -137,6 +137,12 @@ public abstract class PackageManagerInternal { public abstract void setLocationPackagesProvider(PackagesProvider provider); /** + * Set the location extra packages provider. + * @param provider The packages provider. + */ + public abstract void setLocationExtraPackagesProvider(PackagesProvider provider); + + /** * Sets the voice interaction packages provider. * @param provider The packages provider. */ diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 1feb59a52ad1..03cc00262a74 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -1654,6 +1654,8 @@ config_enableFusedLocationOverlay is false. --> <string name="config_fusedLocationProviderPackageName" translatable="false">com.android.location.fused</string> + <string-array name="config_locationExtraPackageNames" translatable="false"></string-array> + <!-- The package name of the default network recommendation app. A network recommendation provider must: * Be granted the SCORE_NETWORKS permission. diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 010accf19d18..ae72ab4baa7b 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1840,6 +1840,7 @@ <java-symbol type="array" name="radioAttributes" /> <java-symbol type="array" name="config_oemUsbModeOverride" /> <java-symbol type="array" name="config_locationProviderPackageNames" /> + <java-symbol type="array" name="config_locationExtraPackageNames" /> <java-symbol type="array" name="config_testLocationProviders" /> <java-symbol type="array" name="config_defaultNotificationVibePattern" /> <java-symbol type="array" name="config_notificationFallbackVibePattern" /> diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java index 869d564b4329..4c72b3596305 100644 --- a/services/core/java/com/android/server/LocationManagerService.java +++ b/services/core/java/com/android/server/LocationManagerService.java @@ -257,6 +257,9 @@ public class LocationManagerService extends ILocationManager.Stub { packageManagerInternal.setLocationPackagesProvider( userId -> mContext.getResources().getStringArray( com.android.internal.R.array.config_locationProviderPackageNames)); + packageManagerInternal.setLocationExtraPackagesProvider( + userId -> mContext.getResources().getStringArray( + com.android.internal.R.array.config_locationExtraPackageNames)); // most startup is deferred until systemRunning() } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 597f5b3f4e05..5418b8ea94ba 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -23132,6 +23132,11 @@ public class PackageManagerService extends IPackageManager.Stub } @Override + public void setLocationExtraPackagesProvider(PackagesProvider provider) { + mDefaultPermissionPolicy.setLocationExtraPackagesProvider(provider); + } + + @Override public void setVoiceInteractionPackagesProvider(PackagesProvider provider) { mDefaultPermissionPolicy.setVoiceInteractionPackagesProvider(provider); } diff --git a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java index 789664d82332..ceaf69d72108 100644 --- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java +++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java @@ -225,6 +225,7 @@ public final class DefaultPermissionGrantPolicy { private final Handler mHandler; private PackagesProvider mLocationPackagesProvider; + private PackagesProvider mLocationExtraPackagesProvider; private PackagesProvider mVoiceInteractionPackagesProvider; private PackagesProvider mSmsAppPackagesProvider; private PackagesProvider mDialerAppPackagesProvider; @@ -270,6 +271,13 @@ public final class DefaultPermissionGrantPolicy { } } + /** Sets the provider for loction extra packages. */ + public void setLocationExtraPackagesProvider(PackagesProvider provider) { + synchronized (mLock) { + mLocationExtraPackagesProvider = provider; + } + } + public void setVoiceInteractionPackagesProvider(PackagesProvider provider) { synchronized (mLock) { mVoiceInteractionPackagesProvider = provider; @@ -403,6 +411,7 @@ public final class DefaultPermissionGrantPolicy { Log.i(TAG, "Granting permissions to default platform handlers for user " + userId); final PackagesProvider locationPackagesProvider; + final PackagesProvider locationExtraPackagesProvider; final PackagesProvider voiceInteractionPackagesProvider; final PackagesProvider smsAppPackagesProvider; final PackagesProvider dialerAppPackagesProvider; @@ -412,6 +421,7 @@ public final class DefaultPermissionGrantPolicy { synchronized (mLock) { locationPackagesProvider = mLocationPackagesProvider; + locationExtraPackagesProvider = mLocationExtraPackagesProvider; voiceInteractionPackagesProvider = mVoiceInteractionPackagesProvider; smsAppPackagesProvider = mSmsAppPackagesProvider; dialerAppPackagesProvider = mDialerAppPackagesProvider; @@ -424,6 +434,8 @@ public final class DefaultPermissionGrantPolicy { ? voiceInteractionPackagesProvider.getPackages(userId) : null; String[] locationPackageNames = (locationPackagesProvider != null) ? locationPackagesProvider.getPackages(userId) : null; + String[] locationExtraPackageNames = (locationExtraPackagesProvider != null) + ? locationExtraPackagesProvider.getPackages(userId) : null; String[] smsAppPackageNames = (smsAppPackagesProvider != null) ? smsAppPackagesProvider.getPackages(userId) : null; String[] dialerAppPackageNames = (dialerAppPackagesProvider != null) @@ -638,6 +650,12 @@ public final class DefaultPermissionGrantPolicy { LOCATION_PERMISSIONS, ACTIVITY_RECOGNITION_PERMISSIONS); } } + if (locationExtraPackageNames != null) { + // Also grant location permission to location extra packages. + for (String packageName : locationExtraPackageNames) { + grantPermissionsToSystemPackage(packageName, userId, LOCATION_PERMISSIONS); + } + } // Music Intent musicIntent = new Intent(Intent.ACTION_VIEW) |