From e56f2bb5ecae624e1b6573515f855a26f756aed5 Mon Sep 17 00:00:00 2001 From: Jeff Davidson Date: Wed, 5 Nov 2014 11:14:19 -0800 Subject: [PATCH] Allow apps with SCORE_NETWORKS to set the active scorer. This allows for a more streamlined UX in the current world, where scorer apps are trusted (by virtue of being in /system/priv-app). Trusted apps can continue to use the system dialog for consent, but they may also set the scorer directly, under the assumption that they are using their own consent UX to explain the feature to the user. Bug: 16577529 Change-Id: I2a6edb7f1f688aaacf9b0152fa1da1a88636c3dc --- core/java/android/net/NetworkScoreManager.java | 7 +++++-- .../java/com/android/server/NetworkScoreService.java | 11 ++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/core/java/android/net/NetworkScoreManager.java b/core/java/android/net/NetworkScoreManager.java index 03a20857fa6b8..a939ccee4ca7e 100644 --- a/core/java/android/net/NetworkScoreManager.java +++ b/core/java/android/net/NetworkScoreManager.java @@ -192,12 +192,15 @@ public class NetworkScoreManager { /** * Set the active scorer to a new package and clear existing scores. * + *

Should never be called directly without obtaining user consent. This can be done by using + * the {@link #ACTION_CHANGE_ACTIVE} broadcast, or using a custom configuration activity. + * * @return true if the operation succeeded, or false if the new package is not a valid scorer. * @throws SecurityException if the caller does not hold the - * {@link android.Manifest.permission#BROADCAST_NETWORK_PRIVILEGED} permission - * indicating that it can manage scorer applications. + * {@link android.Manifest.permission#SCORE_NETWORKS} permission. * @hide */ + @SystemApi public boolean setActiveScorer(String packageName) throws SecurityException { try { return mService.setActiveScorer(packageName); diff --git a/services/core/java/com/android/server/NetworkScoreService.java b/services/core/java/com/android/server/NetworkScoreService.java index bb91a14309ad4..738917fc39b2b 100644 --- a/services/core/java/com/android/server/NetworkScoreService.java +++ b/services/core/java/com/android/server/NetworkScoreService.java @@ -130,7 +130,16 @@ public class NetworkScoreService extends INetworkScoreService.Stub { @Override public boolean setActiveScorer(String packageName) { - mContext.enforceCallingOrSelfPermission(permission.BROADCAST_NETWORK_PRIVILEGED, TAG); + // TODO: For now, since SCORE_NETWORKS requires an app to be privileged, we allow such apps + // to directly set the scorer app rather than having to use the consent dialog. The + // assumption is that anyone bundling a scorer app with the system is trusted by the OEM to + // do the right thing and not enable this feature without explaining it to the user. + // In the future, should this API be opened to 3p apps, we will need to lock this down and + // figure out another way to streamline the UX. + + // mContext.enforceCallingOrSelfPermission(permission.BROADCAST_NETWORK_PRIVILEGED, TAG); + mContext.enforceCallingOrSelfPermission(permission.SCORE_NETWORKS, TAG); + return setScorerInternal(packageName); }