From 0f80719a6f3c30619ad73a9f2452626ed5ef5bd0 Mon Sep 17 00:00:00 2001 From: Kang Li Date: Thu, 13 Apr 2017 09:17:07 -0700 Subject: [PATCH] Moved LRResolverRankerService to ExtServices, and added a permission to ensure that ResolverRankerServices are from trust sources. Test: manually shared images in Camera, and in PTP to confirm it works as expected. Change-Id: I3549292d424fec949e9115faea7a0c5bdec06e87 (cherry picked from commit 61cf4d145e3f899ff2ff4500c3e46ea2c39adaf3) --- api/system-current.txt | 2 ++ .../service/resolver/ResolverRankerService.java | 6 ++++++ .../android/internal/app/ResolverComparator.java | 8 ++++++++ core/res/AndroidManifest.xml | 16 ++++++++-------- data/etc/privapp-permissions-platform.xml | 4 ++++ packages/ExtServices/AndroidManifest.xml | 10 ++++++++++ .../resolver}/LRResolverRankerService.java | 2 +- 7 files changed, 39 insertions(+), 9 deletions(-) rename {core/java/com/android/internal/app => packages/ExtServices/src/android/ext/services/resolver}/LRResolverRankerService.java (99%) diff --git a/api/system-current.txt b/api/system-current.txt index 0cf4a8992e39d..814a871ced01c 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -174,6 +174,7 @@ package android { field public static final java.lang.String PERFORM_SIM_ACTIVATION = "android.permission.PERFORM_SIM_ACTIVATION"; field public static final deprecated java.lang.String PERSISTENT_ACTIVITY = "android.permission.PERSISTENT_ACTIVITY"; field public static final java.lang.String PROCESS_OUTGOING_CALLS = "android.permission.PROCESS_OUTGOING_CALLS"; + field public static final java.lang.String PROVIDE_RESOLVER_RANKER_SERVICE = "android.permission.PROVIDE_RESOLVER_RANKER_SERVICE"; field public static final java.lang.String PROVIDE_TRUST_AGENT = "android.permission.PROVIDE_TRUST_AGENT"; field public static final java.lang.String READ_CALENDAR = "android.permission.READ_CALENDAR"; field public static final java.lang.String READ_CALL_LOG = "android.permission.READ_CALL_LOG"; @@ -40767,6 +40768,7 @@ package android.service.resolver { method public void onPredictSharingProbabilities(java.util.List); method public void onTrainRankingModel(java.util.List, int); field public static final java.lang.String BIND_PERMISSION = "android.permission.BIND_RESOLVER_RANKER_SERVICE"; + field public static final java.lang.String HOLD_PERMISSION = "android.permission.PROVIDE_RESOLVER_RANKER_SERVICE"; field public static final java.lang.String SERVICE_INTERFACE = "android.service.resolver.ResolverRankerService"; } diff --git a/core/java/android/service/resolver/ResolverRankerService.java b/core/java/android/service/resolver/ResolverRankerService.java index 05067479bf45b..75233474415a3 100644 --- a/core/java/android/service/resolver/ResolverRankerService.java +++ b/core/java/android/service/resolver/ResolverRankerService.java @@ -64,6 +64,12 @@ public abstract class ResolverRankerService extends Service { @SdkConstant(SdkConstant.SdkConstantType.SERVICE_ACTION) public static final String SERVICE_INTERFACE = "android.service.resolver.ResolverRankerService"; + /** + * The permission that a service must hold. If the service does not hold the permission, the + * system will skip that service. + */ + public static final String HOLD_PERMISSION = "android.permission.PROVIDE_RESOLVER_RANKER_SERVICE"; + /** * The permission that a service must require to ensure that only Android system can bind to it. * If this permission is not enforced in the AndroidManifest of the service, the system will diff --git a/core/java/com/android/internal/app/ResolverComparator.java b/core/java/com/android/internal/app/ResolverComparator.java index 73b62a5fe60d7..54b9cd869f2d4 100644 --- a/core/java/com/android/internal/app/ResolverComparator.java +++ b/core/java/com/android/internal/app/ResolverComparator.java @@ -438,6 +438,14 @@ class ResolverComparator implements Comparator { + " in the manifest."); continue; } + if (PackageManager.PERMISSION_GRANTED != mPm.checkPermission( + ResolverRankerService.HOLD_PERMISSION, + resolveInfo.serviceInfo.packageName)) { + Log.w(TAG, "ResolverRankerService " + componentName + " does not hold" + + " permission " + ResolverRankerService.HOLD_PERMISSION + + " - this service will not be queried for ResolverComparator."); + continue; + } } catch (NameNotFoundException e) { Log.e(TAG, "Could not look up service " + componentName + "; component name not found"); diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 155a939b730ca..98d33af4e9e10 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -3160,6 +3160,14 @@ + + +