Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a2559ab1 authored by Antony Sargent's avatar Antony Sargent
Browse files

Prevent brief flash of "Error" in hotspot status text

When toggling the master preference to turn on wifi hotspot, it briefly
changes the status text to "Error" because we have a catch-all in a
function monitoring wifi state changes for unexpected status codes, and
we weren't expecting to see the status of WIFI_AP_STATE_ENABLING before
the status of WIFI_AP_STATE_ENABLED.

Bug: 64811203
Test: make RunSettingsRoboTests
Change-Id: Ifba7abadbfba9ce93cc524b17232c65570f0f428
parent adef5b23
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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
+30 −11
Original line number Diff line number Diff line
@@ -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,14 +169,26 @@ 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);
        receiveApStateChangedBroadcast(WifiManager.WIFI_AP_STATE_DISABLING);
        assertThat(mPreference.getSummary().toString()).isEqualTo(
                RuntimeEnvironment.application.getString(R.string.wifi_tether_stopping));
    }

        receiver.onReceive(RuntimeEnvironment.application, broadcast);
    @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_tether_stopping));
                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
@@ -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);
    }
}