Loading src/com/android/settings/wifi/slice/WifiSlice.java +10 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading src/com/android/settings/wifi/slice/WifiSliceItem.java +28 −0 Original line number Diff line number Diff line Loading @@ -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; /** Loading @@ -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, Loading @@ -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 Loading @@ -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; } Loading Loading @@ -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. Loading tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java +24 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); Loading Loading
src/com/android/settings/wifi/slice/WifiSlice.java +10 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading
src/com/android/settings/wifi/slice/WifiSliceItem.java +28 −0 Original line number Diff line number Diff line Loading @@ -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; /** Loading @@ -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, Loading @@ -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 Loading @@ -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; } Loading Loading @@ -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. Loading
tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java +24 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); Loading