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
This commit is contained in:
@@ -26,7 +26,6 @@ import android.net.ConnectivityManager;
|
|||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.view.View;
|
|
||||||
import android.widget.Switch;
|
import android.widget.Switch;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
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.LifecycleObserver;
|
||||||
import com.android.settingslib.core.lifecycle.events.OnStart;
|
import com.android.settingslib.core.lifecycle.events.OnStart;
|
||||||
import com.android.settingslib.core.lifecycle.events.OnStop;
|
import com.android.settingslib.core.lifecycle.events.OnStop;
|
||||||
|
import com.android.settingslib.widget.OnMainSwitchChangeListener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Controller for logic pertaining to switch Wi-Fi tethering.
|
* Controller for logic pertaining to switch Wi-Fi tethering.
|
||||||
*/
|
*/
|
||||||
public class WifiTetherSwitchBarController implements
|
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 static final IntentFilter WIFI_INTENT_FILTER;
|
||||||
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
@@ -82,7 +82,7 @@ public class WifiTetherSwitchBarController implements
|
|||||||
@Override
|
@Override
|
||||||
public void onStart() {
|
public void onStart() {
|
||||||
mDataSaverBackend.addListener(this);
|
mDataSaverBackend.addListener(this);
|
||||||
mSwitch.setOnClickListener(this);
|
mSwitchBar.addOnSwitchChangeListener(this);
|
||||||
mContext.registerReceiver(mReceiver, WIFI_INTENT_FILTER,
|
mContext.registerReceiver(mReceiver, WIFI_INTENT_FILTER,
|
||||||
Context.RECEIVER_EXPORTED_UNAUDITED);
|
Context.RECEIVER_EXPORTED_UNAUDITED);
|
||||||
}
|
}
|
||||||
@@ -94,8 +94,8 @@ public class WifiTetherSwitchBarController implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onSwitchChanged(Switch switchView, boolean isChecked) {
|
||||||
if (((Switch) v).isChecked()) {
|
if (isChecked) {
|
||||||
startTether();
|
startTether();
|
||||||
} else {
|
} else {
|
||||||
stopTether();
|
stopTether();
|
||||||
|
@@ -16,15 +16,14 @@
|
|||||||
|
|
||||||
package com.android.settings.wifi.tether;
|
package com.android.settings.wifi.tether;
|
||||||
|
|
||||||
|
import static android.net.ConnectivityManager.TETHERING_WIFI;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
import static org.mockito.Mockito.never;
|
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.times;
|
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
@@ -52,6 +51,8 @@ public class WifiTetherSwitchBarControllerTest {
|
|||||||
private ConnectivityManager mConnectivityManager;
|
private ConnectivityManager mConnectivityManager;
|
||||||
@Mock
|
@Mock
|
||||||
private NetworkPolicyManager mNetworkPolicyManager;
|
private NetworkPolicyManager mNetworkPolicyManager;
|
||||||
|
@Mock
|
||||||
|
private Switch mSwitch;
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private SettingsMainSwitchBar mSwitchBar;
|
private SettingsMainSwitchBar mSwitchBar;
|
||||||
@@ -99,23 +100,20 @@ public class WifiTetherSwitchBarControllerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onSwitchToggled_switchOff_noStartTethering() {
|
public void onSwitchChanged_isChecked_startTethering() {
|
||||||
final Switch mockSwitch = mock(Switch.class);
|
when(mSwitch.isChecked()).thenReturn(true);
|
||||||
when(mockSwitch.isChecked()).thenReturn(false);
|
|
||||||
|
|
||||||
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
|
@Test
|
||||||
public void onSwitchToggled_switchOn_startTethering() {
|
public void onSwitchChanged_isNotChecked_stopTethering() {
|
||||||
final Switch mockSwitch = mock(Switch.class);
|
when(mSwitch.isChecked()).thenReturn(false);
|
||||||
when(mockSwitch.isChecked()).thenReturn(true);
|
|
||||||
|
|
||||||
mController.onClick(mockSwitch);
|
mController.onSwitchChanged(mSwitch, mSwitch.isChecked());
|
||||||
|
|
||||||
verify(mConnectivityManager, times(1))
|
verify(mConnectivityManager).stopTethering(TETHERING_WIFI);
|
||||||
.startTethering(anyInt(), anyBoolean(), any(), any());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user