Merge change 1881 into donut

* changes:
  WifiService: Wifi power management change
This commit is contained in:
Android (Google) Code Review
2009-05-18 13:17:38 -07:00
2 changed files with 43 additions and 23 deletions

View File

@@ -1449,10 +1449,12 @@ public class WifiService extends IWifiManager.Stub {
Settings.System.getInt(mContext.getContentResolver(),
Settings.System.STAY_ON_WHILE_PLUGGED_IN, 0);
if (action.equals(Intent.ACTION_SCREEN_ON)) {
Log.d(TAG, "ACTION_SCREEN_ON");
mAlarmManager.cancel(mIdleIntent);
mDeviceIdle = false;
mScreenOff = false;
} else if (action.equals(Intent.ACTION_SCREEN_OFF)) {
Log.d(TAG, "ACTION_SCREEN_OFF");
mScreenOff = true;
/*
* Set a timer to put Wi-Fi to sleep, but only if the screen is off
@@ -1461,12 +1463,20 @@ public class WifiService extends IWifiManager.Stub {
* or plugged in to AC).
*/
if (!shouldWifiStayAwake(stayAwakeConditions, mPluggedType)) {
long triggerTime = System.currentTimeMillis() + idleMillis;
mAlarmManager.set(AlarmManager.RTC_WAKEUP, triggerTime, mIdleIntent);
if (!mWifiStateTracker.hasIpAddress()) {
// do not keep Wifi awake when screen is off if Wifi is not fully active
mDeviceIdle = true;
updateWifiState();
} else {
long triggerTime = System.currentTimeMillis() + idleMillis;
Log.d(TAG, "setting ACTION_DEVICE_IDLE timer for " + idleMillis + "ms");
mAlarmManager.set(AlarmManager.RTC_WAKEUP, triggerTime, mIdleIntent);
}
}
/* we can return now -- there's nothing to do until we get the idle intent back */
return;
} else if (action.equals(ACTION_DEVICE_IDLE)) {
Log.d(TAG, "got ACTION_DEVICE_IDLE");
mDeviceIdle = true;
} else if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
/*
@@ -1477,9 +1487,11 @@ public class WifiService extends IWifiManager.Stub {
* the already-set timer.
*/
int pluggedType = intent.getIntExtra("plugged", 0);
Log.d(TAG, "ACTION_BATTERY_CHANGED pluggedType: " + pluggedType);
if (mScreenOff && shouldWifiStayAwake(stayAwakeConditions, mPluggedType) &&
!shouldWifiStayAwake(stayAwakeConditions, pluggedType)) {
long triggerTime = System.currentTimeMillis() + idleMillis;
Log.d(TAG, "setting ACTION_DEVICE_IDLE timer for " + idleMillis + "ms");
mAlarmManager.set(AlarmManager.RTC_WAKEUP, triggerTime, mIdleIntent);
mPluggedType = pluggedType;
return;

View File

@@ -161,8 +161,8 @@ public class WifiStateTracker extends NetworkStateTracker {
private WifiInfo mWifiInfo;
private List<ScanResult> mScanResults;
private WifiManager mWM;
private boolean mHaveIPAddress;
private boolean mObtainingIPAddress;
private boolean mHaveIpAddress;
private boolean mObtainingIpAddress;
private boolean mTornDownByConnMgr;
/**
* A DISCONNECT event has been received, but processing it
@@ -303,8 +303,8 @@ public class WifiStateTracker extends NetworkStateTracker {
mWifiInfo = new WifiInfo();
mWifiMonitor = new WifiMonitor(this);
mHaveIPAddress = false;
mObtainingIPAddress = false;
mHaveIpAddress = false;
mObtainingIpAddress = false;
setTornDownByConnMgr(false);
mDisconnectPending = false;
mScanResults = new ArrayList<ScanResult>();
@@ -443,6 +443,14 @@ public class WifiStateTracker extends NetworkStateTracker {
return mWifiInfo.getSupplicantState() == SupplicantState.COMPLETED;
}
/**
* Report whether the Wi-Fi connection has successfully acquired an IP address.
* @return {@code true} if the Wi-Fi connection has been assigned an IP address.
*/
public boolean hasIpAddress() {
return mHaveIpAddress;
}
/**
* Send the tracker a notification that a user-entered password key
* may be incorrect (i.e., caused authentication to fail).
@@ -724,7 +732,7 @@ public class WifiStateTracker extends NetworkStateTracker {
intent.putExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, true);
mContext.sendBroadcast(intent);
}
if (supplState == SupplicantState.COMPLETED && mHaveIPAddress) {
if (supplState == SupplicantState.COMPLETED && mHaveIpAddress) {
setDetailedState(DetailedState.CONNECTED);
} else {
setDetailedState(WifiInfo.getDetailedStateOf(supplState));
@@ -783,8 +791,8 @@ public class WifiStateTracker extends NetworkStateTracker {
}
setDetailedState(DetailedState.DISCONNECTED);
setSupplicantState(SupplicantState.UNINITIALIZED);
mHaveIPAddress = false;
mObtainingIPAddress = false;
mHaveIpAddress = false;
mObtainingIpAddress = false;
if (died) {
mWM.setWifiEnabled(false);
}
@@ -954,7 +962,7 @@ public class WifiStateTracker extends NetworkStateTracker {
}
requestConnectionStatus(mWifiInfo);
if (!(result.state == DetailedState.CONNECTED &&
(!mHaveIPAddress || mDisconnectPending))) {
(!mHaveIpAddress || mDisconnectPending))) {
setDetailedState(result.state);
}
@@ -983,7 +991,7 @@ public class WifiStateTracker extends NetworkStateTracker {
mLastBssid = result.BSSID;
mLastSsid = mWifiInfo.getSSID();
mLastNetworkId = result.networkId;
if (mHaveIPAddress) {
if (mHaveIpAddress) {
setDetailedState(DetailedState.CONNECTED);
} else {
setDetailedState(DetailedState.OBTAINING_IPADDR);
@@ -1051,8 +1059,8 @@ public class WifiStateTracker extends NetworkStateTracker {
break;
}
mReconnectCount = 0;
mHaveIPAddress = true;
mObtainingIPAddress = false;
mHaveIpAddress = true;
mObtainingIpAddress = false;
mWifiInfo.setIpAddress(mDhcpInfo.ipAddress);
mLastSignalLevel = -1; // force update of signal strength
if (mNetworkInfo.getDetailedState() != DetailedState.CONNECTED) {
@@ -1078,9 +1086,9 @@ public class WifiStateTracker extends NetworkStateTracker {
// [ 0- 0] Interface configuration succeeded (1) or failed (0)
EventLog.writeEvent(EVENTLOG_INTERFACE_CONFIGURATION_STATE_CHANGED, 0);
mHaveIPAddress = false;
mHaveIpAddress = false;
mWifiInfo.setIpAddress(0);
mObtainingIPAddress = false;
mObtainingIpAddress = false;
synchronized(this) {
WifiNative.disconnectCommand();
}
@@ -1156,18 +1164,18 @@ public class WifiStateTracker extends NetworkStateTracker {
setPollTimer();
mLastSignalLevel = -1;
if (!mUseStaticIp) {
if (!mHaveIPAddress && !mObtainingIPAddress) {
mObtainingIPAddress = true;
if (!mHaveIpAddress && !mObtainingIpAddress) {
mObtainingIpAddress = true;
mDhcpTarget.sendEmptyMessage(EVENT_DHCP_START);
}
} else {
int event;
if (NetworkUtils.configureInterface(mInterfaceName, mDhcpInfo)) {
mHaveIPAddress = true;
mHaveIpAddress = true;
event = EVENT_INTERFACE_CONFIGURATION_SUCCEEDED;
if (LOCAL_LOGD) Log.v(TAG, "Static IP configuration succeeded");
} else {
mHaveIPAddress = false;
mHaveIpAddress = false;
event = EVENT_INTERFACE_CONFIGURATION_FAILED;
if (LOCAL_LOGD) Log.v(TAG, "Static IP configuration failed");
}
@@ -1200,8 +1208,8 @@ public class WifiStateTracker extends NetworkStateTracker {
* using the interface, stopping DHCP, and disabling the interface.
*/
public void resetInterface() {
mHaveIPAddress = false;
mObtainingIPAddress = false;
mHaveIpAddress = false;
mObtainingIpAddress = false;
mWifiInfo.setIpAddress(0);
/*
@@ -1612,8 +1620,8 @@ public class WifiStateTracker extends NetworkStateTracker {
}
sb.append(LS).append(mWifiInfo).append(LS);
sb.append(mDhcpInfo).append(LS);
sb.append("haveIpAddress=").append(mHaveIPAddress).
append(", obtainingIpAddress=").append(mObtainingIPAddress).
sb.append("haveIpAddress=").append(mHaveIpAddress).
append(", obtainingIpAddress=").append(mObtainingIpAddress).
append(", scanModeActive=").append(mIsScanModeActive).append(LS).
append("lastSignalLevel=").append(mLastSignalLevel).
append(", explicitlyDisabled=").append(mTornDownByConnMgr);