OSDN Git Service

Fix default scorer provisioning.
authorJeff Davidson <jpd@google.com>
Thu, 14 Aug 2014 23:47:23 +0000 (16:47 -0700)
committerJeff Davidson <jpd@google.com>
Thu, 14 Aug 2014 23:47:23 +0000 (16:47 -0700)
Use Settings.Global instead of SharedPreferences (which don't work) to
track whether we've run the one-time provisioning step of activating
the build-time configured default scorer.

Bug: 16980605
Change-Id: I093cdd6f4f1110960078a186191c4e02b5543d6a

core/java/android/provider/Settings.java
services/core/java/com/android/server/NetworkScoreService.java

index 55ba9e9..6e5c992 100644 (file)
@@ -6411,6 +6411,14 @@ public final class Settings {
         public static final String GUEST_USER_ENABLED = "guest_user_enabled";
 
         /**
+         * Whether the NetworkScoringService has been first initialized.
+         * <p>
+         * Type: int (0 for false, 1 for true)
+         * @hide
+         */
+        public static final String NETWORK_SCORING_PROVISIONED = "network_scoring_provisioned";
+
+        /**
          * Settings to backup. This is here so that it's in the same place as the settings
          * keys and easy to update.
          *
index ab4d4dc..395e365 100644 (file)
@@ -17,9 +17,9 @@
 package com.android.server;
 
 import android.Manifest.permission;
+import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
-import android.content.SharedPreferences;
 import android.content.pm.PackageManager;
 import android.net.INetworkScoreCache;
 import android.net.INetworkScoreService;
@@ -30,6 +30,7 @@ import android.net.ScoredNetwork;
 import android.os.Binder;
 import android.os.RemoteException;
 import android.os.UserHandle;
+import android.provider.Settings;
 import android.text.TextUtils;
 import android.util.Log;
 
@@ -51,9 +52,6 @@ import java.util.Set;
 public class NetworkScoreService extends INetworkScoreService.Stub {
     private static final String TAG = "NetworkScoreService";
 
-    /** SharedPreference bit set to true after the service is first initialized. */
-    private static final String PREF_SCORING_PROVISIONED = "is_provisioned";
-
     private final Context mContext;
 
     private final Map<Integer, INetworkScoreCache> mScoreCaches;
@@ -65,8 +63,8 @@ public class NetworkScoreService extends INetworkScoreService.Stub {
 
     /** Called when the system is ready to run third-party code but before it actually does so. */
     void systemReady() {
-        SharedPreferences prefs = mContext.getSharedPreferences(TAG, Context.MODE_PRIVATE);
-        if (!prefs.getBoolean(PREF_SCORING_PROVISIONED, false)) {
+        ContentResolver cr = mContext.getContentResolver();
+        if (Settings.Global.getInt(cr, Settings.Global.NETWORK_SCORING_PROVISIONED, 0) == 0) {
             // On first run, we try to initialize the scorer to the one configured at build time.
             // This will be a no-op if the scorer isn't actually valid.
             String defaultPackage = mContext.getResources().getString(
@@ -74,7 +72,7 @@ public class NetworkScoreService extends INetworkScoreService.Stub {
             if (!TextUtils.isEmpty(defaultPackage)) {
                 NetworkScorerAppManager.setActiveScorer(mContext, defaultPackage);
             }
-            prefs.edit().putBoolean(PREF_SCORING_PROVISIONED, true).apply();
+            Settings.Global.putInt(cr, Settings.Global.NETWORK_SCORING_PROVISIONED, 1);
         }
     }