Merge "Prevent brief flash of "Error" in hotspot status text" into oc-mr1-dev
am: bc6dc5c20c

Change-Id: I64d32e5ac1724ff4c79f1ea4516fa83492a39377
diff --git a/src/com/android/settings/wifi/tether/WifiTetherPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherPreferenceController.java
index afc3a29..87adf73 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherPreferenceController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherPreferenceController.java
@@ -139,6 +139,7 @@
 
     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 860a914..a23347a 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 @@
     @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,17 +169,29 @@
     @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);
         when(mContext.getContentResolver()).thenReturn(cr);
@@ -248,4 +255,16 @@
             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);
+    }
 }