Merge "[Wi-Fi] Control Wi-Fi Hotspot Settings using onClick instead of onSwitchToggled" into rvc-dev
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSettings.java b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
index 66d017a..3160609 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSettings.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
@@ -40,7 +40,6 @@
import com.android.settings.dashboard.RestrictedDashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SwitchBar;
-import com.android.settings.widget.SwitchBarController;
import com.android.settingslib.TetherUtil;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.search.SearchIndexable;
@@ -130,8 +129,7 @@
// SettingsActivity as base for all preference fragments.
final SettingsActivity activity = (SettingsActivity) getActivity();
final SwitchBar switchBar = activity.getSwitchBar();
- mSwitchBarController = new WifiTetherSwitchBarController(activity,
- new SwitchBarController(switchBar));
+ mSwitchBarController = new WifiTetherSwitchBarController(activity, switchBar);
getSettingsLifecycle().addObserver(mSwitchBarController);
switchBar.show();
}
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java b/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java
index 0f31d19..a7b6772 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java
@@ -26,23 +26,27 @@
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.os.Looper;
-import android.provider.Settings;
+import android.view.View;
+import android.widget.Switch;
import androidx.annotation.VisibleForTesting;
import com.android.settings.datausage.DataSaverBackend;
-import com.android.settings.widget.SwitchWidgetController;
+import com.android.settings.widget.SwitchBar;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
-public class WifiTetherSwitchBarController implements SwitchWidgetController.OnSwitchChangeListener,
- LifecycleObserver, OnStart, OnStop, DataSaverBackend.Listener {
-
+/**
+ * Controller for logic pertaining to switch Wi-Fi tethering.
+ */
+public class WifiTetherSwitchBarController implements
+ LifecycleObserver, OnStart, OnStop, DataSaverBackend.Listener, View.OnClickListener {
private static final IntentFilter WIFI_INTENT_FILTER;
private final Context mContext;
- private final SwitchWidgetController mSwitchBar;
+ private final SwitchBar mSwitchBar;
+ private final Switch mSwitch;
private final ConnectivityManager mConnectivityManager;
private final WifiManager mWifiManager;
@@ -63,40 +67,38 @@
WIFI_INTENT_FILTER = new IntentFilter(WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
}
- WifiTetherSwitchBarController(Context context, SwitchWidgetController switchBar) {
+ WifiTetherSwitchBarController(Context context, SwitchBar switchBar) {
mContext = context;
mSwitchBar = switchBar;
+ mSwitch = mSwitchBar.getSwitch();
mDataSaverBackend = new DataSaverBackend(context);
mConnectivityManager =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
mSwitchBar.setChecked(mWifiManager.getWifiApState() == WifiManager.WIFI_AP_STATE_ENABLED);
- mSwitchBar.setListener(this);
updateWifiSwitch();
}
@Override
public void onStart() {
mDataSaverBackend.addListener(this);
- mSwitchBar.startListening();
+ mSwitch.setOnClickListener(this);
mContext.registerReceiver(mReceiver, WIFI_INTENT_FILTER);
}
@Override
public void onStop() {
mDataSaverBackend.remListener(this);
- mSwitchBar.stopListening();
mContext.unregisterReceiver(mReceiver);
}
@Override
- public boolean onSwitchToggled(boolean isChecked) {
- if (!isChecked) {
- stopTether();
- } else if (!mWifiManager.isWifiApEnabled()) {
+ public void onClick(View v) {
+ if (mSwitch.isChecked()) {
startTether();
+ } else {
+ stopTether();
}
- return true;
}
void stopTether() {
@@ -128,23 +130,23 @@
mSwitchBar.setEnabled(false);
break;
case WifiManager.WIFI_AP_STATE_ENABLED:
- if (!mSwitchBar.isChecked()) {
- mSwitchBar.setChecked(true);
+ if (!mSwitch.isChecked()) {
+ mSwitch.setChecked(true);
}
updateWifiSwitch();
break;
case WifiManager.WIFI_AP_STATE_DISABLING:
- if (mSwitchBar.isChecked()) {
- mSwitchBar.setChecked(false);
+ if (mSwitch.isChecked()) {
+ mSwitch.setChecked(false);
}
mSwitchBar.setEnabled(false);
break;
case WifiManager.WIFI_AP_STATE_DISABLED:
- mSwitchBar.setChecked(false);
+ mSwitch.setChecked(false);
updateWifiSwitch();
break;
default:
- mSwitchBar.setChecked(false);
+ mSwitch.setChecked(false);
updateWifiSwitch();
break;
}
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 30358da..e05541c 100644
--- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSwitchBarControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSwitchBarControllerTest.java
@@ -32,10 +32,8 @@
import android.net.ConnectivityManager;
import android.net.NetworkPolicyManager;
import android.net.wifi.WifiManager;
-import android.provider.Settings;
import com.android.settings.widget.SwitchBar;
-import com.android.settings.widget.SwitchBarController;
import org.junit.Before;
import org.junit.Test;
@@ -70,10 +68,9 @@
when(mContext.getSystemService(Context.NETWORK_POLICY_SERVICE)).thenReturn(
mNetworkPolicyManager);
- mController = new WifiTetherSwitchBarController(mContext,
- new SwitchBarController(mSwitchBar));
+ mController = new WifiTetherSwitchBarController(mContext, mSwitchBar);
}
-
+
@Test
public void startTether_fail_resetSwitchBar() {
when(mNetworkPolicyManager.getRestrictBackground()).thenReturn(false);
@@ -103,12 +100,12 @@
@Test
public void onSwitchToggled_onlyStartsTetherWhenNeeded() {
when(mWifiManager.isWifiApEnabled()).thenReturn(true);
- mController.onSwitchToggled(true);
+ mController.onClick(mSwitchBar.getSwitch());
verify(mConnectivityManager, never()).startTethering(anyInt(), anyBoolean(), any(), any());
doReturn(false).when(mWifiManager).isWifiApEnabled();
- mController.onSwitchToggled(true);
+ mController.onClick(mSwitchBar.getSwitch());
verify(mConnectivityManager, times(1))
.startTethering(anyInt(), anyBoolean(), any(), any());