Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f702f1f3 authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change I1538dba4 into eclair

* changes:
  Make FWK start a wifi scan if supplicant forgets. (do not merge)
parents 076cb23a 1538dba4
Loading
Loading
Loading
Loading
+37 −0
Original line number Diff line number Diff line
@@ -90,6 +90,7 @@ public class WifiStateTracker extends NetworkStateTracker {
     */ 
    private static final int EVENT_DRIVER_STATE_CHANGED              = 12;
    private static final int EVENT_PASSWORD_KEY_MAY_BE_INCORRECT     = 13;
    private static final int EVENT_MAYBE_START_SCAN_POST_DISCONNECT  = 14;

    /**
     * Interval in milliseconds between polling for connection
@@ -125,6 +126,14 @@ public class WifiStateTracker extends NetworkStateTracker {
     */
    private static final int RECONNECT_DELAY_MSECS = 2000;

    /**
     * When the supplicant disconnects from an AP it sometimes forgets
     * to restart scanning.  Wait this delay before asking it to start
     * scanning (in case it forgot).  15 sec is the standard delay between
     * scans.
     */
    private static final int KICKSTART_SCANNING_DELAY_MSECS = 15000;

    /**
     * The maximum number of times we will retry a connection to an access point
     * for which we have failed in acquiring an IP address from DHCP. A value of
@@ -148,6 +157,14 @@ public class WifiStateTracker extends NetworkStateTracker {
     */
    private int mNumSupplicantLoopIterations = 0;

    /**
     * The current number of supplicant state changes.  This is used to determine
     * if we've received any new info since we found out it was DISCONNECTED or
     * INACTIVE.  If we haven't for X ms, we then request a scan - it should have
     * done that automatically, but sometimes some firmware does not.
     */
    private int mNumSupplicantStateChanges = 0;

    /**
     * True if we received an event that that a password-key may be incorrect.
     * If the next incoming supplicant state change event is DISCONNECT,
@@ -831,7 +848,16 @@ public class WifiStateTracker extends NetworkStateTracker {
                }
                break;

            case EVENT_MAYBE_START_SCAN_POST_DISCONNECT:
                // Only do this if we haven't gotten a new supplicant status since the timer
                // started
                if (mNumSupplicantStateChanges == msg.arg1) {
                    WifiNative.scanCommand(false); // do a passive scan
                }
                break;

            case EVENT_SUPPLICANT_STATE_CHANGED:
                mNumSupplicantStateChanges++;
                SupplicantStateChangeResult supplicantStateResult =
                    (SupplicantStateChangeResult) msg.obj;
                SupplicantState newState = supplicantStateResult.state;
@@ -849,6 +875,17 @@ public class WifiStateTracker extends NetworkStateTracker {

                int networkId = supplicantStateResult.networkId;

                /*
                 * If we get disconnect or inactive we need to start our
                 * watchdog timer to start a scan
                 */
                if (newState == SupplicantState.DISCONNECTED ||
                        newState == SupplicantState.INACTIVE) {
                    sendMessageDelayed(obtainMessage(EVENT_MAYBE_START_SCAN_POST_DISCONNECT,
                            mNumSupplicantStateChanges, 0), KICKSTART_SCANNING_DELAY_MSECS);
                }


                /*
                 * Did we get to DISCONNECTED state due to an
                 * authentication (password) failure?