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

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

Change-Id: I2b65e858794346e3231bb7fdb0a013a2d4934677
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:24:10 +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.SoftApConfiguration;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.SwitchPreference; import androidx.preference.SwitchPreference;
import com.android.settings.core.BasePreferenceController; 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 public class WifiTetherAutoOffPreferenceController extends BasePreferenceController implements
Preference.OnPreferenceChangeListener { Preference.OnPreferenceChangeListener {
private final WifiManager mWifiManager; private final WifiManager mWifiManager;
private boolean mSettingsOn; private boolean mSettingsOn;
@VisibleForTesting
boolean mNeedShutdownSecondarySap;
public WifiTetherAutoOffPreferenceController(Context context, String preferenceKey) { public WifiTetherAutoOffPreferenceController(Context context, String preferenceKey) {
super(context, preferenceKey); super(context, preferenceKey);
WifiHotspotRepository wifiHotspotRepository = FeatureFactory.getFactory(context)
.getWifiFeatureProvider().getWifiHotspotRepository();
if (wifiHotspotRepository.isSpeedFeatureAvailable() && wifiHotspotRepository.isDualBand()) {
mNeedShutdownSecondarySap = true;
}
mWifiManager = context.getSystemService(WifiManager.class); mWifiManager = context.getSystemService(WifiManager.class);
} }
@@ -51,14 +61,15 @@ public class WifiTetherAutoOffPreferenceController extends BasePreferenceControl
@Override @Override
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
final boolean settingsOn = (Boolean) newValue; boolean settingsOn = (Boolean) newValue;
SoftApConfiguration softApConfiguration = mWifiManager.getSoftApConfiguration(); SoftApConfiguration.Builder configBuilder =
SoftApConfiguration newSoftApConfiguration = new SoftApConfiguration.Builder(mWifiManager.getSoftApConfiguration());
new SoftApConfiguration.Builder(softApConfiguration) configBuilder.setAutoShutdownEnabled(settingsOn);
.setAutoShutdownEnabled(settingsOn) if (mNeedShutdownSecondarySap) {
.build(); configBuilder.setBridgedModeOpportunisticShutdownEnabled(settingsOn);
}
mSettingsOn = settingsOn; mSettingsOn = settingsOn;
return mWifiManager.setSoftApConfiguration(newSoftApConfiguration); return mWifiManager.setSoftApConfiguration(configBuilder.build());
} }
public boolean isEnabled() { 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 com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -28,6 +29,10 @@ import android.net.wifi.WifiManager;
import androidx.preference.SwitchPreference; 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.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@@ -54,6 +59,8 @@ public class WifiTetherAutoOffPreferenceControllerTest {
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
WifiFeatureProvider provider = FakeFeatureFactory.setupForTest().getWifiFeatureProvider();
when(provider.getWifiHotspotRepository()).thenReturn(mock(WifiHotspotRepository.class));
when(mContext.getSystemService(WifiManager.class)).thenReturn(mWifiManager); when(mContext.getSystemService(WifiManager.class)).thenReturn(mWifiManager);
mSoftApConfiguration = new SoftApConfiguration.Builder().build(); mSoftApConfiguration = new SoftApConfiguration.Builder().build();
when(mWifiManager.getSoftApConfiguration()).thenReturn(mSoftApConfiguration); when(mWifiManager.getSoftApConfiguration()).thenReturn(mSoftApConfiguration);
@@ -101,6 +108,32 @@ public class WifiTetherAutoOffPreferenceControllerTest {
assertThat(mSwitchPreference.isChecked()).isTrue(); 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() { private boolean getAutoOffSetting() {
ArgumentCaptor<SoftApConfiguration> softApConfigCaptor = ArgumentCaptor<SoftApConfiguration> softApConfigCaptor =
ArgumentCaptor.forClass(SoftApConfiguration.class); ArgumentCaptor.forClass(SoftApConfiguration.class);
@@ -115,4 +148,12 @@ public class WifiTetherAutoOffPreferenceControllerTest {
.build(); .build();
when(mWifiManager.getSoftApConfiguration()).thenReturn(mSoftApConfiguration); when(mWifiManager.getSoftApConfiguration()).thenReturn(mSoftApConfiguration);
} }
private void setConfigShutdownSecondarySap(boolean enabled) {
mSoftApConfiguration =
new SoftApConfiguration.Builder(mSoftApConfiguration)
.setBridgedModeOpportunisticShutdownEnabled(enabled)
.build();
when(mWifiManager.getSoftApConfiguration()).thenReturn(mSoftApConfiguration);
}
} }