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

Commit 57522f0f authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Shutdown secondary SAP automatically" into udc-d1-dev

parents d56f96aa 20fd4a46
Loading
Loading
Loading
Loading
+18 −7
Original line number Original line Diff line number Diff line
@@ -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() {
+41 −0
Original line number Original line 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 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);
    }
}
}