Merge "[Wi-Fi] Control Wi-Fi Hotspot Settings using onClick instead of onSwitchToggled" into rvc-dev am: 29063e3779
am: ff11b08361
am: 241f426e36
am: dcbe174ab5
Change-Id: I3a449473066ae36f13cae1f36f9a2ace98836f83
This commit is contained in:
@@ -40,7 +40,6 @@ import com.android.settings.core.FeatureFlags;
|
|||||||
import com.android.settings.dashboard.RestrictedDashboardFragment;
|
import com.android.settings.dashboard.RestrictedDashboardFragment;
|
||||||
import com.android.settings.search.BaseSearchIndexProvider;
|
import com.android.settings.search.BaseSearchIndexProvider;
|
||||||
import com.android.settings.widget.SwitchBar;
|
import com.android.settings.widget.SwitchBar;
|
||||||
import com.android.settings.widget.SwitchBarController;
|
|
||||||
import com.android.settingslib.TetherUtil;
|
import com.android.settingslib.TetherUtil;
|
||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
import com.android.settingslib.search.SearchIndexable;
|
import com.android.settingslib.search.SearchIndexable;
|
||||||
@@ -130,8 +129,7 @@ public class WifiTetherSettings extends RestrictedDashboardFragment
|
|||||||
// SettingsActivity as base for all preference fragments.
|
// SettingsActivity as base for all preference fragments.
|
||||||
final SettingsActivity activity = (SettingsActivity) getActivity();
|
final SettingsActivity activity = (SettingsActivity) getActivity();
|
||||||
final SwitchBar switchBar = activity.getSwitchBar();
|
final SwitchBar switchBar = activity.getSwitchBar();
|
||||||
mSwitchBarController = new WifiTetherSwitchBarController(activity,
|
mSwitchBarController = new WifiTetherSwitchBarController(activity, switchBar);
|
||||||
new SwitchBarController(switchBar));
|
|
||||||
getSettingsLifecycle().addObserver(mSwitchBarController);
|
getSettingsLifecycle().addObserver(mSwitchBarController);
|
||||||
switchBar.show();
|
switchBar.show();
|
||||||
}
|
}
|
||||||
|
@@ -26,23 +26,27 @@ 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.provider.Settings;
|
import android.view.View;
|
||||||
|
import android.widget.Switch;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
import com.android.settings.datausage.DataSaverBackend;
|
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.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;
|
||||||
|
|
||||||
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 static final IntentFilter WIFI_INTENT_FILTER;
|
||||||
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final SwitchWidgetController mSwitchBar;
|
private final SwitchBar mSwitchBar;
|
||||||
|
private final Switch mSwitch;
|
||||||
private final ConnectivityManager mConnectivityManager;
|
private final ConnectivityManager mConnectivityManager;
|
||||||
private final WifiManager mWifiManager;
|
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);
|
WIFI_INTENT_FILTER = new IntentFilter(WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
WifiTetherSwitchBarController(Context context, SwitchWidgetController switchBar) {
|
WifiTetherSwitchBarController(Context context, SwitchBar switchBar) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mSwitchBar = switchBar;
|
mSwitchBar = switchBar;
|
||||||
|
mSwitch = mSwitchBar.getSwitch();
|
||||||
mDataSaverBackend = new DataSaverBackend(context);
|
mDataSaverBackend = new DataSaverBackend(context);
|
||||||
mConnectivityManager =
|
mConnectivityManager =
|
||||||
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
|
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
|
||||||
mSwitchBar.setChecked(mWifiManager.getWifiApState() == WifiManager.WIFI_AP_STATE_ENABLED);
|
mSwitchBar.setChecked(mWifiManager.getWifiApState() == WifiManager.WIFI_AP_STATE_ENABLED);
|
||||||
mSwitchBar.setListener(this);
|
|
||||||
updateWifiSwitch();
|
updateWifiSwitch();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart() {
|
public void onStart() {
|
||||||
mDataSaverBackend.addListener(this);
|
mDataSaverBackend.addListener(this);
|
||||||
mSwitchBar.startListening();
|
mSwitch.setOnClickListener(this);
|
||||||
mContext.registerReceiver(mReceiver, WIFI_INTENT_FILTER);
|
mContext.registerReceiver(mReceiver, WIFI_INTENT_FILTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStop() {
|
public void onStop() {
|
||||||
mDataSaverBackend.remListener(this);
|
mDataSaverBackend.remListener(this);
|
||||||
mSwitchBar.stopListening();
|
|
||||||
mContext.unregisterReceiver(mReceiver);
|
mContext.unregisterReceiver(mReceiver);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onSwitchToggled(boolean isChecked) {
|
public void onClick(View v) {
|
||||||
if (!isChecked) {
|
if (mSwitch.isChecked()) {
|
||||||
stopTether();
|
|
||||||
} else if (!mWifiManager.isWifiApEnabled()) {
|
|
||||||
startTether();
|
startTether();
|
||||||
|
} else {
|
||||||
|
stopTether();
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void stopTether() {
|
void stopTether() {
|
||||||
@@ -128,23 +130,23 @@ public class WifiTetherSwitchBarController implements SwitchWidgetController.OnS
|
|||||||
mSwitchBar.setEnabled(false);
|
mSwitchBar.setEnabled(false);
|
||||||
break;
|
break;
|
||||||
case WifiManager.WIFI_AP_STATE_ENABLED:
|
case WifiManager.WIFI_AP_STATE_ENABLED:
|
||||||
if (!mSwitchBar.isChecked()) {
|
if (!mSwitch.isChecked()) {
|
||||||
mSwitchBar.setChecked(true);
|
mSwitch.setChecked(true);
|
||||||
}
|
}
|
||||||
updateWifiSwitch();
|
updateWifiSwitch();
|
||||||
break;
|
break;
|
||||||
case WifiManager.WIFI_AP_STATE_DISABLING:
|
case WifiManager.WIFI_AP_STATE_DISABLING:
|
||||||
if (mSwitchBar.isChecked()) {
|
if (mSwitch.isChecked()) {
|
||||||
mSwitchBar.setChecked(false);
|
mSwitch.setChecked(false);
|
||||||
}
|
}
|
||||||
mSwitchBar.setEnabled(false);
|
mSwitchBar.setEnabled(false);
|
||||||
break;
|
break;
|
||||||
case WifiManager.WIFI_AP_STATE_DISABLED:
|
case WifiManager.WIFI_AP_STATE_DISABLED:
|
||||||
mSwitchBar.setChecked(false);
|
mSwitch.setChecked(false);
|
||||||
updateWifiSwitch();
|
updateWifiSwitch();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
mSwitchBar.setChecked(false);
|
mSwitch.setChecked(false);
|
||||||
updateWifiSwitch();
|
updateWifiSwitch();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -32,10 +32,8 @@ import android.content.Context;
|
|||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.NetworkPolicyManager;
|
import android.net.NetworkPolicyManager;
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.provider.Settings;
|
|
||||||
|
|
||||||
import com.android.settings.widget.SwitchBar;
|
import com.android.settings.widget.SwitchBar;
|
||||||
import com.android.settings.widget.SwitchBarController;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -70,8 +68,7 @@ public class WifiTetherSwitchBarControllerTest {
|
|||||||
when(mContext.getSystemService(Context.NETWORK_POLICY_SERVICE)).thenReturn(
|
when(mContext.getSystemService(Context.NETWORK_POLICY_SERVICE)).thenReturn(
|
||||||
mNetworkPolicyManager);
|
mNetworkPolicyManager);
|
||||||
|
|
||||||
mController = new WifiTetherSwitchBarController(mContext,
|
mController = new WifiTetherSwitchBarController(mContext, mSwitchBar);
|
||||||
new SwitchBarController(mSwitchBar));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -103,12 +100,12 @@ public class WifiTetherSwitchBarControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void onSwitchToggled_onlyStartsTetherWhenNeeded() {
|
public void onSwitchToggled_onlyStartsTetherWhenNeeded() {
|
||||||
when(mWifiManager.isWifiApEnabled()).thenReturn(true);
|
when(mWifiManager.isWifiApEnabled()).thenReturn(true);
|
||||||
mController.onSwitchToggled(true);
|
mController.onClick(mSwitchBar.getSwitch());
|
||||||
|
|
||||||
verify(mConnectivityManager, never()).startTethering(anyInt(), anyBoolean(), any(), any());
|
verify(mConnectivityManager, never()).startTethering(anyInt(), anyBoolean(), any(), any());
|
||||||
|
|
||||||
doReturn(false).when(mWifiManager).isWifiApEnabled();
|
doReturn(false).when(mWifiManager).isWifiApEnabled();
|
||||||
mController.onSwitchToggled(true);
|
mController.onClick(mSwitchBar.getSwitch());
|
||||||
|
|
||||||
verify(mConnectivityManager, times(1))
|
verify(mConnectivityManager, times(1))
|
||||||
.startTethering(anyInt(), anyBoolean(), any(), any());
|
.startTethering(anyInt(), anyBoolean(), any(), any());
|
||||||
|
Reference in New Issue
Block a user