summaryrefslogtreecommitdiffstats
path: root/wifi/java/android
diff options
context:
space:
mode:
authorIrfan Sheriff <isheriff@google.com>2012-05-25 10:31:46 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-05-25 10:31:46 -0700
commitda87c7c1eea9a054fd6842995df115113228191d (patch)
tree2bf5c10006c877fa15275f3169c2efe5c46e1965 /wifi/java/android
parent53210964673640166c8824c580344b06e8f8e28c (diff)
parentf48fb85a8c4f72ec08b98f15ec3d9c70c247de7d (diff)
downloadframeworks_base-da87c7c1eea9a054fd6842995df115113228191d.zip
frameworks_base-da87c7c1eea9a054fd6842995df115113228191d.tar.gz
frameworks_base-da87c7c1eea9a054fd6842995df115113228191d.tar.bz2
Merge "Fix delayed wifi shutdown" into jb-dev
Diffstat (limited to 'wifi/java/android')
-rw-r--r--wifi/java/android/net/wifi/WifiStateMachine.java28
1 files changed, 26 insertions, 2 deletions
diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java
index a0f3281..7f8f9ce 100644
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiStateMachine.java
@@ -209,6 +209,8 @@ public class WifiStateMachine extends StateMachine {
private AlarmManager mAlarmManager;
private PendingIntent mScanIntent;
+ private PendingIntent mDriverStopIntent;
+
/* Tracks current frequency mode */
private AtomicInteger mFrequencyBand = new AtomicInteger(WifiManager.WIFI_FREQUENCY_BAND_AUTO);
@@ -521,6 +523,11 @@ public class WifiStateMachine extends StateMachine {
private static final String ACTION_START_SCAN =
"com.android.server.WifiManager.action.START_SCAN";
+ private static final String DELAYED_STOP_COUNTER = "DelayedStopCounter";
+ private static final int DRIVER_STOP_REQUEST = 0;
+ private static final String ACTION_DELAYED_DRIVER_STOP =
+ "com.android.server.WifiManager.action.DELAYED_DRIVER_STOP";
+
/**
* Keep track of whether WIFI is running.
*/
@@ -641,6 +648,15 @@ public class WifiStateMachine extends StateMachine {
}
}
};
+ mContext.registerReceiver(
+ new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ int counter = intent.getIntExtra(DELAYED_STOP_COUNTER, 0);
+ sendMessage(obtainMessage(CMD_DELAYED_STOP_DRIVER, counter, 0));
+ }
+ },
+ new IntentFilter(ACTION_DELAYED_DRIVER_STOP));
mScanResultCache = new LruCache<String, ScanResult>(SCAN_RESULT_CACHE_SIZE);
@@ -2701,18 +2717,26 @@ public class WifiStateMachine extends StateMachine {
sendMessage(obtainMessage(CMD_DELAYED_STOP_DRIVER, mDelayedStopCounter, 0));
} else {
/* send regular delayed shut down */
- sendMessageDelayed(obtainMessage(CMD_DELAYED_STOP_DRIVER,
- mDelayedStopCounter, 0), mDriverStopDelayMs);
+ Intent driverStopIntent = new Intent(ACTION_DELAYED_DRIVER_STOP, null);
+ driverStopIntent.putExtra(DELAYED_STOP_COUNTER, mDelayedStopCounter);
+ mDriverStopIntent = PendingIntent.getBroadcast(mContext,
+ DRIVER_STOP_REQUEST, driverStopIntent,
+ PendingIntent.FLAG_UPDATE_CURRENT);
+
+ mAlarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
+ + mDriverStopDelayMs, mDriverStopIntent);
}
break;
case CMD_START_DRIVER:
if (mInDelayedStop) {
mInDelayedStop = false;
mDelayedStopCounter++;
+ mAlarmManager.cancel(mDriverStopIntent);
if (DBG) log("Delayed stop ignored due to start");
}
break;
case CMD_DELAYED_STOP_DRIVER:
+ if (DBG) log("delayed stop " + message.arg1 + " " + mDelayedStopCounter);
if (message.arg1 != mDelayedStopCounter) break;
if (getCurrentState() != mDisconnectedState) {
mWifiNative.disconnect();