summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--services/java/com/android/server/wifi/WifiService.java14
-rw-r--r--wifi/java/android/net/wifi/WifiStateMachine.java30
2 files changed, 41 insertions, 3 deletions
diff --git a/services/java/com/android/server/wifi/WifiService.java b/services/java/com/android/server/wifi/WifiService.java
index 8ddc776..66ef978 100644
--- a/services/java/com/android/server/wifi/WifiService.java
+++ b/services/java/com/android/server/wifi/WifiService.java
@@ -651,7 +651,12 @@ public final class WifiService extends IWifiManager.Stub {
Slog.i(TAG, "WifiService trying to set country code to " + countryCode +
" with persist set to " + persist);
enforceChangePermission();
- mWifiStateMachine.setCountryCode(countryCode, persist);
+ final long token = Binder.clearCallingIdentity();
+ try {
+ mWifiStateMachine.setCountryCode(countryCode, persist);
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
/**
@@ -668,7 +673,12 @@ public final class WifiService extends IWifiManager.Stub {
if (!isDualBandSupported()) return;
Slog.i(TAG, "WifiService trying to set frequency band to " + band +
" with persist set to " + persist);
- mWifiStateMachine.setFrequencyBand(band, persist);
+ final long token = Binder.clearCallingIdentity();
+ try {
+ mWifiStateMachine.setFrequencyBand(band, persist);
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java
index 0560077..3e3752e 100644
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiStateMachine.java
@@ -347,6 +347,8 @@ public class WifiStateMachine extends StateMachine {
public static final int CMD_DISABLE_P2P_REQ = BASE + 132;
public static final int CMD_DISABLE_P2P_RSP = BASE + 133;
+ public static final int CMD_BOOT_COMPLETED = BASE + 134;
+
public static final int CONNECT_MODE = 1;
public static final int SCAN_ONLY_MODE = 2;
public static final int SCAN_ONLY_WITH_WIFI_OFF_MODE = 3;
@@ -410,6 +412,10 @@ public class WifiStateMachine extends StateMachine {
private int mDelayedStopCounter;
private boolean mInDelayedStop = false;
+ // sometimes telephony gives us this data before boot is complete and we can't store it
+ // until after, so the write is deferred
+ private volatile String mPersistedCountryCode;
+
private static final int MIN_RSSI = -200;
private static final int MAX_RSSI = 256;
@@ -637,6 +643,15 @@ public class WifiStateMachine extends StateMachine {
}
});
+ mContext.registerReceiver(
+ new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ sendMessage(CMD_BOOT_COMPLETED);
+ }
+ },
+ new IntentFilter(Intent.ACTION_BOOT_COMPLETED));
+
mScanResultCache = new LruCache<String, ScanResult>(SCAN_RESULT_CACHE_SIZE);
PowerManager powerManager = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
@@ -1004,6 +1019,7 @@ public class WifiStateMachine extends StateMachine {
*/
public void setCountryCode(String countryCode, boolean persist) {
if (persist) {
+ mPersistedCountryCode = countryCode;
Settings.Global.putString(mContext.getContentResolver(),
Settings.Global.WIFI_COUNTRY_CODE,
countryCode);
@@ -1889,6 +1905,19 @@ public class WifiStateMachine extends StateMachine {
setSuspendOptimizations(SUSPEND_DUE_TO_HIGH_PERF, true);
}
break;
+ case CMD_BOOT_COMPLETED:
+ String countryCode = mPersistedCountryCode;
+ if (TextUtils.isEmpty(countryCode) == false) {
+ Settings.Global.putString(mContext.getContentResolver(),
+ Settings.Global.WIFI_COUNTRY_CODE,
+ countryCode);
+ // it may be that the state transition that should send this info
+ // to the driver happened between mPersistedCountryCode getting set
+ // and now, so simply persisting it here would mean we have sent
+ // nothing to the driver. Send the cmd so it might be set now.
+ sendMessageAtFrontOfQueue(CMD_SET_COUNTRY_CODE, countryCode);
+ }
+ break;
/* Discard */
case CMD_START_SUPPLICANT:
case CMD_STOP_SUPPLICANT:
@@ -2357,7 +2386,6 @@ public class WifiStateMachine extends StateMachine {
mInDelayedStop = false;
mDelayedStopCounter++;
updateBatteryWorkSource(null);
-
/**
* Enable bluetooth coexistence scan mode when bluetooth connection is active.
* When this mode is on, some of the low-level scan parameters used by the