Merge "Shutdown secondary SAP automatically" into udc-d1-dev am: 57522f0fcc am: f47dbe3bae

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/23680143

Change-Id: I37b5082e932c4141dcb3b277c84b096d93ffb3db
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Treehugger Robot
2023-06-14 04:51:15 +00:00
committed by Automerger Merge Worker
2 changed files with 59 additions and 7 deletions

View File

@@ -20,19 +20,29 @@ import android.content.Context;
import android.net.wifi.SoftApConfiguration;
import android.net.wifi.WifiManager;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.SwitchPreference;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.wifi.repository.WifiHotspotRepository;
public class WifiTetherAutoOffPreferenceController extends BasePreferenceController implements
Preference.OnPreferenceChangeListener {
private final WifiManager mWifiManager;
private boolean mSettingsOn;
@VisibleForTesting
boolean mNeedShutdownSecondarySap;
public WifiTetherAutoOffPreferenceController(Context context, String preferenceKey) {
super(context, preferenceKey);
WifiHotspotRepository wifiHotspotRepository = FeatureFactory.getFactory(context)
.getWifiFeatureProvider().getWifiHotspotRepository();
if (wifiHotspotRepository.isSpeedFeatureAvailable() && wifiHotspotRepository.isDualBand()) {
mNeedShutdownSecondarySap = true;
}
mWifiManager = context.getSystemService(WifiManager.class);
}
@@ -51,14 +61,15 @@ public class WifiTetherAutoOffPreferenceController extends BasePreferenceControl
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
final boolean settingsOn = (Boolean) newValue;
SoftApConfiguration softApConfiguration = mWifiManager.getSoftApConfiguration();
SoftApConfiguration newSoftApConfiguration =
new SoftApConfiguration.Builder(softApConfiguration)
.setAutoShutdownEnabled(settingsOn)
.build();
boolean settingsOn = (Boolean) newValue;
SoftApConfiguration.Builder configBuilder =
new SoftApConfiguration.Builder(mWifiManager.getSoftApConfiguration());
configBuilder.setAutoShutdownEnabled(settingsOn);
if (mNeedShutdownSecondarySap) {
configBuilder.setBridgedModeOpportunisticShutdownEnabled(settingsOn);
}
mSettingsOn = settingsOn;
return mWifiManager.setSoftApConfiguration(newSoftApConfiguration);
return mWifiManager.setSoftApConfiguration(configBuilder.build());
}
public boolean isEnabled() {

View File

@@ -18,6 +18,7 @@ package com.android.settings.wifi.tether;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -28,6 +29,10 @@ import android.net.wifi.WifiManager;
import androidx.preference.SwitchPreference;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.wifi.factory.WifiFeatureProvider;
import com.android.settings.wifi.repository.WifiHotspotRepository;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -54,6 +59,8 @@ public class WifiTetherAutoOffPreferenceControllerTest {
mContext = spy(RuntimeEnvironment.application);
WifiFeatureProvider provider = FakeFeatureFactory.setupForTest().getWifiFeatureProvider();
when(provider.getWifiHotspotRepository()).thenReturn(mock(WifiHotspotRepository.class));
when(mContext.getSystemService(WifiManager.class)).thenReturn(mWifiManager);
mSoftApConfiguration = new SoftApConfiguration.Builder().build();
when(mWifiManager.getSoftApConfiguration()).thenReturn(mSoftApConfiguration);
@@ -101,6 +108,32 @@ public class WifiTetherAutoOffPreferenceControllerTest {
assertThat(mSwitchPreference.isChecked()).isTrue();
}
@Test
public void onPreferenceChange_needShutdownSecondarySap_setSecondarySap() {
mController.mNeedShutdownSecondarySap = true;
setConfigShutdownSecondarySap(false);
mController.onPreferenceChange(mSwitchPreference, true);
ArgumentCaptor<SoftApConfiguration> config =
ArgumentCaptor.forClass(SoftApConfiguration.class);
verify(mWifiManager).setSoftApConfiguration(config.capture());
assertThat(config.getValue().isBridgedModeOpportunisticShutdownEnabled()).isTrue();
}
@Test
public void onPreferenceChange_noNeedShutdownSecondarySap_doNotSetSecondarySap() {
mController.mNeedShutdownSecondarySap = false;
setConfigShutdownSecondarySap(false);
mController.onPreferenceChange(mSwitchPreference, true);
ArgumentCaptor<SoftApConfiguration> config =
ArgumentCaptor.forClass(SoftApConfiguration.class);
verify(mWifiManager).setSoftApConfiguration(config.capture());
assertThat(config.getValue().isBridgedModeOpportunisticShutdownEnabled()).isFalse();
}
private boolean getAutoOffSetting() {
ArgumentCaptor<SoftApConfiguration> softApConfigCaptor =
ArgumentCaptor.forClass(SoftApConfiguration.class);
@@ -115,4 +148,12 @@ public class WifiTetherAutoOffPreferenceControllerTest {
.build();
when(mWifiManager.getSoftApConfiguration()).thenReturn(mSoftApConfiguration);
}
private void setConfigShutdownSecondarySap(boolean enabled) {
mSoftApConfiguration =
new SoftApConfiguration.Builder(mSoftApConfiguration)
.setBridgedModeOpportunisticShutdownEnabled(enabled)
.build();
when(mWifiManager.getSoftApConfiguration()).thenReturn(mSoftApConfiguration);
}
}