Loading src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceController.java +18 −7 Original line number Original line Diff line number Diff line Loading @@ -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); } } Loading @@ -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() { Loading tests/robotests/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceControllerTest.java +41 −0 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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); Loading Loading @@ -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); Loading @@ -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); } } } Loading
src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceController.java +18 −7 Original line number Original line Diff line number Diff line Loading @@ -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); } } Loading @@ -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() { Loading
tests/robotests/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceControllerTest.java +41 −0 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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); Loading Loading @@ -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); Loading @@ -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); } } }