Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 20fd4a46 authored by Weng Su's avatar Weng Su
Browse files

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
parent 1d279af2
Loading
Loading
Loading
Loading
+18 −7
Original line number Diff line number Diff line
@@ -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() {
+41 −0
Original line number Diff line number Diff line
@@ -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);
    }
}