Loading wifi/java/android/net/wifi/WifiStateTracker.java +31 −122 Original line number Diff line number Diff line Loading @@ -23,18 +23,6 @@ import static android.net.wifi.WifiManager.WIFI_STATE_ENABLING; import static android.net.wifi.WifiManager.WIFI_STATE_UNKNOWN; import android.app.ActivityManagerNative; import android.app.AlarmManager; import android.app.Notification; import android.app.PendingIntent; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothHeadset; import android.bluetooth.BluetoothA2dp; import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.ContentObserver; import android.net.NetworkInfo; import android.net.NetworkStateTracker; import android.net.DhcpInfo; Loading @@ -44,10 +32,8 @@ import android.net.NetworkInfo.DetailedState; import android.net.NetworkInfo.State; import android.os.Message; import android.os.Parcelable; import android.os.PowerManager; import android.os.Handler; import android.os.HandlerThread; import android.os.SystemClock; import android.os.SystemProperties; import android.os.Looper; import android.os.RemoteException; Loading @@ -58,6 +44,15 @@ import android.text.TextUtils; import android.util.EventLog; import android.util.Log; import android.util.Config; import android.app.Notification; import android.app.PendingIntent; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothHeadset; import android.bluetooth.BluetoothA2dp; import android.content.ContentResolver; import android.content.Intent; import android.content.Context; import android.database.ContentObserver; import com.android.internal.app.IBatteryStats; import java.net.UnknownHostException; Loading Loading @@ -96,16 +91,15 @@ public class WifiStateTracker extends NetworkStateTracker { private static final int EVENT_INTERFACE_CONFIGURATION_FAILED = 7; private static final int EVENT_POLL_INTERVAL = 8; private static final int EVENT_DHCP_START = 9; private static final int EVENT_DHCP_RENEW = 10; private static final int EVENT_DEFERRED_DISCONNECT = 11; private static final int EVENT_DEFERRED_RECONNECT = 12; private static final int EVENT_DEFERRED_DISCONNECT = 10; private static final int EVENT_DEFERRED_RECONNECT = 11; /** * The driver is started or stopped. The object will be the state: true for * started, false for stopped. */ private static final int EVENT_DRIVER_STATE_CHANGED = 13; private static final int EVENT_PASSWORD_KEY_MAY_BE_INCORRECT = 14; private static final int EVENT_MAYBE_START_SCAN_POST_DISCONNECT = 15; 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; /** * The driver state indication. Loading Loading @@ -224,15 +218,6 @@ public class WifiStateTracker extends NetworkStateTracker { private boolean mUseStaticIp = false; private int mReconnectCount; private AlarmManager mAlarmManager; private PendingIntent mDhcpRenewalIntent; private PowerManager.WakeLock mDhcpRenewWakeLock; private static final String WAKELOCK_TAG = "*wifi*"; private static final int DHCP_RENEW = 0; private static final String ACTION_DHCP_RENEW = "android.net.wifi.DHCP_RENEW"; /* Tracks if any network in the configuration is disabled */ private AtomicBoolean mIsAnyNetworkDisabled = new AtomicBoolean(false); Loading Loading @@ -400,27 +385,6 @@ public class WifiStateTracker extends NetworkStateTracker { mDhcpInfo = new DhcpInfo(); mRunState = RUN_STATE_STARTING; mAlarmManager = (AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE); Intent dhcpRenewalIntent = new Intent(ACTION_DHCP_RENEW, null); mDhcpRenewalIntent = PendingIntent.getBroadcast(mContext, DHCP_RENEW, dhcpRenewalIntent, 0); mContext.registerReceiver( new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { //DHCP renew if (mDhcpTarget != null) { Log.d(TAG, "Sending a DHCP renewal"); //acquire a 40s wakelock to finish DHCP renewal mDhcpRenewWakeLock.acquire(40000); mDhcpTarget.sendEmptyMessage(EVENT_DHCP_RENEW); } } },new IntentFilter(ACTION_DHCP_RENEW)); PowerManager powerManager = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE); mDhcpRenewWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_TAG); // Setting is in seconds NOTIFICATION_REPEAT_DELAY_MS = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY, 900) * 1000l; Loading Loading @@ -2424,7 +2388,7 @@ public class WifiStateTracker extends NetworkStateTracker { private class DhcpHandler extends Handler { private Handler mWifiStateTrackerHandler; private Handler mTarget; /** * Whether to skip the DHCP result callback to the target. For example, Loading @@ -2448,7 +2412,7 @@ public class WifiStateTracker extends NetworkStateTracker { public DhcpHandler(Looper looper, Handler target) { super(looper); mWifiStateTrackerHandler = target; mTarget = target; mBluetoothHeadset = new BluetoothHeadset(mContext, null); } Loading @@ -2458,7 +2422,7 @@ public class WifiStateTracker extends NetworkStateTracker { switch (msg.what) { case EVENT_DHCP_START: case EVENT_DHCP_RENEW: boolean modifiedBluetoothCoexistenceMode = false; int powerMode = DRIVER_POWER_MODE_AUTO; Loading Loading @@ -2500,70 +2464,14 @@ public class WifiStateTracker extends NetworkStateTracker { // A new request is being made, so assume we will callback mCancelCallback = false; } if (msg.what == EVENT_DHCP_START) { Log.d(TAG, "DHCP request started"); Log.d(TAG, "DhcpHandler: DHCP request started"); if (NetworkUtils.runDhcp(mInterfaceName, mDhcpInfo)) { event = EVENT_INTERFACE_CONFIGURATION_SUCCEEDED; Log.d(TAG, "DHCP succeeded with lease: " + mDhcpInfo.leaseDuration); //Do it a bit earlier than half the lease duration time //to beat the native DHCP client and avoid extra packets //48% for one hour lease time = 29 minutes mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + mDhcpInfo.leaseDuration * 480, //in milliseconds mDhcpRenewalIntent); } else { event = EVENT_INTERFACE_CONFIGURATION_FAILED; Log.e(TAG, "DHCP request failed: " + NetworkUtils.getDhcpError()); } synchronized (this) { if (!mCancelCallback) { mWifiStateTrackerHandler.sendEmptyMessage(event); } } } else if (msg.what == EVENT_DHCP_RENEW) { Log.d(TAG, "DHCP renewal started"); int oIp = mDhcpInfo.ipAddress; int oGw = mDhcpInfo.gateway; int oMsk = mDhcpInfo.netmask; int oDns1 = mDhcpInfo.dns1; int oDns2 = mDhcpInfo.dns2; if (NetworkUtils.runDhcpRenew(mInterfaceName, mDhcpInfo)) { Log.d(TAG, "DHCP renewal with lease: " + mDhcpInfo.leaseDuration); boolean changed = (oIp != mDhcpInfo.ipAddress || oGw != mDhcpInfo.gateway || oMsk != mDhcpInfo.netmask || oDns1 != mDhcpInfo.dns1 || oDns2 != mDhcpInfo.dns2); if (changed) { Log.d(TAG, "IP config change on renewal"); mWifiInfo.setIpAddress(mDhcpInfo.ipAddress); NetworkUtils.resetConnections(mInterfaceName); msg = mTarget.obtainMessage(EVENT_CONFIGURATION_CHANGED, mNetworkInfo); msg.sendToTarget(); } mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + mDhcpInfo.leaseDuration * 480, mDhcpRenewalIntent); if (LOCAL_LOGD) Log.v(TAG, "DhcpHandler: DHCP request succeeded"); } else { event = EVENT_INTERFACE_CONFIGURATION_FAILED; Log.d(TAG, "DHCP renewal failed: " + NetworkUtils.getDhcpError()); synchronized (this) { if (!mCancelCallback) { mWifiStateTrackerHandler.sendEmptyMessage(event); } } } Log.i(TAG, "DhcpHandler: DHCP request failed: " + NetworkUtils.getDhcpError()); } if (powerMode != DRIVER_POWER_MODE_ACTIVE) { Loading @@ -2576,15 +2484,17 @@ public class WifiStateTracker extends NetworkStateTracker { WifiNative.BLUETOOTH_COEXISTENCE_MODE_SENSE); } synchronized (this) { if (!mCancelCallback) { mTarget.sendEmptyMessage(event); } } break; } } public synchronized void setCancelCallback(boolean cancelCallback) { mCancelCallback = cancelCallback; if (cancelCallback) { mAlarmManager.cancel(mDhcpRenewalIntent); } } /** Loading @@ -2600,7 +2510,6 @@ public class WifiStateTracker extends NetworkStateTracker { int state = mBluetoothHeadset.getState(mBluetoothHeadset.getCurrentHeadset()); return state == BluetoothHeadset.STATE_DISCONNECTED; } } private void checkUseStaticIp() { Loading Loading
wifi/java/android/net/wifi/WifiStateTracker.java +31 −122 Original line number Diff line number Diff line Loading @@ -23,18 +23,6 @@ import static android.net.wifi.WifiManager.WIFI_STATE_ENABLING; import static android.net.wifi.WifiManager.WIFI_STATE_UNKNOWN; import android.app.ActivityManagerNative; import android.app.AlarmManager; import android.app.Notification; import android.app.PendingIntent; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothHeadset; import android.bluetooth.BluetoothA2dp; import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.ContentObserver; import android.net.NetworkInfo; import android.net.NetworkStateTracker; import android.net.DhcpInfo; Loading @@ -44,10 +32,8 @@ import android.net.NetworkInfo.DetailedState; import android.net.NetworkInfo.State; import android.os.Message; import android.os.Parcelable; import android.os.PowerManager; import android.os.Handler; import android.os.HandlerThread; import android.os.SystemClock; import android.os.SystemProperties; import android.os.Looper; import android.os.RemoteException; Loading @@ -58,6 +44,15 @@ import android.text.TextUtils; import android.util.EventLog; import android.util.Log; import android.util.Config; import android.app.Notification; import android.app.PendingIntent; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothHeadset; import android.bluetooth.BluetoothA2dp; import android.content.ContentResolver; import android.content.Intent; import android.content.Context; import android.database.ContentObserver; import com.android.internal.app.IBatteryStats; import java.net.UnknownHostException; Loading Loading @@ -96,16 +91,15 @@ public class WifiStateTracker extends NetworkStateTracker { private static final int EVENT_INTERFACE_CONFIGURATION_FAILED = 7; private static final int EVENT_POLL_INTERVAL = 8; private static final int EVENT_DHCP_START = 9; private static final int EVENT_DHCP_RENEW = 10; private static final int EVENT_DEFERRED_DISCONNECT = 11; private static final int EVENT_DEFERRED_RECONNECT = 12; private static final int EVENT_DEFERRED_DISCONNECT = 10; private static final int EVENT_DEFERRED_RECONNECT = 11; /** * The driver is started or stopped. The object will be the state: true for * started, false for stopped. */ private static final int EVENT_DRIVER_STATE_CHANGED = 13; private static final int EVENT_PASSWORD_KEY_MAY_BE_INCORRECT = 14; private static final int EVENT_MAYBE_START_SCAN_POST_DISCONNECT = 15; 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; /** * The driver state indication. Loading Loading @@ -224,15 +218,6 @@ public class WifiStateTracker extends NetworkStateTracker { private boolean mUseStaticIp = false; private int mReconnectCount; private AlarmManager mAlarmManager; private PendingIntent mDhcpRenewalIntent; private PowerManager.WakeLock mDhcpRenewWakeLock; private static final String WAKELOCK_TAG = "*wifi*"; private static final int DHCP_RENEW = 0; private static final String ACTION_DHCP_RENEW = "android.net.wifi.DHCP_RENEW"; /* Tracks if any network in the configuration is disabled */ private AtomicBoolean mIsAnyNetworkDisabled = new AtomicBoolean(false); Loading Loading @@ -400,27 +385,6 @@ public class WifiStateTracker extends NetworkStateTracker { mDhcpInfo = new DhcpInfo(); mRunState = RUN_STATE_STARTING; mAlarmManager = (AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE); Intent dhcpRenewalIntent = new Intent(ACTION_DHCP_RENEW, null); mDhcpRenewalIntent = PendingIntent.getBroadcast(mContext, DHCP_RENEW, dhcpRenewalIntent, 0); mContext.registerReceiver( new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { //DHCP renew if (mDhcpTarget != null) { Log.d(TAG, "Sending a DHCP renewal"); //acquire a 40s wakelock to finish DHCP renewal mDhcpRenewWakeLock.acquire(40000); mDhcpTarget.sendEmptyMessage(EVENT_DHCP_RENEW); } } },new IntentFilter(ACTION_DHCP_RENEW)); PowerManager powerManager = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE); mDhcpRenewWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_TAG); // Setting is in seconds NOTIFICATION_REPEAT_DELAY_MS = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY, 900) * 1000l; Loading Loading @@ -2424,7 +2388,7 @@ public class WifiStateTracker extends NetworkStateTracker { private class DhcpHandler extends Handler { private Handler mWifiStateTrackerHandler; private Handler mTarget; /** * Whether to skip the DHCP result callback to the target. For example, Loading @@ -2448,7 +2412,7 @@ public class WifiStateTracker extends NetworkStateTracker { public DhcpHandler(Looper looper, Handler target) { super(looper); mWifiStateTrackerHandler = target; mTarget = target; mBluetoothHeadset = new BluetoothHeadset(mContext, null); } Loading @@ -2458,7 +2422,7 @@ public class WifiStateTracker extends NetworkStateTracker { switch (msg.what) { case EVENT_DHCP_START: case EVENT_DHCP_RENEW: boolean modifiedBluetoothCoexistenceMode = false; int powerMode = DRIVER_POWER_MODE_AUTO; Loading Loading @@ -2500,70 +2464,14 @@ public class WifiStateTracker extends NetworkStateTracker { // A new request is being made, so assume we will callback mCancelCallback = false; } if (msg.what == EVENT_DHCP_START) { Log.d(TAG, "DHCP request started"); Log.d(TAG, "DhcpHandler: DHCP request started"); if (NetworkUtils.runDhcp(mInterfaceName, mDhcpInfo)) { event = EVENT_INTERFACE_CONFIGURATION_SUCCEEDED; Log.d(TAG, "DHCP succeeded with lease: " + mDhcpInfo.leaseDuration); //Do it a bit earlier than half the lease duration time //to beat the native DHCP client and avoid extra packets //48% for one hour lease time = 29 minutes mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + mDhcpInfo.leaseDuration * 480, //in milliseconds mDhcpRenewalIntent); } else { event = EVENT_INTERFACE_CONFIGURATION_FAILED; Log.e(TAG, "DHCP request failed: " + NetworkUtils.getDhcpError()); } synchronized (this) { if (!mCancelCallback) { mWifiStateTrackerHandler.sendEmptyMessage(event); } } } else if (msg.what == EVENT_DHCP_RENEW) { Log.d(TAG, "DHCP renewal started"); int oIp = mDhcpInfo.ipAddress; int oGw = mDhcpInfo.gateway; int oMsk = mDhcpInfo.netmask; int oDns1 = mDhcpInfo.dns1; int oDns2 = mDhcpInfo.dns2; if (NetworkUtils.runDhcpRenew(mInterfaceName, mDhcpInfo)) { Log.d(TAG, "DHCP renewal with lease: " + mDhcpInfo.leaseDuration); boolean changed = (oIp != mDhcpInfo.ipAddress || oGw != mDhcpInfo.gateway || oMsk != mDhcpInfo.netmask || oDns1 != mDhcpInfo.dns1 || oDns2 != mDhcpInfo.dns2); if (changed) { Log.d(TAG, "IP config change on renewal"); mWifiInfo.setIpAddress(mDhcpInfo.ipAddress); NetworkUtils.resetConnections(mInterfaceName); msg = mTarget.obtainMessage(EVENT_CONFIGURATION_CHANGED, mNetworkInfo); msg.sendToTarget(); } mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + mDhcpInfo.leaseDuration * 480, mDhcpRenewalIntent); if (LOCAL_LOGD) Log.v(TAG, "DhcpHandler: DHCP request succeeded"); } else { event = EVENT_INTERFACE_CONFIGURATION_FAILED; Log.d(TAG, "DHCP renewal failed: " + NetworkUtils.getDhcpError()); synchronized (this) { if (!mCancelCallback) { mWifiStateTrackerHandler.sendEmptyMessage(event); } } } Log.i(TAG, "DhcpHandler: DHCP request failed: " + NetworkUtils.getDhcpError()); } if (powerMode != DRIVER_POWER_MODE_ACTIVE) { Loading @@ -2576,15 +2484,17 @@ public class WifiStateTracker extends NetworkStateTracker { WifiNative.BLUETOOTH_COEXISTENCE_MODE_SENSE); } synchronized (this) { if (!mCancelCallback) { mTarget.sendEmptyMessage(event); } } break; } } public synchronized void setCancelCallback(boolean cancelCallback) { mCancelCallback = cancelCallback; if (cancelCallback) { mAlarmManager.cancel(mDhcpRenewalIntent); } } /** Loading @@ -2600,7 +2510,6 @@ public class WifiStateTracker extends NetworkStateTracker { int state = mBluetoothHeadset.getState(mBluetoothHeadset.getCurrentHeadset()); return state == BluetoothHeadset.STATE_DISCONNECTED; } } private void checkUseStaticIp() { Loading