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
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java b/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java
index cad56e3..6f86ddd 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java
@@ -26,7 +26,6 @@
 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.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 @@
     @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 @@
     }
 
     @Override
-    public void onClick(View v) {
-        if (((Switch) v).isChecked()) {
+    public void onSwitchChanged(Switch switchView, boolean isChecked) {
+        if (isChecked) {
             startTether();
         } else {
             stopTether();
diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSwitchBarControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSwitchBarControllerTest.java
index b0bd8bc..a27743e 100644
--- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSwitchBarControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSwitchBarControllerTest.java
@@ -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 @@
     private ConnectivityManager mConnectivityManager;
     @Mock
     private NetworkPolicyManager mNetworkPolicyManager;
+    @Mock
+    private Switch mSwitch;
 
     private Context mContext;
     private SettingsMainSwitchBar mSwitchBar;
@@ -99,23 +100,20 @@
     }
 
     @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);
     }
 }