diff --git a/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceController.java index 01a0b5707cb..b54a80f6b41 100644 --- a/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceController.java +++ b/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceController.java @@ -17,7 +17,8 @@ package com.android.settings.wifi.tether; import android.content.Context; -import android.provider.Settings; +import android.net.wifi.SoftApConfiguration; +import android.net.wifi.WifiManager; import androidx.preference.Preference; import androidx.preference.SwitchPreference; @@ -27,8 +28,11 @@ import com.android.settings.core.BasePreferenceController; public class WifiTetherAutoOffPreferenceController extends BasePreferenceController implements Preference.OnPreferenceChangeListener { + private final WifiManager mWifiManager; + public WifiTetherAutoOffPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); + mWifiManager = context.getSystemService(WifiManager.class); } @Override @@ -38,8 +42,8 @@ public class WifiTetherAutoOffPreferenceController extends BasePreferenceControl @Override public void updateState(Preference preference) { - final boolean settingsOn = Settings.Global.getInt(mContext.getContentResolver(), - Settings.Global.SOFT_AP_TIMEOUT_ENABLED, 1) != 0; + SoftApConfiguration softApConfiguration = mWifiManager.getSoftApConfiguration(); + final boolean settingsOn = softApConfiguration.isAutoShutdownEnabled(); ((SwitchPreference) preference).setChecked(settingsOn); } @@ -47,8 +51,11 @@ public class WifiTetherAutoOffPreferenceController extends BasePreferenceControl @Override public boolean onPreferenceChange(Preference preference, Object newValue) { final boolean settingsOn = (Boolean) newValue; - Settings.Global.putInt(mContext.getContentResolver(), - Settings.Global.SOFT_AP_TIMEOUT_ENABLED, settingsOn ? 1 : 0); - return true; + SoftApConfiguration softApConfiguration = mWifiManager.getSoftApConfiguration(); + SoftApConfiguration newSoftApConfiguration = + new SoftApConfiguration.Builder(softApConfiguration) + .setAutoShutdownEnabled(settingsOn) + .build(); + return mWifiManager.setSoftApConfiguration(newSoftApConfiguration); } } 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 f027147eb23..fbc4aaa3b90 100644 --- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherAutoOffPreferenceControllerTest.java @@ -18,14 +18,21 @@ package com.android.settings.wifi.tether; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import android.content.Context; -import android.provider.Settings; +import android.net.wifi.SoftApConfiguration; +import android.net.wifi.WifiManager; import androidx.preference.SwitchPreference; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; @@ -34,17 +41,23 @@ import org.robolectric.RuntimeEnvironment; public class WifiTetherAutoOffPreferenceControllerTest { private static final String KEY_PREF = "wifi_tether_auto_off"; - private static final int ON = 1; - private static final int OFF = 0; private Context mContext; private WifiTetherAutoOffPreferenceController mController; private SwitchPreference mSwitchPreference; + @Mock + private WifiManager mWifiManager; + private SoftApConfiguration mSoftApConfiguration; @Before public void setup() { MockitoAnnotations.initMocks(this); - mContext = RuntimeEnvironment.application; + mContext = spy(RuntimeEnvironment.application); + + when(mContext.getSystemService(WifiManager.class)).thenReturn(mWifiManager); + mSoftApConfiguration = new SoftApConfiguration.Builder().build(); + when(mWifiManager.getSoftApConfiguration()).thenReturn(mSoftApConfiguration); + mController = new WifiTetherAutoOffPreferenceController(mContext, KEY_PREF); mSwitchPreference = new SwitchPreference(mContext); } @@ -53,19 +66,19 @@ public class WifiTetherAutoOffPreferenceControllerTest { public void testOnPreferenceChange_toggleOn_settingsOn() { mController.onPreferenceChange(null, true); - assertThat(getAutoOffSetting()).isEqualTo(ON); + assertThat(getAutoOffSetting()).isEqualTo(true); } @Test public void testOnPreferenceChange_toggleOff_settingsOff() { mController.onPreferenceChange(null, false); - assertThat(getAutoOffSetting()).isEqualTo(OFF); + assertThat(getAutoOffSetting()).isEqualTo(false); } @Test public void testUpdateState_settingsOn_toggleOn() { - setAutoOffSetting(ON); + setAutoOffSetting(true); mController.updateState(mSwitchPreference); @@ -74,7 +87,7 @@ public class WifiTetherAutoOffPreferenceControllerTest { @Test public void testUpdateState_settingsOff_toggleOff() { - setAutoOffSetting(OFF); + setAutoOffSetting(false); mController.updateState(mSwitchPreference); @@ -88,13 +101,18 @@ public class WifiTetherAutoOffPreferenceControllerTest { assertThat(mSwitchPreference.isChecked()).isTrue(); } - private int getAutoOffSetting() { - return Settings.Global.getInt(mContext.getContentResolver(), - Settings.Global.SOFT_AP_TIMEOUT_ENABLED, OFF); + private boolean getAutoOffSetting() { + ArgumentCaptor softApConfigCaptor = + ArgumentCaptor.forClass(SoftApConfiguration.class); + verify(mWifiManager).setSoftApConfiguration(softApConfigCaptor.capture()); + return softApConfigCaptor.getValue().isAutoShutdownEnabled(); } - private void setAutoOffSetting(int config) { - Settings.Global.putInt(mContext.getContentResolver(), - Settings.Global.SOFT_AP_TIMEOUT_ENABLED, config); + private void setAutoOffSetting(boolean config) { + mSoftApConfiguration = + new SoftApConfiguration.Builder(mSoftApConfiguration) + .setAutoShutdownEnabled(config) + .build(); + when(mWifiManager.getSoftApConfiguration()).thenReturn(mSoftApConfiguration); } }