summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/net/NetworkScorerAppManager.java37
1 files changed, 32 insertions, 5 deletions
diff --git a/core/java/android/net/NetworkScorerAppManager.java b/core/java/android/net/NetworkScorerAppManager.java
index e555fa412a5b..29291ca90467 100644
--- a/core/java/android/net/NetworkScorerAppManager.java
+++ b/core/java/android/net/NetworkScorerAppManager.java
@@ -19,11 +19,9 @@ package android.net;
import android.Manifest;
import android.Manifest.permission;
import android.annotation.Nullable;
-import android.app.AppOpsManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
-import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.UserHandle;
@@ -69,12 +67,32 @@ public final class NetworkScorerAppManager {
*/
public final String mConfigurationActivityClassName;
+ /**
+ * Optional class name of the scoring service we can bind to. Null if none is set.
+ */
+ public final String mScoringServiceClassName;
+
public NetworkScorerAppData(String packageName, int packageUid, CharSequence scorerName,
- @Nullable String configurationActivityClassName) {
+ @Nullable String configurationActivityClassName,
+ @Nullable String scoringServiceClassName) {
mScorerName = scorerName;
mPackageName = packageName;
mPackageUid = packageUid;
mConfigurationActivityClassName = configurationActivityClassName;
+ mScoringServiceClassName = scoringServiceClassName;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder("NetworkScorerAppData{");
+ sb.append("mPackageName='").append(mPackageName).append('\'');
+ sb.append(", mPackageUid=").append(mPackageUid);
+ sb.append(", mScorerName=").append(mScorerName);
+ sb.append(", mConfigurationActivityClassName='").append(mConfigurationActivityClassName)
+ .append('\'');
+ sb.append(", mScoringServiceClassName='").append(mScoringServiceClassName).append('\'');
+ sb.append('}');
+ return sb.toString();
}
}
@@ -128,18 +146,27 @@ public final class NetworkScorerAppManager {
Intent intent = new Intent(NetworkScoreManager.ACTION_CUSTOM_ENABLE);
intent.setPackage(receiverInfo.packageName);
List<ResolveInfo> configActivities = pm.queryIntentActivities(intent, 0 /* flags */);
- if (!configActivities.isEmpty()) {
+ if (configActivities != null && !configActivities.isEmpty()) {
ActivityInfo activityInfo = configActivities.get(0).activityInfo;
if (activityInfo != null) {
configurationActivityClassName = activityInfo.name;
}
}
+ // Find the scoring service class we can bind to, if any.
+ String scoringServiceClassName = null;
+ Intent serviceIntent = new Intent(NetworkScoreManager.ACTION_SCORE_NETWORKS);
+ serviceIntent.setPackage(receiverInfo.packageName);
+ ResolveInfo resolveServiceInfo = pm.resolveService(serviceIntent, 0 /* flags */);
+ if (resolveServiceInfo != null && resolveServiceInfo.serviceInfo != null) {
+ scoringServiceClassName = resolveServiceInfo.serviceInfo.name;
+ }
+
// NOTE: loadLabel will attempt to load the receiver's label and fall back to the
// app label if none is present.
scorers.add(new NetworkScorerAppData(receiverInfo.packageName,
receiverInfo.applicationInfo.uid, receiverInfo.loadLabel(pm),
- configurationActivityClassName));
+ configurationActivityClassName, scoringServiceClassName));
}
return scorers;