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

Commit 372c7aa0 authored by Jong Wook Kim's avatar Jong Wook Kim Committed by Android (Google) Code Review
Browse files

Merge "Display "Unavailable" for default MAC"

parents 4f0f5e85 ba7fcfd5
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -38,6 +38,10 @@ public abstract class AbstractWifiMacAddressPreferenceController

    @VisibleForTesting
    static final String KEY_WIFI_MAC_ADDRESS = "wifi_mac_address";
    @VisibleForTesting
    static final int OFF = 0;
    @VisibleForTesting
    static final int ON = 1;

    private static final String[] CONNECTIVITY_INTENTS = {
            ConnectivityManager.CONNECTIVITY_ACTION,
@@ -80,13 +84,14 @@ public abstract class AbstractWifiMacAddressPreferenceController
    protected void updateConnectivity() {
        WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
        final int macRandomizationMode = Settings.Global.getInt(mContext.getContentResolver(),
                Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED, 0);
                Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED, OFF);
        final String macAddress = wifiInfo == null ? null : wifiInfo.getMacAddress();

        if (TextUtils.isEmpty(macAddress)) {
            mWifiMacAddress.setSummary(R.string.status_unavailable);
        } else if (macRandomizationMode == 1 && WifiInfo.DEFAULT_MAC_ADDRESS.equals(macAddress)) {
        if (macRandomizationMode == ON && WifiInfo.DEFAULT_MAC_ADDRESS.equals(macAddress)) {
            mWifiMacAddress.setSummary(R.string.wifi_status_mac_randomized);
        } else if (TextUtils.isEmpty(macAddress)
                || WifiInfo.DEFAULT_MAC_ADDRESS.equals(macAddress)) {
            mWifiMacAddress.setSummary(R.string.status_unavailable);
        } else {
            mWifiMacAddress.setSummary(macAddress);
        }
+110 −27
Original line number Diff line number Diff line
@@ -16,11 +16,10 @@

package com.android.settingslib.deviceinfo;

import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.spy;

import android.annotation.SuppressLint;
import android.content.Context;
@@ -40,6 +39,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;

import java.util.Arrays;
import java.util.List;
@@ -47,13 +47,17 @@ import java.util.List;
@SuppressLint("HardwareIds")
@RunWith(SettingsLibRobolectricTestRunner.class)
public class WifiMacAddressPreferenceControllerTest {
    @Mock
    private Context mContext;
    @Mock
    private Lifecycle mLifecycle;
    @Mock
    private PreferenceScreen mScreen;
    @Mock
    private WifiManager mWifiManager;
    @Mock
    private WifiInfo mWifiInfo;

    private AbstractWifiMacAddressPreferenceController mController;
    private Context mContext;
    private Preference mPreference;

    private static final String TEST_MAC_ADDRESS = "00:11:22:33:44:55";
@@ -61,14 +65,20 @@ public class WifiMacAddressPreferenceControllerTest {
    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);

        mContext = spy(RuntimeEnvironment.application);
        mPreference = new Preference(mContext);

        doReturn(mPreference).when(mScreen)
                .findPreference(AbstractWifiMacAddressPreferenceController.KEY_WIFI_MAC_ADDRESS);
        doReturn(mWifiManager).when(mContext).getSystemService(WifiManager.class);
        doReturn(mWifiInfo).when(mWifiManager).getConnectionInfo();

        mController = new ConcreteWifiMacAddressPreferenceController(mContext, mLifecycle);
    }

    @Test
    public void testHasIntentFilters() {
        final AbstractWifiMacAddressPreferenceController wifiMacAddressPreferenceController =
                new ConcreteWifiMacAddressPreferenceController(mContext, mLifecycle);
        final List<String> expectedIntents = Arrays.asList(
                ConnectivityManager.CONNECTIVITY_ACTION,
                WifiManager.LINK_CONFIGURATION_CHANGED_ACTION,
@@ -76,37 +86,110 @@ public class WifiMacAddressPreferenceControllerTest {


        assertWithMessage("Intent filter should contain expected intents")
                .that(wifiMacAddressPreferenceController.getConnectivityIntents())
                .that(mController.getConnectivityIntents())
                .asList().containsAllIn(expectedIntents);
    }

    @Test
    public void testWifiMacAddress() {
        final WifiManager wifiManager = mock(WifiManager.class);
        final WifiInfo wifiInfo = mock(WifiInfo.class);
    public void updateConnectivity_nullWifiInfoWithMacRandomizationOff_setMacUnavailable() {
        Settings.Global.putInt(mContext.getContentResolver(),
                Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED,
                AbstractWifiMacAddressPreferenceController.OFF);
        doReturn(null).when(mWifiManager).getConnectionInfo();

        mController.displayPreference(mScreen);

        assertThat(mPreference.getSummary())
                .isEqualTo(mContext.getString(R.string.status_unavailable));
    }

    @Test
    public void updateConnectivity_nullMacWithMacRandomizationOff_setMacUnavailable() {
        Settings.Global.putInt(mContext.getContentResolver(),
                Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED,
                AbstractWifiMacAddressPreferenceController.OFF);
        doReturn(null).when(mWifiInfo).getMacAddress();

        mController.displayPreference(mScreen);

        assertThat(mPreference.getSummary())
                .isEqualTo(mContext.getString(R.string.status_unavailable));
    }

    @Test
    public void updateConnectivity_defaultMacWithMacRandomizationOff_setMacUnavailable() {
        Settings.Global.putInt(mContext.getContentResolver(),
                Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED,
                AbstractWifiMacAddressPreferenceController.OFF);
        doReturn(WifiInfo.DEFAULT_MAC_ADDRESS).when(mWifiInfo).getMacAddress();

        mController.displayPreference(mScreen);

        assertThat(mPreference.getSummary())
                .isEqualTo(mContext.getString(R.string.status_unavailable));
    }

    @Test
    public void updateConnectivity_validMacWithMacRandomizationOff_setValidMac() {
        Settings.Global.putInt(mContext.getContentResolver(),
                Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED,
                AbstractWifiMacAddressPreferenceController.OFF);
        doReturn(TEST_MAC_ADDRESS).when(mWifiInfo).getMacAddress();

        mController.displayPreference(mScreen);

        doReturn(null).when(wifiManager).getConnectionInfo();
        doReturn(wifiManager).when(mContext).getSystemService(WifiManager.class);
        assertThat(mPreference.getSummary()).isEqualTo(TEST_MAC_ADDRESS);
    }

        final AbstractWifiMacAddressPreferenceController wifiMacAddressPreferenceController =
                new ConcreteWifiMacAddressPreferenceController(mContext, mLifecycle);
    @Test
    public void updateConnectivity_nullWifiInfoWithMacRandomizationOn_setMacUnavailable() {
        Settings.Global.putInt(mContext.getContentResolver(),
                Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED,
                AbstractWifiMacAddressPreferenceController.ON);
        doReturn(null).when(mWifiManager).getConnectionInfo();

        wifiMacAddressPreferenceController.displayPreference(mScreen);
        verify(mPreference).setSummary(R.string.status_unavailable);
        mController.displayPreference(mScreen);

        doReturn(wifiInfo).when(wifiManager).getConnectionInfo();
        doReturn(TEST_MAC_ADDRESS).when(wifiInfo).getMacAddress();
        wifiMacAddressPreferenceController.displayPreference(mScreen);
        verify(mPreference).setSummary(TEST_MAC_ADDRESS);
        assertThat(mPreference.getSummary())
                .isEqualTo(mContext.getString(R.string.status_unavailable));
    }

    @Test
    public void updateConnectivity_nullMacWithMacRandomizationOn_setMacUnavailable() {
        Settings.Global.putInt(mContext.getContentResolver(),
                Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED, 1);
        wifiMacAddressPreferenceController.displayPreference(mScreen);
        verify(mPreference, times(2)).setSummary(TEST_MAC_ADDRESS);
                Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED,
                AbstractWifiMacAddressPreferenceController.ON);
        doReturn(null).when(mWifiInfo).getMacAddress();

        mController.displayPreference(mScreen);

        assertThat(mPreference.getSummary())
                .isEqualTo(mContext.getString(R.string.status_unavailable));
    }

    @Test
    public void updateConnectivity_defaultMacWithMacRandomizationOn_setMacRandomized() {
        Settings.Global.putInt(mContext.getContentResolver(),
                Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED,
                AbstractWifiMacAddressPreferenceController.ON);
        doReturn(WifiInfo.DEFAULT_MAC_ADDRESS).when(mWifiInfo).getMacAddress();

        mController.displayPreference(mScreen);

        assertThat(mPreference.getSummary())
                .isEqualTo(mContext.getString(R.string.wifi_status_mac_randomized));
    }

    @Test
    public void updateConnectivity_validMacWithMacRandomizationOn_setValidMac() {
        Settings.Global.putInt(mContext.getContentResolver(),
                Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED,
                AbstractWifiMacAddressPreferenceController.ON);
        doReturn(TEST_MAC_ADDRESS).when(mWifiInfo).getMacAddress();

        mController.displayPreference(mScreen);

        doReturn(WifiInfo.DEFAULT_MAC_ADDRESS).when(wifiInfo).getMacAddress();
        wifiMacAddressPreferenceController.displayPreference(mScreen);
        verify(mPreference).setSummary(R.string.wifi_status_mac_randomized);
        assertThat(mPreference.getSummary()).isEqualTo(TEST_MAC_ADDRESS);
    }

    private static class ConcreteWifiMacAddressPreferenceController