Refactor InternetIconInjector to SettingsLib

- Plan to share the InternetIconInjector class to System UI.

Bug: 192923176
Test: manual test
make RunSettingsLibRoboTests ROBOTEST_FILTER=WifiUtilsTest

Change-Id: Ieb7080ab6f6462abc3820b47c2a58cc2ea2a083e
This commit is contained in:
Weng Su
2021-07-21 20:32:31 +08:00
parent 1750f16889
commit a9c846a5fa
2 changed files with 43 additions and 2 deletions

View File

@@ -21,6 +21,7 @@ import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.getMaxNe
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiConfiguration.NetworkSelectionStatus;
@@ -294,6 +295,28 @@ public class WifiUtils {
return noInternet ? NO_INTERNET_WIFI_PIE[level] : WIFI_PIE[level];
}
/**
* Wrapper the {@link #getInternetIconResource} for testing compatibility.
*/
public static class InternetIconInjector {
protected final Context mContext;
public InternetIconInjector(Context context) {
mContext = context;
}
/**
* Returns the Internet icon for a given RSSI level.
*
* @param noInternet True if a connected Wi-Fi network cannot access the Internet
* @param level The number of bars to show (0-4)
*/
public Drawable getIcon(boolean noInternet, int level) {
return mContext.getDrawable(WifiUtils.getInternetIconResource(level, noInternet));
}
}
public static boolean isMeteredOverridden(WifiConfiguration config) {
return config.meteredOverride != WifiConfiguration.METERED_OVERRIDE_NONE;
}

View File

@@ -20,6 +20,8 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
@@ -37,6 +39,8 @@ import android.os.SystemClock;
import android.text.format.DateUtils;
import android.util.ArraySet;
import androidx.test.core.app.ApplicationProvider;
import com.android.settingslib.R;
import org.junit.Before;
@@ -45,7 +49,6 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import java.util.ArrayList;
import java.util.Set;
@@ -70,7 +73,7 @@ public class WifiUtilsTest {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
mContext = spy(ApplicationProvider.getApplicationContext());
}
@Test
@@ -160,6 +163,21 @@ public class WifiUtilsTest {
assertThat(bundle.getString(WifiUtils.KEY_CHOSEN_WIFIENTRY_KEY)).isEqualTo(key);
}
@Test
public void testInternetIconInjector_getIcon_returnsCorrectValues() {
WifiUtils.InternetIconInjector iconInjector = new WifiUtils.InternetIconInjector(mContext);
for (int level = 0; level <= 4; level++) {
iconInjector.getIcon(false /* noInternet */, level);
verify(mContext).getDrawable(
WifiUtils.getInternetIconResource(level, false /* noInternet */));
iconInjector.getIcon(true /* noInternet */, level);
verify(mContext).getDrawable(
WifiUtils.getInternetIconResource(level, true /* noInternet */));
}
}
private static ArrayList<ScanResult> buildScanResultCache() {
ArrayList<ScanResult> scanResults = new ArrayList<>();
for (int i = 0; i < 5; i++) {