From 20fd4a46c8eb769fe90b54d62e885c411555d187 Mon Sep 17 00:00:00 2001 From: Weng Su Date: Wed, 14 Jun 2023 05:51:43 +0800 Subject: [PATCH] Shutdown secondary SAP automatically - If the "Extend compatibility" preference is not supported, then set to shutdown secondary SAP automatically within the "Turn off hotspot automatically" preference. Bug: 285914977 Test: manual test atest -c WifiTetherAutoOffPreferenceControllerTest Change-Id: I405107a4782a6f023442d196d0fca27515aab00e --- ...WifiTetherAutoOffPreferenceController.java | 25 +++++++---- ...TetherAutoOffPreferenceControllerTest.java | 41 +++++++++++++++++++ 2 files changed, 59 insertions(+), 7 deletions(-) diff --git a/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceController.java index 5dc5758dc90..0b6d533bb90 100644 --- a/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceController.java +++ b/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceController.java @@ -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() { diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceControllerTest.java index fbc4aaa3b90..535e4ab250c 100644 --- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceControllerTest.java @@ -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 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 config = + ArgumentCaptor.forClass(SoftApConfiguration.class); + verify(mWifiManager).setSoftApConfiguration(config.capture()); + assertThat(config.getValue().isBridgedModeOpportunisticShutdownEnabled()).isFalse(); + } + private boolean getAutoOffSetting() { ArgumentCaptor 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); + } }