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

Commit b844a7a9 authored by Weng Su's avatar Weng Su
Browse files

Fix Wi-Fi hotspot switch UI issue

- The Wi-Fi hotspot switch only handles the click event from the UI.

- Use the onSwitchChanged callback to handle click and swipe events.

Bug: 218891956
Test: manual test
make RunSettingsRoboTests \
  ROBOTEST_FILTER=WifiTetherSwitchBarControllerTest

Change-Id: Ie4136443845489be295a8ee0f3058f493a3b5829
parent a12da0a8
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@ import android.net.ConnectivityManager;
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.widget.Switch;

import androidx.annotation.VisibleForTesting;
@@ -36,12 +35,13 @@ import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
import com.android.settingslib.widget.OnMainSwitchChangeListener;

/**
 * Controller for logic pertaining to switch Wi-Fi tethering.
 */
public class WifiTetherSwitchBarController implements
        LifecycleObserver, OnStart, OnStop, DataSaverBackend.Listener, View.OnClickListener {
        LifecycleObserver, OnStart, OnStop, DataSaverBackend.Listener, OnMainSwitchChangeListener {
    private static final IntentFilter WIFI_INTENT_FILTER;

    private final Context mContext;
@@ -82,7 +82,7 @@ public class WifiTetherSwitchBarController implements
    @Override
    public void onStart() {
        mDataSaverBackend.addListener(this);
        mSwitch.setOnClickListener(this);
        mSwitchBar.addOnSwitchChangeListener(this);
        mContext.registerReceiver(mReceiver, WIFI_INTENT_FILTER,
                Context.RECEIVER_EXPORTED_UNAUDITED);
    }
@@ -94,8 +94,8 @@ public class WifiTetherSwitchBarController implements
    }

    @Override
    public void onClick(View v) {
        if (((Switch) v).isChecked()) {
    public void onSwitchChanged(Switch switchView, boolean isChecked) {
        if (isChecked) {
            startTether();
        } else {
            stopTether();
+13 −15
Original line number Diff line number Diff line
@@ -16,15 +16,14 @@

package com.android.settings.wifi.tether;

import static android.net.ConnectivityManager.TETHERING_WIFI;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@@ -52,6 +51,8 @@ public class WifiTetherSwitchBarControllerTest {
    private ConnectivityManager mConnectivityManager;
    @Mock
    private NetworkPolicyManager mNetworkPolicyManager;
    @Mock
    private Switch mSwitch;

    private Context mContext;
    private SettingsMainSwitchBar mSwitchBar;
@@ -99,23 +100,20 @@ public class WifiTetherSwitchBarControllerTest {
    }

    @Test
    public void onSwitchToggled_switchOff_noStartTethering() {
        final Switch mockSwitch = mock(Switch.class);
        when(mockSwitch.isChecked()).thenReturn(false);
    public void onSwitchChanged_isChecked_startTethering() {
        when(mSwitch.isChecked()).thenReturn(true);

        mController.onClick(mockSwitch);
        mController.onSwitchChanged(mSwitch, mSwitch.isChecked());

        verify(mConnectivityManager, never()).startTethering(anyInt(), anyBoolean(), any(), any());
        verify(mConnectivityManager).startTethering(eq(TETHERING_WIFI), anyBoolean(), any(), any());
    }

    @Test
    public void onSwitchToggled_switchOn_startTethering() {
        final Switch mockSwitch = mock(Switch.class);
        when(mockSwitch.isChecked()).thenReturn(true);
    public void onSwitchChanged_isNotChecked_stopTethering() {
        when(mSwitch.isChecked()).thenReturn(false);

        mController.onClick(mockSwitch);
        mController.onSwitchChanged(mSwitch, mSwitch.isChecked());

        verify(mConnectivityManager, times(1))
                .startTethering(anyInt(), anyBoolean(), any(), any());
        verify(mConnectivityManager).stopTethering(TETHERING_WIFI);
    }
}