From dcf03f39725deec68f644f6162fdfcc884dc9964 Mon Sep 17 00:00:00 2001 From: Jianzheng Zhou Date: Fri, 16 Nov 2012 13:45:20 +0800 Subject: Refactor getPersistedNetworkPreference Optimize for updating mNetworkPreference according to device's networkAttributes setting from overlay config.xml when connectivityservice start. Change-Id: I90286332d4f453038f1ddac7dd9d1265d96b4859 Signed-off-by: Jianzheng Zhou --- api/current.txt | 2 +- core/java/android/net/ConnectivityManager.java | 12 ++++++++++++ packages/SettingsProvider/res/values/defaults.xml | 2 -- .../android/providers/settings/DatabaseHelper.java | 3 --- .../com/android/server/ConnectivityService.java | 22 ++++++++++++++++------ 5 files changed, 29 insertions(+), 12 deletions(-) diff --git a/api/current.txt b/api/current.txt index e6e0560d991c..8f505ccdadce 100644 --- a/api/current.txt +++ b/api/current.txt @@ -12554,7 +12554,7 @@ package android.net { method public int stopUsingNetworkFeature(int, java.lang.String); field public static final deprecated java.lang.String ACTION_BACKGROUND_DATA_SETTING_CHANGED = "android.net.conn.BACKGROUND_DATA_SETTING_CHANGED"; field public static final java.lang.String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE"; - field public static final int DEFAULT_NETWORK_PREFERENCE = 1; // 0x1 + field public static final deprecated int DEFAULT_NETWORK_PREFERENCE = 1; // 0x1 field public static final java.lang.String EXTRA_EXTRA_INFO = "extraInfo"; field public static final java.lang.String EXTRA_IS_FAILOVER = "isFailover"; field public static final deprecated java.lang.String EXTRA_NETWORK_INFO = "networkInfo"; diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index 6ff1a339fb6c..cda9f77c0eaf 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -328,6 +328,18 @@ public class ConnectivityManager { /** {@hide} */ public static final int MAX_NETWORK_TYPE = TYPE_WIFI_P2P; + /** + * If you want to set the default network preference,you can directly + * change the networkAttributes array in framework's config.xml. + * + * @deprecated Since we support so many more networks now, the single + * network default network preference can't really express + * the heirarchy. Instead, the default is defined by the + * networkAttributes in config.xml. You can determine + * the current value by calling {@link getNetworkPreference()} + * from an App. + */ + @Deprecated public static final int DEFAULT_NETWORK_PREFERENCE = TYPE_WIFI; /** diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml index 94e2286a3ce3..282ea8ac5b6c 100644 --- a/packages/SettingsProvider/res/values/defaults.xml +++ b/packages/SettingsProvider/res/values/defaults.xml @@ -43,8 +43,6 @@ --> gps true - - 1 true true false diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java index 4e5fc3781c89..2c8c4a28ce24 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java @@ -2161,9 +2161,6 @@ public class DatabaseHelper extends SQLiteOpenHelper { loadBooleanSetting(stmt, Settings.Global.INSTALL_NON_MARKET_APPS, R.bool.def_install_non_market_apps); - loadIntegerSetting(stmt, Settings.Global.NETWORK_PREFERENCE, - R.integer.def_network_preference); - loadBooleanSetting(stmt, Settings.Global.USB_MASS_STORAGE_ENABLED, R.bool.def_usb_mass_storage_enabled); diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index 4c22ae8cb377..8c5ff04241db 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -412,8 +412,6 @@ public class ConnectivityService extends IConnectivityManager.Stub { ConnectivityManager.MAX_NETWORK_TYPE+1]; mCurrentLinkProperties = new LinkProperties[ConnectivityManager.MAX_NETWORK_TYPE+1]; - mNetworkPreference = getPersistedNetworkPreference(); - mRadioAttributes = new RadioAttributes[ConnectivityManager.MAX_RADIO_TYPE+1]; mNetConfigs = new NetworkConfig[ConnectivityManager.MAX_NETWORK_TYPE+1]; @@ -495,6 +493,21 @@ public class ConnectivityService extends IConnectivityManager.Stub { } } + // Update mNetworkPreference according to user mannually first then overlay config.xml + mNetworkPreference = getPersistedNetworkPreference(); + if (mNetworkPreference == -1) { + for (int n : mPriorityList) { + if (mNetConfigs[n].isDefault() && ConnectivityManager.isNetworkTypeValid(n)) { + mNetworkPreference = n; + break; + } + } + if (mNetworkPreference == -1) { + throw new IllegalStateException( + "You should set at least one default Network in config.xml!"); + } + } + mNetRequestersPids = new ArrayList[ConnectivityManager.MAX_NETWORK_TYPE+1]; for (int i : mPriorityList) { mNetRequestersPids[i] = new ArrayList(); @@ -726,11 +739,8 @@ public class ConnectivityService extends IConnectivityManager.Stub { final int networkPrefSetting = Settings.Global .getInt(cr, Settings.Global.NETWORK_PREFERENCE, -1); - if (networkPrefSetting != -1) { - return networkPrefSetting; - } - return ConnectivityManager.DEFAULT_NETWORK_PREFERENCE; + return networkPrefSetting; } /** -- cgit v1.2.3-59-g8ed1b