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

Commit 091894d0 authored by Jong Wook Kim's avatar Jong Wook Kim
Browse files

Display "MAC address is randomized" in Wifi Preference Page

When Connected MAC Randomization is enabled and the device is
disconnected, there isn't a valid MAC address to display since we don't
know what the device's next MAC address is going to be.

Instead of displaying the MAC address used for previous connection, tell
users that "MAC address is randomized."

Bug: 73663275
Test: make -j40 RunSettingsRoboTests
Change-Id: Id5352926f221e3215734d1c198f2072940f82695
parent b0f25159
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.provider.Settings;
import android.support.v4.text.BidiFormatter;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
@@ -96,10 +97,18 @@ public class WifiInfoPreferenceController extends AbstractPreferenceController
    public void updateWifiInfo() {
        if (mWifiMacAddressPref != null) {
            final WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
            final int macRandomizationMode = Settings.Global.getInt(mContext.getContentResolver(),
                    Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED, 0);
            final String macAddress = wifiInfo == null ? null : wifiInfo.getMacAddress();
            mWifiMacAddressPref.setSummary(!TextUtils.isEmpty(macAddress)
                    ? macAddress
                    : mContext.getString(R.string.status_unavailable));

            if (TextUtils.isEmpty(macAddress)) {
                mWifiMacAddressPref.setSummary(R.string.status_unavailable);
            } else if (macRandomizationMode == 1
                    && WifiInfo.DEFAULT_MAC_ADDRESS.equals(macAddress)) {
                mWifiMacAddressPref.setSummary(R.string.wifi_status_mac_randomized);
            } else {
                mWifiMacAddressPref.setSummary(macAddress);
            }
        }
        if (mWifiIpAddressPref != null) {
            final String ipAddress = Utils.getWifiIpAddresses(mContext);
+30 −1
Original line number Diff line number Diff line
@@ -28,10 +28,13 @@ import android.arch.lifecycle.LifecycleOwner;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.IntentFilter;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.provider.Settings;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.core.lifecycle.Lifecycle;

@@ -55,11 +58,15 @@ public class WifiInfoPreferenceControllerTest {
    private Preference mIpPreference;
    @Mock
    private Preference mMacPreference;
    @Mock
    private WifiInfo mWifiInfo;

    private Lifecycle mLifecycle;
    private LifecycleOwner mLifecycleOwner;
    private WifiInfoPreferenceController mController;

    private static final String TEST_MAC_ADDRESS = "42:0a:23:43:ac:02";

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
@@ -70,6 +77,7 @@ public class WifiInfoPreferenceControllerTest {
        when(mScreen.findPreference(anyString()))
                .thenReturn(mMacPreference)
                .thenReturn(mIpPreference);
        when(mWifiManager.getConnectionInfo()).thenReturn(mWifiInfo);
        mController = new WifiInfoPreferenceController(mContext, mLifecycle, mWifiManager);
    }

@@ -95,11 +103,32 @@ public class WifiInfoPreferenceControllerTest {
    @Test
    public void onResume_shouldUpdateWifiInfo() {
        when(mWifiManager.getCurrentNetwork()).thenReturn(null);
        when(mWifiInfo.getMacAddress()).thenReturn(TEST_MAC_ADDRESS);

        mController.displayPreference(mScreen);
        mController.onResume();

        verify(mMacPreference).setSummary(any());
        verify(mMacPreference).setSummary(TEST_MAC_ADDRESS);
        verify(mIpPreference).setSummary(any());
    }

    @Test
    public void testUpdateMacAddress() {
        when(mWifiManager.getCurrentNetwork()).thenReturn(null);
        Settings.Global.putInt(mContext.getContentResolver(),
                Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED, 1);
        mController.displayPreference(mScreen);

        when(mWifiInfo.getMacAddress()).thenReturn(null);
        mController.updateWifiInfo();
        verify(mMacPreference).setSummary(R.string.status_unavailable);

        when(mWifiInfo.getMacAddress()).thenReturn(WifiInfo.DEFAULT_MAC_ADDRESS);
        mController.updateWifiInfo();
        verify(mMacPreference).setSummary(R.string.wifi_status_mac_randomized);

        when(mWifiInfo.getMacAddress()).thenReturn(TEST_MAC_ADDRESS);
        mController.updateWifiInfo();
        verify(mMacPreference).setSummary(TEST_MAC_ADDRESS);
    }
}