Merge "DO NOT MERGE Enable all networks on screen on" into gingerbread

This commit is contained in:
Irfan Sheriff
2010-08-21 11:45:47 -07:00
committed by Android (Google) Code Review
2 changed files with 43 additions and 0 deletions

View File

@ -171,6 +171,7 @@ public class WifiService extends IWifiManager.Stub {
private static final int MESSAGE_START_ACCESS_POINT = 6; private static final int MESSAGE_START_ACCESS_POINT = 6;
private static final int MESSAGE_STOP_ACCESS_POINT = 7; private static final int MESSAGE_STOP_ACCESS_POINT = 7;
private static final int MESSAGE_SET_CHANNELS = 8; private static final int MESSAGE_SET_CHANNELS = 8;
private static final int MESSAGE_ENABLE_NETWORKS = 9;
private final WifiHandler mWifiHandler; private final WifiHandler mWifiHandler;
@ -1663,6 +1664,12 @@ public class WifiService extends IWifiManager.Stub {
mDeviceIdle = false; mDeviceIdle = false;
mScreenOff = false; mScreenOff = false;
mWifiStateTracker.enableRssiPolling(true); mWifiStateTracker.enableRssiPolling(true);
/* DHCP or other temporary failures in the past can prevent
* a disabled network from being connected to, enable on screen on
*/
if (mWifiStateTracker.isAnyNetworkDisabled()) {
sendEnableNetworksMessage();
}
} else if (action.equals(Intent.ACTION_SCREEN_OFF)) { } else if (action.equals(Intent.ACTION_SCREEN_OFF)) {
Slog.d(TAG, "ACTION_SCREEN_OFF"); Slog.d(TAG, "ACTION_SCREEN_OFF");
mScreenOff = true; mScreenOff = true;
@ -1794,6 +1801,10 @@ public class WifiService extends IWifiManager.Stub {
uid, 0, wifiConfig).sendToTarget(); uid, 0, wifiConfig).sendToTarget();
} }
private void sendEnableNetworksMessage() {
Message.obtain(mWifiHandler, MESSAGE_ENABLE_NETWORKS).sendToTarget();
}
private void updateWifiState() { private void updateWifiState() {
// send a message so it's all serialized // send a message so it's all serialized
Message.obtain(mWifiHandler, MESSAGE_UPDATE_STATE, 0, 0).sendToTarget(); Message.obtain(mWifiHandler, MESSAGE_UPDATE_STATE, 0, 0).sendToTarget();
@ -1956,6 +1967,10 @@ public class WifiService extends IWifiManager.Stub {
setNumAllowedChannelsBlocking(msg.arg1, msg.arg2 == 1); setNumAllowedChannelsBlocking(msg.arg1, msg.arg2 == 1);
break; break;
case MESSAGE_ENABLE_NETWORKS:
mWifiStateTracker.enableAllNetworks(getConfiguredNetworks());
break;
} }
} }
} }

View File

@ -59,6 +59,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicBoolean;
/** /**
* Track the state of Wifi connectivity. All event handling is done here, * Track the state of Wifi connectivity. All event handling is done here,
@ -216,6 +217,9 @@ public class WifiStateTracker extends NetworkStateTracker {
private boolean mUseStaticIp = false; private boolean mUseStaticIp = false;
private int mReconnectCount; private int mReconnectCount;
/* Tracks if any network in the configuration is disabled */
private AtomicBoolean mIsAnyNetworkDisabled = new AtomicBoolean(false);
// used to store the (non-persisted) num determined during device boot // used to store the (non-persisted) num determined during device boot
// (from mcc or other phone info) before the driver is started. // (from mcc or other phone info) before the driver is started.
private int mNumAllowedChannels = 0; private int mNumAllowedChannels = 0;
@ -814,6 +818,7 @@ public class WifiStateTracker extends NetworkStateTracker {
mTornDownByConnMgr = false; mTornDownByConnMgr = false;
mLastBssid = null; mLastBssid = null;
mLastSsid = null; mLastSsid = null;
mIsAnyNetworkDisabled.set(false);
requestConnectionInfo(); requestConnectionInfo();
SupplicantState supplState = mWifiInfo.getSupplicantState(); SupplicantState supplState = mWifiInfo.getSupplicantState();
/** /**
@ -1585,6 +1590,10 @@ public class WifiStateTracker extends NetworkStateTracker {
mWifiState.set(wifiState); mWifiState.set(wifiState);
} }
public boolean isAnyNetworkDisabled() {
return mIsAnyNetworkDisabled.get();
}
/** /**
* The WifiNative interface functions are listed below. * The WifiNative interface functions are listed below.
* The only native call that is not synchronized on * The only native call that is not synchronized on
@ -1785,9 +1794,27 @@ public class WifiStateTracker extends NetworkStateTracker {
if (mWifiState.get() != WIFI_STATE_ENABLED) { if (mWifiState.get() != WIFI_STATE_ENABLED) {
return false; return false;
} }
if (disableOthers) mIsAnyNetworkDisabled.set(true);
return WifiNative.enableNetworkCommand(netId, disableOthers); return WifiNative.enableNetworkCommand(netId, disableOthers);
} }
/**
* Enable all networks
*
* @param networks list of configured networks
*/
public synchronized void enableAllNetworks(List<WifiConfiguration> networks) {
if (mWifiState.get() != WIFI_STATE_ENABLED) {
return;
}
mIsAnyNetworkDisabled.set(false);
for (WifiConfiguration config : networks) {
if (config.status == WifiConfiguration.Status.DISABLED) {
WifiNative.enableNetworkCommand(config.networkId, false);
}
}
}
/** /**
* Disable a network * Disable a network
* *
@ -1798,6 +1825,7 @@ public class WifiStateTracker extends NetworkStateTracker {
if (mWifiState.get() != WIFI_STATE_ENABLED) { if (mWifiState.get() != WIFI_STATE_ENABLED) {
return false; return false;
} }
mIsAnyNetworkDisabled.set(true);
return WifiNative.disableNetworkCommand(netId); return WifiNative.disableNetworkCommand(netId);
} }