OSDN Git Service

Fix Wifi+Cell on boot after wifi in use.
authorRobert Greenwalt <robdroid@android.com>
Wed, 19 Aug 2009 18:45:32 +0000 (11:45 -0700)
committerRobert Greenwalt <robdroid@android.com>
Wed, 19 Aug 2009 23:34:41 +0000 (16:34 -0700)
The gist of it is: Ignore reconnect fail of default APN during boot.

A long path:
1 If wifi is started at boot it starts fast - before the PhoneService is available.
2 Wifi starts by failing - you get DISCONNECTED/Scanning events so CM starts the other default network (mobile).
3 Trying to restart mobile fails because the phone service isn't up yet.
4 The failure is noted and the net is marked as not-enabled.
5 The phone trys to auto-start the mobile network and succeeds, sending state-changed events
6 The CM ignores the state-changed events because the net isn't enabled (see 4).

The long term fix is to remove two-way state tracking from the MobileDataStateTracker and instead just consume the state fed to us in state-change events.
Near term fix is to not mark the default net disabled when we have failure (step 4) if the phone service isn't available.

core/java/android/net/MobileDataStateTracker.java

index 85ee1ca..c5d6e11 100644 (file)
@@ -316,6 +316,12 @@ public class MobileDataStateTracker extends NetworkStateTracker {
                 // no need to do anything - we're already due some status update intents
                 break;
             case Phone.APN_REQUEST_FAILED:
+                if (mPhoneService == null && mApnType == Phone.APN_TYPE_DEFAULT) {
+                    // on startup we may try to talk to the phone before it's ready
+                    // just leave mEnabled as it is for the default apn.
+                    return false;
+                }
+                // else fall through
             case Phone.APN_TYPE_NOT_AVAILABLE:
                 mEnabled = false;
                 break;