Merge "[Wi-Fi] Control Wi-Fi Hotspot Settings using onClick instead of onSwitchToggled" into rvc-dev

This commit is contained in:
TreeHugger Robot
2020-03-07 17:16:05 +00:00
committed by Android (Google) Code Review
3 changed files with 28 additions and 31 deletions

View File

@@ -40,7 +40,6 @@ import com.android.settings.core.FeatureFlags;
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 @@ public class WifiTetherSettings extends RestrictedDashboardFragment
// 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();
}

View File

@@ -26,23 +26,27 @@ import android.net.ConnectivityManager;
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 @@ public class WifiTetherSwitchBarController implements SwitchWidgetController.OnS
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 @@ public class WifiTetherSwitchBarController implements SwitchWidgetController.OnS
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;
}

View File

@@ -32,10 +32,8 @@ import android.content.Context;
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 @@ public class WifiTetherSwitchBarControllerTest {
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 @@ public class WifiTetherSwitchBarControllerTest {
@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());