summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Wei Wang <weiwa@google.com> 2019-01-14 00:05:45 -0800
committer Wei Wang <weiwa@google.com> 2019-01-14 22:34:52 +0000
commitffb94e69c3fc308d6d4164e2309f74442282fc84 (patch)
tree60d1459f01cffbe1a588e817e4bc77211a23e3ad
parent6ec5ba9a6c3aaa88405b6d0a1c1ca38c92a4bb1f (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
-rw-r--r--core/java/android/content/pm/PackageManagerInternal.java6
-rw-r--r--core/res/res/values/config.xml2
-rw-r--r--core/res/res/values/symbols.xml1
-rw-r--r--services/core/java/com/android/server/LocationManagerService.java3
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java5
-rw-r--r--services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java18
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)