diff options
| author | 2019-11-08 01:51:15 +0000 | |
|---|---|---|
| committer | 2019-11-08 01:51:15 +0000 | |
| commit | 0ad8fe3b872687bcfcaf1367d8ec08fa69f3e594 (patch) | |
| tree | 7c4e758eb37e9992348c87f7390ac5b31484dc60 | |
| parent | 61d29f3953a50d69bf9154086337afa4de32bcb4 (diff) | |
| parent | fba3e88ef9a601af01f7aee375313b55c1cc5e54 (diff) | |
Merge "Grant permissions to ContentCapture and remove permission for TC."
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 |