Display "Unavailable" for default MAC

Display "Unavailable" when the current MAC address is
"02:00:00:00:00:00" which indicates that we couldn't get the actual
device MAC address.

Bug: 110043449
Test: Unittest (make RunSettingsLibRoboTests -j40)
Change-Id: I2adab477a43262dd0067bc30b0a9ca4d35dc4298
This commit is contained in:
Jong Wook Kim
2018-06-15 12:58:50 -07:00
parent 6d5bdf293d
commit ba7fcfd586
2 changed files with 124 additions and 36 deletions

View File

@@ -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);
}

View File

@@ -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);
doReturn(null).when(wifiManager).getConnectionInfo();
doReturn(wifiManager).when(mContext).getSystemService(WifiManager.class);
final AbstractWifiMacAddressPreferenceController wifiMacAddressPreferenceController =
new ConcreteWifiMacAddressPreferenceController(mContext, mLifecycle);
wifiMacAddressPreferenceController.displayPreference(mScreen);
verify(mPreference).setSummary(R.string.status_unavailable);
doReturn(wifiInfo).when(wifiManager).getConnectionInfo();
doReturn(TEST_MAC_ADDRESS).when(wifiInfo).getMacAddress();
wifiMacAddressPreferenceController.displayPreference(mScreen);
verify(mPreference).setSummary(TEST_MAC_ADDRESS);
public void updateConnectivity_nullWifiInfoWithMacRandomizationOff_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.OFF);
doReturn(null).when(mWifiManager).getConnectionInfo();
doReturn(WifiInfo.DEFAULT_MAC_ADDRESS).when(wifiInfo).getMacAddress();
wifiMacAddressPreferenceController.displayPreference(mScreen);
verify(mPreference).setSummary(R.string.wifi_status_mac_randomized);
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);
assertThat(mPreference.getSummary()).isEqualTo(TEST_MAC_ADDRESS);
}
@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();
mController.displayPreference(mScreen);
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,
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);
assertThat(mPreference.getSummary()).isEqualTo(TEST_MAC_ADDRESS);
}
private static class ConcreteWifiMacAddressPreferenceController