@@ -95,7 +95,7 @@ public class NetworkController extends BroadcastReceiver {
9595 final WifiManager mWifiManager ;
9696 AsyncChannel mWifiChannel ;
9797 boolean mWifiEnabled , mWifiConnected ;
98- int mWifiLevel ;
98+ int mWifiRssi , mWifiLevel ;
9999 String mWifiSsid ;
100100 int mWifiIconId = 0 ;
101101 int mWifiActivityIconId = 0 ; // overlay arrows for wifi direction
@@ -654,24 +654,29 @@ private void updateWifiState(Intent intent) {
654654 mWifiConnected = networkInfo != null && networkInfo .isConnected ();
655655 // If we just connected, grab the inintial signal strength and ssid
656656 if (mWifiConnected && !wasConnected ) {
657- WifiInfo info = mWifiManager .getConnectionInfo ();
657+ // try getting it out of the intent first
658+ WifiInfo info = (WifiInfo ) intent .getParcelableExtra (WifiManager .EXTRA_WIFI_INFO );
659+ if (info == null ) {
660+ info = mWifiManager .getConnectionInfo ();
661+ }
658662 if (info != null ) {
659- mWifiLevel = WifiManager .calculateSignalLevel (info .getRssi (),
660- WifiIcons .WIFI_LEVEL_COUNT );
661663 mWifiSsid = huntForSsid (info );
662664 } else {
663- mWifiLevel = 0 ;
664665 mWifiSsid = null ;
665666 }
666667 } else if (!mWifiConnected ) {
667- mWifiLevel = 0 ;
668668 mWifiSsid = null ;
669669 }
670-
670+ // Apparently the wifi level is not stable at this point even if we've just connected to
671+ // the network; we need to wait for an RSSI_CHANGED_ACTION for that. So let's just set
672+ // it to 0 for now
673+ mWifiLevel = 0 ;
674+ mWifiRssi = -200 ;
671675 } else if (action .equals (WifiManager .RSSI_CHANGED_ACTION )) {
672676 if (mWifiConnected ) {
673- final int newRssi = intent .getIntExtra (WifiManager .EXTRA_NEW_RSSI , -200 );
674- mWifiLevel = WifiManager .calculateSignalLevel (newRssi , WifiIcons .WIFI_LEVEL_COUNT );
677+ mWifiRssi = intent .getIntExtra (WifiManager .EXTRA_NEW_RSSI , -200 );
678+ mWifiLevel = WifiManager .calculateSignalLevel (
679+ mWifiRssi , WifiIcons .WIFI_LEVEL_COUNT );
675680 }
676681 }
677682
@@ -1031,6 +1036,8 @@ public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
10311036 pw .println (mWifiEnabled );
10321037 pw .print (" mWifiConnected=" );
10331038 pw .println (mWifiConnected );
1039+ pw .print (" mWifiRssi=" );
1040+ pw .println (mWifiRssi );
10341041 pw .print (" mWifiLevel=" );
10351042 pw .println (mWifiLevel );
10361043 pw .print (" mWifiSsid=" );
0 commit comments