Merge "Add prompt to sign in at captive portal to Wi-Fi Slice" into qt-dev

This commit is contained in:
TreeHugger Robot
2019-04-05 03:19:22 +00:00
committed by Android (Google) Code Review
9 changed files with 277 additions and 24 deletions

View File

@@ -18,6 +18,7 @@ package com.android.settings.testutils;
import static android.app.slice.Slice.HINT_TITLE;
import static android.app.slice.Slice.SUBTYPE_COLOR;
import static android.app.slice.SliceItem.FORMAT_IMAGE;
import static android.app.slice.SliceItem.FORMAT_INT;
import static android.app.slice.SliceItem.FORMAT_TEXT;
@@ -284,6 +285,31 @@ public class SliceTester {
return hasText;
}
/**
* Assert any slice item contains icon.
*
* @param sliceItems All slice items of a Slice.
* @param icon Icon for asserting.
*/
public static void assertAnySliceItemContainsIcon(List<SliceItem> sliceItems, IconCompat icon) {
boolean hasIcon = false;
for (SliceItem item : sliceItems) {
List<SliceItem> iconItems = SliceQuery.findAll(item, FORMAT_IMAGE,
(String) null /* hints */, null /* non-hints */);
if (iconItems == null) {
continue;
}
for (SliceItem iconItem : iconItems) {
if (icon.toString().equals(iconItem.getIcon().toString())) {
hasIcon = true;
break;
}
}
}
assertThat(hasIcon).isTrue();
}
private static void assertKeywords(SliceMetadata metadata, SliceData data) {
final List<String> keywords = metadata.getSliceKeywords();
final Set<String> expectedKeywords = Arrays.stream(data.getKeywords().split(","))

View File

@@ -16,6 +16,7 @@
package com.android.settings.wifi.slice;
import static org.mockito.ArgumentMatchers.any;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn;
@@ -24,6 +25,7 @@ import static org.mockito.Mockito.spy;
import android.content.ContentResolver;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
@@ -53,6 +55,7 @@ public class ContextualWifiSliceTest {
private Context mContext;
private ContentResolver mResolver;
private WifiManager mWifiManager;
private ConnectivityManager mConnectivityManager;
private ContextualWifiSlice mWifiSlice;
private FakeFeatureFactory mFeatureFactory;
@@ -70,6 +73,9 @@ public class ContextualWifiSliceTest {
SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
mWifiManager.setWifiEnabled(true);
mConnectivityManager = spy(mContext.getSystemService(ConnectivityManager.class));
doReturn(mConnectivityManager).when(mContext).getSystemService(ConnectivityManager.class);
mWifiSlice = new ContextualWifiSlice(mContext);
mWifiSlice.sPreviouslyDisplayed = false;
}
@@ -124,6 +130,29 @@ public class ContextualWifiSliceTest {
assertThat(primaryAction.getIcon().toString()).isEqualTo(expectedToggleIcon.toString());
}
@Test
public void getWifiSlice_isCaptivePortal_shouldHaveTitleAndToggle() {
mWifiSlice.sPreviouslyDisplayed = false;
final WifiConfiguration config = new WifiConfiguration();
config.SSID = "123";
mWifiManager.connect(config, null /* listener */);
doReturn(WifiSliceTest.makeCaptivePortalNetworkCapabilities()).when(mConnectivityManager)
.getNetworkCapabilities(any());
final Slice wifiSlice = mWifiSlice.getSlice();
final SliceMetadata metadata = SliceMetadata.from(mContext, wifiSlice);
assertThat(metadata.getTitle()).isEqualTo(mContext.getString(R.string.wifi_settings));
final List<SliceAction> toggles = metadata.getToggles();
assertThat(toggles).hasSize(1);
final SliceAction primaryAction = metadata.getPrimaryAction();
final IconCompat expectedToggleIcon = IconCompat.createWithResource(mContext,
R.drawable.ic_settings_wireless);
assertThat(primaryAction.getIcon().toString()).isEqualTo(expectedToggleIcon.toString());
}
@Test
public void getWifiSlice_contextualWifiSlice_shouldReturnContextualWifiSliceUri() {
mWifiSlice.sActiveUiSession = mFeatureFactory.slicesFeatureProvider.getUiSessionToken();

View File

@@ -27,6 +27,8 @@ import static org.mockito.Mockito.verify;
import android.content.ContentResolver;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkInfo;
import android.net.NetworkInfo.State;
import android.net.wifi.WifiManager;
@@ -55,6 +57,7 @@ public class WifiScanWorkerTest {
private Context mContext;
private ContentResolver mResolver;
private WifiManager mWifiManager;
private ConnectivityManager mConnectivityManager;
private WifiScanWorker mWifiScanWorker;
@Before
@@ -68,6 +71,7 @@ public class WifiScanWorkerTest {
SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
mWifiManager.setWifiEnabled(true);
mConnectivityManager = mContext.getSystemService(ConnectivityManager.class);
mWifiScanWorker = new WifiScanWorker(mContext, WIFI_SLICE_URI);
}
@@ -89,7 +93,7 @@ public class WifiScanWorkerTest {
}
@Test
public void SliceAccessPoint_sameState_shouldBeTheSame() {
public void AccessPointList_sameState_shouldBeTheSame() {
final AccessPoint ap1 = createAccessPoint(AP_NAME, State.CONNECTED);
final AccessPoint ap2 = createAccessPoint(AP_NAME, State.CONNECTED);
@@ -98,7 +102,7 @@ public class WifiScanWorkerTest {
}
@Test
public void SliceAccessPoint_differentState_shouldBeDifferent() {
public void AccessPointList_differentState_shouldBeDifferent() {
final AccessPoint ap1 = createAccessPoint(AP_NAME, State.CONNECTING);
final AccessPoint ap2 = createAccessPoint(AP_NAME, State.CONNECTED);
@@ -107,7 +111,7 @@ public class WifiScanWorkerTest {
}
@Test
public void SliceAccessPoint_differentLength_shouldBeDifferent() {
public void AccessPointList_differentLength_shouldBeDifferent() {
final AccessPoint ap1 = createAccessPoint(AP_NAME, State.CONNECTED);
final AccessPoint ap2 = createAccessPoint(AP_NAME, State.CONNECTED);
final List<AccessPoint> list = new ArrayList<>();
@@ -116,4 +120,15 @@ public class WifiScanWorkerTest {
assertThat(mWifiScanWorker.areListsTheSame(list, Arrays.asList(ap1))).isFalse();
}
@Test
public void NetworkCallback_onCapabilitiesChanged_shouldNotifyChange() {
final Network network = mConnectivityManager.getActiveNetwork();
mWifiScanWorker.registerCaptivePortalNetworkCallback(network);
mWifiScanWorker.mCaptivePortalNetworkCallback.onCapabilitiesChanged(network,
WifiSliceTest.makeCaptivePortalNetworkCapabilities());
verify(mResolver).notifyChange(WIFI_SLICE_URI, null);
}
}

View File

@@ -23,6 +23,7 @@ import static com.android.settings.wifi.slice.WifiSlice.DEFAULT_EXPANDED_ROW_COU
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
@@ -30,6 +31,8 @@ import static org.mockito.Mockito.spy;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.Uri;
import android.net.wifi.WifiManager;
@@ -70,6 +73,7 @@ public class WifiSliceTest {
private Context mContext;
private ContentResolver mResolver;
private WifiManager mWifiManager;
private ConnectivityManager mConnectivityManager;
private WifiSlice mWifiSlice;
@Before
@@ -83,6 +87,9 @@ public class WifiSliceTest {
SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
mWifiManager.setWifiEnabled(true);
mConnectivityManager = spy(mContext.getSystemService(ConnectivityManager.class));
doReturn(mConnectivityManager).when(mContext).getSystemService(ConnectivityManager.class);
mWifiSlice = new WifiSlice(mContext);
}
@@ -226,6 +233,37 @@ public class WifiSliceTest {
mContext.getString(R.string.wifi_empty_list_wifi_on));
}
@Test
public void getWifiSlice_isCaptivePortal_shouldHaveCaptivePortalItems() {
setWorkerResults(createAccessPoint(AP1_NAME, true, true));
doReturn(makeCaptivePortalNetworkCapabilities()).when(mConnectivityManager)
.getNetworkCapabilities(any());
final Slice wifiSlice = mWifiSlice.getSlice();
final List<SliceItem> sliceItems = wifiSlice.getItems();
SliceTester.assertAnySliceItemContainsTitle(sliceItems, AP1_NAME);
assertCaptivePortalItems(sliceItems);
}
private void assertCaptivePortalItems(List<SliceItem> sliceItems) {
final String expectedSummary = mContext.getString(mContext.getResources()
.getIdentifier("network_available_sign_in", "string", "android"));
SliceTester.assertAnySliceItemContainsSubtitle(sliceItems, expectedSummary);
final IconCompat expectedIcon = IconCompat.createWithResource(mContext,
R.drawable.ic_settings_accent);
SliceTester.assertAnySliceItemContainsIcon(sliceItems, expectedIcon);
}
static NetworkCapabilities makeCaptivePortalNetworkCapabilities() {
final NetworkCapabilities nc = new NetworkCapabilities();
nc.clearAll();
nc.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
nc.addCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL);
return nc;
}
@Test
public void handleUriChange_updatesWifi() {
final Intent intent = mWifiSlice.getIntent();