Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f5023f38 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Show Hotspot network icon (Wi-Fi Slice)" into udc-qpr-dev

parents ab684e14 c8265588
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -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);
+28 −0
Original line number Diff line number Diff line
@@ -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.
+24 −0
Original line number Diff line number Diff line
@@ -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);