summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Joanne Chung <joannechung@google.com> 2019-11-08 01:51:15 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-11-08 01:51:15 +0000
commit0ad8fe3b872687bcfcaf1367d8ec08fa69f3e594 (patch)
tree7c4e758eb37e9992348c87f7390ac5b31484dc60
parent61d29f3953a50d69bf9154086337afa4de32bcb4 (diff)
parentfba3e88ef9a601af01f7aee375313b55c1cc5e54 (diff)
Merge "Grant permissions to ContentCapture and remove permission for TC."
-rw-r--r--api/test-current.txt1
-rw-r--r--core/java/android/app/ApplicationPackageManager.java9
-rw-r--r--core/java/android/content/pm/IPackageManager.aidl2
-rw-r--r--core/java/android/content/pm/PackageManager.java12
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java17
-rw-r--r--services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java18
6 files changed, 57 insertions, 2 deletions
diff --git a/api/test-current.txt b/api/test-current.txt
index 242ec270d44f..1f51c0fc93fe 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -755,6 +755,7 @@ package android.content.pm {
public abstract class PackageManager {
method @RequiresPermission("android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS") public abstract void addOnPermissionsChangeListener(@NonNull android.content.pm.PackageManager.OnPermissionsChangedListener);
method public abstract boolean arePermissionsIndividuallyControlled();
+ method @Nullable public String getContentCaptureServicePackageName();
method @Nullable @RequiresPermission("android.permission.INTERACT_ACROSS_USERS_FULL") public abstract String getDefaultBrowserPackageNameAsUser(int);
method @Nullable public String getIncidentReportApproverPackageName();
method public abstract int getInstallReason(@NonNull String, @NonNull android.os.UserHandle);
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index 03ef286c48c1..008c4c165d10 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -3196,6 +3196,15 @@ public class ApplicationPackageManager extends PackageManager {
}
@Override
+ public String getContentCaptureServicePackageName() {
+ try {
+ return mPM.getContentCaptureServicePackageName();
+ } catch (RemoteException e) {
+ throw e.rethrowAsRuntimeException();
+ }
+ }
+
+ @Override
public boolean isPackageStateProtected(String packageName, int userId) {
try {
return mPM.isPackageStateProtected(packageName, userId);
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index 1d78e2c36cd3..af0b35757ddd 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -692,6 +692,8 @@ interface IPackageManager {
String getIncidentReportApproverPackageName();
+ String getContentCaptureServicePackageName();
+
boolean isPackageStateProtected(String packageName, int userId);
void sendDeviceCustomizationReadyBroadcast();
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 7509065a34b1..51b9e24c85d2 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -7458,6 +7458,18 @@ public abstract class PackageManager {
}
/**
+ * @return the system defined content capture package name, or null if there's none.
+ *
+ * @hide
+ */
+ @TestApi
+ @Nullable
+ public String getContentCaptureServicePackageName() {
+ throw new UnsupportedOperationException(
+ "getContentCaptureServicePackageName not implemented in subclass");
+ }
+
+ /**
* @return the incident report approver app package name, or null if it's not defined
* by the OEM.
*
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 15e76fb9971c..3c49afbec37a 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -19764,6 +19764,23 @@ public class PackageManagerService extends IPackageManager.Stub
}
@Override
+ public String getContentCaptureServicePackageName() {
+ final String flattenedContentCaptureService =
+ mContext.getString(R.string.config_defaultContentCaptureService);
+
+ if (TextUtils.isEmpty(flattenedContentCaptureService)) {
+ return null;
+ }
+
+ final ComponentName contentCaptureServiceComponentName =
+ ComponentName.unflattenFromString(flattenedContentCaptureService);
+ if (contentCaptureServiceComponentName == null) {
+ return null;
+ }
+ return contentCaptureServiceComponentName.getPackageName();
+ }
+
+ @Override
public void setApplicationEnabledSetting(String appPackageName,
int newState, int flags, int userId, String callingPackage) {
if (!mUserManager.exists(userId)) return;
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 f247037edf5c..603b01a17e14 100644
--- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
@@ -150,6 +150,12 @@ public final class DefaultPermissionGrantPolicy {
ALWAYS_LOCATION_PERMISSIONS.add(Manifest.permission.ACCESS_BACKGROUND_LOCATION);
}
+ private static final Set<String> COARSE_BACKGROUND_LOCATION_PERMISSIONS = new ArraySet<>();
+ static {
+ COARSE_BACKGROUND_LOCATION_PERMISSIONS.add(Manifest.permission.ACCESS_COARSE_LOCATION);
+ COARSE_BACKGROUND_LOCATION_PERMISSIONS.add(Manifest.permission.ACCESS_BACKGROUND_LOCATION);
+ }
+
private static final Set<String> ACTIVITY_RECOGNITION_PERMISSIONS = new ArraySet<>();
static {
ACTIVITY_RECOGNITION_PERMISSIONS.add(Manifest.permission.ACTIVITY_RECOGNITION);
@@ -724,8 +730,16 @@ public final class DefaultPermissionGrantPolicy {
mContext.getPackageManager().getSystemTextClassifierPackageName();
if (!TextUtils.isEmpty(textClassifierPackageName)) {
grantPermissionsToSystemPackage(textClassifierPackageName, userId,
- PHONE_PERMISSIONS, SMS_PERMISSIONS, CALENDAR_PERMISSIONS,
- ALWAYS_LOCATION_PERMISSIONS, CONTACTS_PERMISSIONS);
+ COARSE_BACKGROUND_LOCATION_PERMISSIONS, CONTACTS_PERMISSIONS);
+ }
+
+ // Content capture
+ String contentCapturePackageName =
+ mContext.getPackageManager().getContentCaptureServicePackageName();
+ if (!TextUtils.isEmpty(contentCapturePackageName)) {
+ grantPermissionsToSystemPackage(contentCapturePackageName, userId,
+ PHONE_PERMISSIONS, SMS_PERMISSIONS, ALWAYS_LOCATION_PERMISSIONS,
+ CONTACTS_PERMISSIONS);
}
// Atthention Service