diff --git a/src/com/android/settings/wifi/slice/WifiSlice.java b/src/com/android/settings/wifi/slice/WifiSlice.java index c06e8693511..f75fe11953d 100644 --- a/src/com/android/settings/wifi/slice/WifiSlice.java +++ b/src/com/android/settings/wifi/slice/WifiSlice.java @@ -20,6 +20,7 @@ import static android.app.slice.Slice.EXTRA_TOGGLE_STATE; import static android.provider.SettingsSlicesContract.KEY_WIFI; import static com.android.settings.slices.CustomSliceRegistry.WIFI_SLICE_URI; +import static com.android.settingslib.wifi.WifiUtils.getHotspotIconResource; import android.annotation.ColorInt; import android.app.PendingIntent; @@ -264,13 +265,19 @@ public class WifiSlice implements CustomSliceable { android.R.attr.colorControlNormal)); } - final Drawable drawable = mContext.getDrawable( - WifiUtils.getInternetIconResource(wifiSliceItem.getLevel(), - wifiSliceItem.shouldShowXLevelIcon())); + Drawable drawable = mContext.getDrawable(getWifiIconResId(wifiSliceItem)); drawable.setTint(tint); return Utils.createIconWithDrawable(drawable); } + @VisibleForTesting + int getWifiIconResId(WifiSliceItem wifiSliceItem) { + return (wifiSliceItem.isInstantHotspotNetwork()) + ? getHotspotIconResource(wifiSliceItem.getInstantHotspotDeviceType()) + : WifiUtils.getInternetIconResource(wifiSliceItem.getLevel(), + wifiSliceItem.shouldShowXLevelIcon()); + } + protected IconCompat getEndIcon(WifiSliceItem wifiSliceItem) { if (wifiSliceItem.getConnectedState() != WifiEntry.CONNECTED_STATE_DISCONNECTED) { return IconCompat.createWithResource(mContext, R.drawable.ic_settings_24dp); diff --git a/src/com/android/settings/wifi/slice/WifiSliceItem.java b/src/com/android/settings/wifi/slice/WifiSliceItem.java index 5028a06283e..c6f85e52a03 100644 --- a/src/com/android/settings/wifi/slice/WifiSliceItem.java +++ b/src/com/android/settings/wifi/slice/WifiSliceItem.java @@ -20,6 +20,7 @@ import android.content.Context; import android.text.TextUtils; import com.android.settingslib.R; +import com.android.wifitrackerlib.HotspotNetworkEntry; import com.android.wifitrackerlib.WifiEntry; /** @@ -39,6 +40,9 @@ public class WifiSliceItem { private final boolean mHasInternetAccess; private final String mSummary; + private boolean mIsInstantHotspotNetwork; + private int mInstantHotspotDeviceType; + // These values must be kept within [WifiEntry.WIFI_LEVEL_MIN, WifiEntry.WIFI_LEVEL_MAX] private static final int[] WIFI_CONNECTION_STRENGTH = { R.string.accessibility_no_wifi, @@ -59,6 +63,10 @@ public class WifiSliceItem { mShouldEditBeforeConnect = wifiEntry.shouldEditBeforeConnect(); mHasInternetAccess = wifiEntry.hasInternetAccess(); mSummary = wifiEntry.getSummary(false /* concise */); + mIsInstantHotspotNetwork = wifiEntry instanceof HotspotNetworkEntry; + if (mIsInstantHotspotNetwork) { + mInstantHotspotDeviceType = ((HotspotNetworkEntry) wifiEntry).getDeviceType(); + } } @Override @@ -83,6 +91,12 @@ public class WifiSliceItem { if (!TextUtils.equals(getSummary(), otherItem.getSummary())) { return false; } + if (isInstantHotspotNetwork() != otherItem.isInstantHotspotNetwork()) { + return false; + } + if (getInstantHotspotDeviceType() != otherItem.getInstantHotspotDeviceType()) { + return false; + } return true; } @@ -136,6 +150,20 @@ public class WifiSliceItem { return mSummary; } + /** + * Returns true if this is a Instant Hotspot network. + */ + public boolean isInstantHotspotNetwork() { + return mIsInstantHotspotNetwork; + } + + /** + * Returns DeviceType of Instant Hotspot network. + */ + public int getInstantHotspotDeviceType() { + return mInstantHotspotDeviceType; + } + /** * This method has similar code as WifiEntryPreference#buildContentDescription(). * TODO(b/154191825): Adds WifiEntry#getContentDescription() to replace the duplicate code. diff --git a/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java b/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java index 5ed2e8b9444..5c3f920dd54 100644 --- a/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java +++ b/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java @@ -18,8 +18,10 @@ package com.android.settings.wifi.slice; import static android.app.slice.Slice.HINT_LIST_ITEM; import static android.app.slice.SliceItem.FORMAT_SLICE; +import static android.net.wifi.sharedconnectivity.app.NetworkProviderInfo.DEVICE_TYPE_PHONE; import static com.android.settings.wifi.slice.WifiSlice.DEFAULT_EXPANDED_ROW_COUNT; +import static com.android.settingslib.wifi.WifiUtils.getHotspotIconResource; import static com.google.common.truth.Truth.assertThat; @@ -49,6 +51,7 @@ import com.android.settings.R; import com.android.settings.slices.SliceBackgroundWorker; import com.android.settings.testutils.SliceTester; import com.android.settings.testutils.shadow.ShadowWifiSlice; +import com.android.settings.wifi.WifiUtils; import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiEntry.ConnectedState; @@ -335,6 +338,27 @@ public class WifiSliceTest { assertThat(wifiManager.getWifiState()).isEqualTo(WifiManager.WIFI_STATE_ENABLED); } + @Test + public void getWifiIconResId_isInstantHotspotNetwork_returnHotspotIcon() { + WifiSliceItem wifiSliceItem = mock(WifiSliceItem.class); + when(wifiSliceItem.isInstantHotspotNetwork()).thenReturn(true); + when(wifiSliceItem.getInstantHotspotDeviceType()).thenReturn(DEVICE_TYPE_PHONE); + + assertThat(mWifiSlice.getWifiIconResId(wifiSliceItem)) + .isEqualTo(getHotspotIconResource(DEVICE_TYPE_PHONE)); + } + + @Test + public void getWifiIconResId_notInstantHotspotNetwork_returnInternetIcon() { + WifiSliceItem wifiSliceItem = mock(WifiSliceItem.class); + when(wifiSliceItem.isInstantHotspotNetwork()).thenReturn(false); + when(wifiSliceItem.getLevel()).thenReturn(WifiEntry.WIFI_LEVEL_MAX); + when(wifiSliceItem.shouldShowXLevelIcon()).thenReturn(false); + + assertThat(mWifiSlice.getWifiIconResId(wifiSliceItem)) + .isEqualTo(WifiUtils.getInternetIconResource(WifiEntry.WIFI_LEVEL_MAX, false)); + } + @Implements(SliceBackgroundWorker.class) public static class ShadowSliceBackgroundWorker { private static WifiScanWorker mWifiScanWorker = mock(WifiScanWorker.class);