diff --git a/src/com/android/settings/wifi/tether/WifiTetherPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherPreferenceController.java index afc3a29909d..87adf73f561 100644 --- a/src/com/android/settings/wifi/tether/WifiTetherPreferenceController.java +++ b/src/com/android/settings/wifi/tether/WifiTetherPreferenceController.java @@ -139,6 +139,7 @@ public class WifiTetherPreferenceController extends AbstractPreferenceController private void handleWifiApStateChanged(int state, int reason) { switch (state) { + case WifiManager.WIFI_AP_STATE_ENABLING: case WifiManager.WIFI_AP_STATE_ENABLED: /** * Summary on enable is handled by tether diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPreferenceControllerTest.java index 860a9148d1f..a23347abbbc 100644 --- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPreferenceControllerTest.java @@ -161,12 +161,7 @@ public class WifiTetherPreferenceControllerTest { @Test public void testReceiver_apStateChangedToDisabled_shouldUpdatePreferenceSummary() { mController.displayPreference(mScreen); - final BroadcastReceiver receiver = ReflectionHelpers.getField(mController, "mReceiver"); - final Intent broadcast = new Intent(WifiManager.WIFI_AP_STATE_CHANGED_ACTION); - broadcast.putExtra(WifiManager.EXTRA_WIFI_AP_STATE, WifiManager.WIFI_AP_STATE_DISABLED); - - receiver.onReceive(RuntimeEnvironment.application, broadcast); - + receiveApStateChangedBroadcast(WifiManager.WIFI_AP_STATE_DISABLED); assertThat(mPreference.getSummary().toString()).isEqualTo( RuntimeEnvironment.application.getString(R.string.wifi_hotspot_off_subtext)); } @@ -174,16 +169,28 @@ public class WifiTetherPreferenceControllerTest { @Test public void testReceiver_apStateChangedToDisabling_shouldUpdatePreferenceSummary() { mController.displayPreference(mScreen); - final BroadcastReceiver receiver = ReflectionHelpers.getField(mController, "mReceiver"); - final Intent broadcast = new Intent(WifiManager.WIFI_AP_STATE_CHANGED_ACTION); - broadcast.putExtra(WifiManager.EXTRA_WIFI_AP_STATE, WifiManager.WIFI_AP_STATE_DISABLING); - - receiver.onReceive(RuntimeEnvironment.application, broadcast); - + receiveApStateChangedBroadcast(WifiManager.WIFI_AP_STATE_DISABLING); assertThat(mPreference.getSummary().toString()).isEqualTo( RuntimeEnvironment.application.getString(R.string.wifi_tether_stopping)); } + @Test + public void testReceiver_apStateChangedToEnablingOrEnabled_shouldNotUpdatePreferenceSummary() { + mController.displayPreference(mScreen); + receiveApStateChangedBroadcast(WifiManager.WIFI_AP_STATE_DISABLED); + assertThat(mPreference.getSummary().toString()).isEqualTo( + RuntimeEnvironment.application.getString(R.string.wifi_hotspot_off_subtext)); + + // When turning on the hotspot, we receive STATE_ENABLING followed by STATE_ENABLED. Neither + // of these should change the summary. + receiveApStateChangedBroadcast(WifiManager.WIFI_AP_STATE_ENABLING); + assertThat(mPreference.getSummary().toString()).isEqualTo( + RuntimeEnvironment.application.getString(R.string.wifi_hotspot_off_subtext)); + receiveApStateChangedBroadcast(WifiManager.WIFI_AP_STATE_ENABLED); + assertThat(mPreference.getSummary().toString()).isEqualTo( + RuntimeEnvironment.application.getString(R.string.wifi_hotspot_off_subtext)); + } + @Test public void testReceiver_goingToAirplaneMode_shouldClearPreferenceSummary() { final ContentResolver cr = mock(ContentResolver.class); @@ -248,4 +255,16 @@ public class WifiTetherPreferenceControllerTest { onStopCalled = true; } } + + /** + * Helper to cause the controller to receive a WIFI_AP_STATE_CHANGED_ACTION with a specific + * state. + * @param state - the state, as specified by one of the WifiManager.WIFI_AP_STATE_* values + */ + private void receiveApStateChangedBroadcast(int state) { + final BroadcastReceiver receiver = ReflectionHelpers.getField(mController, "mReceiver"); + final Intent broadcast = new Intent(WifiManager.WIFI_AP_STATE_CHANGED_ACTION); + broadcast.putExtra(WifiManager.EXTRA_WIFI_AP_STATE, state); + receiver.onReceive(RuntimeEnvironment.application, broadcast); + } }