diff options
3 files changed, 33 insertions, 5 deletions
diff --git a/service/java/com/android/server/wifi/WifiLastResortWatchdog.java b/service/java/com/android/server/wifi/WifiLastResortWatchdog.java index 896c1c816..558b50ef1 100644 --- a/service/java/com/android/server/wifi/WifiLastResortWatchdog.java +++ b/service/java/com/android/server/wifi/WifiLastResortWatchdog.java @@ -80,6 +80,8 @@ public class WifiLastResortWatchdog { private WifiMetrics mWifiMetrics; + private WifiController mWifiController = null; + WifiLastResortWatchdog(WifiMetrics wifiMetrics) { mWifiMetrics = wifiMetrics; } @@ -324,13 +326,21 @@ public class WifiLastResortWatchdog { } /** - * Restart Supplicant, Driver & return WifiStateMachine to InitialState + * Trigger a restart of the wifi stack. */ private void restartWifiStack() { if (VDBG) Log.v(TAG, "restartWifiStack."); - Log.i(TAG, "Triggered."); + + // First verify that we can send the trigger message. + if (mWifiController == null) { + Log.e(TAG, "WifiLastResortWatchdog unable to trigger: WifiController is null"); + return; + } + if (DBG) Log.d(TAG, toString()); - // <TODO> + + mWifiController.sendMessage(WifiController.CMD_RESTART_WIFI); + Log.i(TAG, "Triggered WiFi stack restart."); } /** @@ -537,4 +547,14 @@ public class WifiLastResortWatchdog { + ", Age: " + age; } } + + /** + * Method used to set the WifiController for the this watchdog. + * + * The WifiController is used to send the restart wifi command to carry out the wifi restart. + * @param wifiController WifiController instance that will be sent the CMD_RESTART_WIFI message. + */ + public void setWifiController(WifiController wifiController) { + mWifiController = wifiController; + } } diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java index 5b109138e..be24e49a9 100644 --- a/service/java/com/android/server/wifi/WifiServiceImpl.java +++ b/service/java/com/android/server/wifi/WifiServiceImpl.java @@ -346,6 +346,8 @@ public class WifiServiceImpl extends IWifiManager.Stub { mWifiStateMachineHandler = new WifiStateMachineHandler(wifiThread.getLooper()); mWifiController = new WifiController(mContext, mWifiStateMachine, mSettingsStore, mWifiLockManager, wifiThread.getLooper(), mFacade); + // Set the WifiController for WifiLastResortWatchdog + mWifiInjector.getWifiLastResortWatchdog().setWifiController(mWifiController); } diff --git a/tests/wifitests/src/com/android/server/wifi/WifiLastResortWatchdogTest.java b/tests/wifitests/src/com/android/server/wifi/WifiLastResortWatchdogTest.java index 64f1ce0fd..237fc666d 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiLastResortWatchdogTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiLastResortWatchdogTest.java @@ -19,6 +19,7 @@ package com.android.server.wifi; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.*; +import static org.mockito.MockitoAnnotations.*; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiSsid; @@ -27,6 +28,7 @@ import android.util.Pair; import org.junit.Before; import org.junit.Test; +import org.mockito.Mock; import java.util.ArrayList; import java.util.Arrays; @@ -38,7 +40,8 @@ import java.util.List; @SmallTest public class WifiLastResortWatchdogTest { WifiLastResortWatchdog mLastResortWatchdog; - WifiMetrics mWifiMetrics; + @Mock WifiMetrics mWifiMetrics; + @Mock WifiController mWifiController; private String[] mSsids = {"\"test1\"", "\"test2\"", "\"test3\"", "\"test4\""}; private String[] mBssids = {"6c:f3:7f:ae:8c:f3", "6c:f3:7f:ae:8c:f4", "de:ad:ba:b1:e5:55", "c0:ff:ee:ee:e3:ee"}; @@ -51,8 +54,9 @@ public class WifiLastResortWatchdogTest { @Before public void setUp() throws Exception { - mWifiMetrics = mock(WifiMetrics.class); + initMocks(this); mLastResortWatchdog = new WifiLastResortWatchdog(mWifiMetrics); + mLastResortWatchdog.setWifiController(mWifiController); } private List<Pair<ScanDetail, WifiConfiguration>> createFilteredQnsCandidates(String[] ssids, @@ -1276,6 +1280,8 @@ public class WifiLastResortWatchdogTest { ssids[ssids.length - 1], bssids[ssids.length - 1], WifiLastResortWatchdog.FAILURE_CODE_ASSOCIATION); assertEquals(true, watchdogTriggered); + verify(mWifiController).sendMessage(WifiController.CMD_RESTART_WIFI); + reset(mWifiController); } /** |