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

Commit 9d10009b authored by Weng Su's avatar Weng Su
Browse files

Show Hotspot network icon (QS Internet Dialog)

- Show Hotspot device type icons without signal strength (no Wi-Fi level)

Bug: 268550769
Bug: 297346236
Test: manual test
atest -c InternetAdapterTest \
         InternetDialogControllerTest

Change-Id: I2ab807ad62aaa69c0f254bfc43baa8d18b7f9afe
parent 6162ea96
Loading
Loading
Loading
Loading
+3 −13
Original line number Original line Diff line number Diff line
@@ -132,9 +132,6 @@ public class InternetAdapter extends RecyclerView.Adapter<InternetAdapter.Intern
        final Context mContext;
        final Context mContext;
        final InternetDialogController mInternetDialogController;
        final InternetDialogController mInternetDialogController;


        @VisibleForTesting
        protected WifiUtils.InternetIconInjector mWifiIconInjector;

        InternetViewHolder(View view, InternetDialogController internetDialogController) {
        InternetViewHolder(View view, InternetDialogController internetDialogController) {
            super(view);
            super(view);
            mContext = view.getContext();
            mContext = view.getContext();
@@ -146,12 +143,10 @@ public class InternetAdapter extends RecyclerView.Adapter<InternetAdapter.Intern
            mWifiTitleText = view.requireViewById(R.id.wifi_title);
            mWifiTitleText = view.requireViewById(R.id.wifi_title);
            mWifiSummaryText = view.requireViewById(R.id.wifi_summary);
            mWifiSummaryText = view.requireViewById(R.id.wifi_summary);
            mWifiEndIcon = view.requireViewById(R.id.wifi_end_icon);
            mWifiEndIcon = view.requireViewById(R.id.wifi_end_icon);
            mWifiIconInjector = mInternetDialogController.getWifiIconInjector();
        }
        }


        void onBind(@NonNull WifiEntry wifiEntry) {
        void onBind(@NonNull WifiEntry wifiEntry) {
            mWifiIcon.setImageDrawable(
            mWifiIcon.setImageDrawable(getWifiDrawable(wifiEntry));
                    getWifiDrawable(wifiEntry.getLevel(), wifiEntry.shouldShowXLevelIcon()));
            setWifiNetworkLayout(wifiEntry.getTitle(),
            setWifiNetworkLayout(wifiEntry.getTitle(),
                    Html.fromHtml(wifiEntry.getSummary(false), Html.FROM_HTML_MODE_LEGACY));
                    Html.fromHtml(wifiEntry.getSummary(false), Html.FROM_HTML_MODE_LEGACY));


@@ -213,13 +208,8 @@ public class InternetAdapter extends RecyclerView.Adapter<InternetAdapter.Intern
        }
        }


        @Nullable
        @Nullable
        Drawable getWifiDrawable(int level, boolean hasNoInternet) {
        Drawable getWifiDrawable(@NonNull WifiEntry wifiEntry) {
            // If the Wi-Fi level is equal to WIFI_LEVEL_UNREACHABLE(-1), then a null drawable
            Drawable drawable = mInternetDialogController.getWifiDrawable(wifiEntry);
            // will be returned.
            if (level == WifiEntry.WIFI_LEVEL_UNREACHABLE) {
                return null;
            }
            final Drawable drawable = mWifiIconInjector.getIcon(hasNoInternet, level);
            if (drawable == null) {
            if (drawable == null) {
                return null;
                return null;
            }
            }
+22 −9
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.qs.tiles.dialog;


import static com.android.settingslib.mobile.MobileMappings.getIconKey;
import static com.android.settingslib.mobile.MobileMappings.getIconKey;
import static com.android.settingslib.mobile.MobileMappings.mapIconSets;
import static com.android.settingslib.mobile.MobileMappings.mapIconSets;
import static com.android.settingslib.wifi.WifiUtils.getHotspotIconResource;
import static com.android.wifitrackerlib.WifiEntry.CONNECTED_STATE_CONNECTED;
import static com.android.wifitrackerlib.WifiEntry.CONNECTED_STATE_CONNECTED;


import android.animation.Animator;
import android.animation.Animator;
@@ -90,6 +91,7 @@ import com.android.systemui.toast.SystemUIToast;
import com.android.systemui.toast.ToastFactory;
import com.android.systemui.toast.ToastFactory;
import com.android.systemui.util.CarrierConfigTracker;
import com.android.systemui.util.CarrierConfigTracker;
import com.android.systemui.util.settings.GlobalSettings;
import com.android.systemui.util.settings.GlobalSettings;
import com.android.wifitrackerlib.HotspotNetworkEntry;
import com.android.wifitrackerlib.MergedCarrierEntry;
import com.android.wifitrackerlib.MergedCarrierEntry;
import com.android.wifitrackerlib.WifiEntry;
import com.android.wifitrackerlib.WifiEntry;


@@ -455,11 +457,7 @@ public class InternetDialogController implements AccessPointController.AccessPoi


    @Nullable
    @Nullable
    Drawable getInternetWifiDrawable(@NonNull WifiEntry wifiEntry) {
    Drawable getInternetWifiDrawable(@NonNull WifiEntry wifiEntry) {
        if (wifiEntry.getLevel() == WifiEntry.WIFI_LEVEL_UNREACHABLE) {
        Drawable drawable = getWifiDrawable(wifiEntry);
            return null;
        }
        final Drawable drawable =
                mWifiIconInjector.getIcon(wifiEntry.shouldShowXLevelIcon(), wifiEntry.getLevel());
        if (drawable == null) {
        if (drawable == null) {
            return null;
            return null;
        }
        }
@@ -467,6 +465,25 @@ public class InternetDialogController implements AccessPointController.AccessPoi
        return drawable;
        return drawable;
    }
    }


    /**
     * Returns a Wi-Fi icon {@link Drawable}.
     *
     * @param wifiEntry {@link WifiEntry}
     */
    @Nullable
    Drawable getWifiDrawable(@NonNull WifiEntry wifiEntry) {
        if (wifiEntry instanceof HotspotNetworkEntry) {
            int deviceType = ((HotspotNetworkEntry) wifiEntry).getDeviceType();
            return mContext.getDrawable(getHotspotIconResource(deviceType));
        }
        // If the Wi-Fi level is equal to WIFI_LEVEL_UNREACHABLE(-1), then a null drawable
        // will be returned.
        if (wifiEntry.getLevel() == WifiEntry.WIFI_LEVEL_UNREACHABLE) {
            return null;
        }
        return mWifiIconInjector.getIcon(wifiEntry.shouldShowXLevelIcon(), wifiEntry.getLevel());
    }

    Drawable getSignalStrengthDrawable(int subId) {
    Drawable getSignalStrengthDrawable(int subId) {
        Drawable drawable = mContext.getDrawable(
        Drawable drawable = mContext.getDrawable(
                R.drawable.ic_signal_strength_zero_bar_no_internet);
                R.drawable.ic_signal_strength_zero_bar_no_internet);
@@ -1315,10 +1332,6 @@ public class InternetDialogController implements AccessPointController.AccessPoi
        mDefaultDataSubId = defaultDataSubId;
        mDefaultDataSubId = defaultDataSubId;
    }
    }


    public WifiUtils.InternetIconInjector getWifiIconInjector() {
        return mWifiIconInjector;
    }

    boolean mayLaunchShareWifiSettings(WifiEntry wifiEntry) {
    boolean mayLaunchShareWifiSettings(WifiEntry wifiEntry) {
        Intent intent = getConfiguratorQrCodeGeneratorIntentOrNull(wifiEntry);
        Intent intent = getConfiguratorQrCodeGeneratorIntentOrNull(wifiEntry);
        if (intent == null) {
        if (intent == null) {
+7 −24
Original line number Original line Diff line number Diff line
@@ -5,14 +5,9 @@ import static com.android.systemui.qs.tiles.dialog.InternetDialogController.MAX_
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertThat;


import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.when;


@@ -25,7 +20,6 @@ import android.widget.LinearLayout;


import androidx.test.filters.SmallTest;
import androidx.test.filters.SmallTest;


import com.android.settingslib.wifi.WifiUtils;
import com.android.systemui.R;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.SysuiTestCase;
import com.android.wifitrackerlib.WifiEntry;
import com.android.wifitrackerlib.WifiEntry;
@@ -66,7 +60,7 @@ public class InternetAdapterTest extends SysuiTestCase {
    @Mock
    @Mock
    private InternetDialogController mInternetDialogController;
    private InternetDialogController mInternetDialogController;
    @Mock
    @Mock
    private WifiUtils.InternetIconInjector mWifiIconInjector;
    private Drawable mWifiDrawable;
    @Mock
    @Mock
    private Drawable mGearIcon;
    private Drawable mGearIcon;
    @Mock
    @Mock
@@ -90,7 +84,6 @@ public class InternetAdapterTest extends SysuiTestCase {
        mInternetAdapter = new InternetAdapter(mInternetDialogController);
        mInternetAdapter = new InternetAdapter(mInternetDialogController);
        mViewHolder = mInternetAdapter.onCreateViewHolder(new LinearLayout(mContext), 0);
        mViewHolder = mInternetAdapter.onCreateViewHolder(new LinearLayout(mContext), 0);
        mInternetAdapter.setWifiEntries(Arrays.asList(mWifiEntry), 1 /* wifiEntriesCount */);
        mInternetAdapter.setWifiEntries(Arrays.asList(mWifiEntry), 1 /* wifiEntriesCount */);
        mViewHolder.mWifiIconInjector = mWifiIconInjector;
    }
    }


    @Test
    @Test
@@ -125,31 +118,21 @@ public class InternetAdapterTest extends SysuiTestCase {
    }
    }


    @Test
    @Test
    public void onBindViewHolder_wifiLevelUnreachable_shouldNotGetWifiIcon() {
    public void onBindViewHolder_getWifiDrawableNull_noCrash() {
        reset(mWifiIconInjector);
        when(mInternetDialogController.getWifiDrawable(any())).thenReturn(null);
        when(mWifiEntry.getLevel()).thenReturn(WifiEntry.WIFI_LEVEL_UNREACHABLE);


        mInternetAdapter.onBindViewHolder(mViewHolder, 0);
        mInternetAdapter.onBindViewHolder(mViewHolder, 0);


        verify(mWifiIconInjector, never()).getIcon(anyBoolean(), anyInt());
        assertThat(mViewHolder.mWifiIcon.getDrawable()).isNull();
    }
    }


    @Test
    @Test
    public void onBindViewHolder_shouldNotShowXLevelIcon_getIconWithInternet() {
    public void onBindViewHolder_getWifiDrawableNotNull_setWifiIconDrawable() {
        when(mWifiEntry.shouldShowXLevelIcon()).thenReturn(false);
        when(mInternetDialogController.getWifiDrawable(any())).thenReturn(mWifiDrawable);


        mInternetAdapter.onBindViewHolder(mViewHolder, 0);
        mInternetAdapter.onBindViewHolder(mViewHolder, 0);


        verify(mWifiIconInjector).getIcon(eq(false) /* noInternet */, anyInt());
        assertThat(mViewHolder.mWifiIcon.getDrawable()).isEqualTo(mWifiDrawable);
    }

    @Test
    public void onBindViewHolder_shouldShowXLevelIcon_getIconWithNoInternet() {
        when(mWifiEntry.shouldShowXLevelIcon()).thenReturn(true);

        mInternetAdapter.onBindViewHolder(mViewHolder, 0);

        verify(mWifiIconInjector).getIcon(eq(true) /* noInternet */, anyInt());
    }
    }


    @Test
    @Test
+14 −3
Original line number Original line Diff line number Diff line
package com.android.systemui.qs.tiles.dialog;
package com.android.systemui.qs.tiles.dialog;


import static android.net.wifi.sharedconnectivity.app.NetworkProviderInfo.DEVICE_TYPE_PHONE;
import static android.provider.Settings.Global.AIRPLANE_MODE_ON;
import static android.provider.Settings.Global.AIRPLANE_MODE_ON;
import static android.telephony.SignalStrength.NUM_SIGNAL_STRENGTH_BINS;
import static android.telephony.SignalStrength.NUM_SIGNAL_STRENGTH_BINS;
import static android.telephony.SignalStrength.SIGNAL_STRENGTH_GREAT;
import static android.telephony.SignalStrength.SIGNAL_STRENGTH_GREAT;
import static android.telephony.SignalStrength.SIGNAL_STRENGTH_POOR;
import static android.telephony.SignalStrength.SIGNAL_STRENGTH_POOR;


import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
import static com.android.settingslib.wifi.WifiUtils.getHotspotIconResource;
import static com.android.systemui.qs.tiles.dialog.InternetDialogController.TOAST_PARAMS_HORIZONTAL_WEIGHT;
import static com.android.systemui.qs.tiles.dialog.InternetDialogController.TOAST_PARAMS_HORIZONTAL_WEIGHT;
import static com.android.systemui.qs.tiles.dialog.InternetDialogController.TOAST_PARAMS_VERTICAL_WEIGHT;
import static com.android.systemui.qs.tiles.dialog.InternetDialogController.TOAST_PARAMS_VERTICAL_WEIGHT;
import static com.android.wifitrackerlib.WifiEntry.WIFI_LEVEL_MAX;
import static com.android.wifitrackerlib.WifiEntry.WIFI_LEVEL_MAX;
@@ -77,6 +79,7 @@ import com.android.systemui.util.CarrierConfigTracker;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.settings.GlobalSettings;
import com.android.systemui.util.settings.GlobalSettings;
import com.android.systemui.util.time.FakeSystemClock;
import com.android.systemui.util.time.FakeSystemClock;
import com.android.wifitrackerlib.HotspotNetworkEntry;
import com.android.wifitrackerlib.MergedCarrierEntry;
import com.android.wifitrackerlib.MergedCarrierEntry;
import com.android.wifitrackerlib.WifiEntry;
import com.android.wifitrackerlib.WifiEntry;


@@ -524,12 +527,20 @@ public class InternetDialogControllerTest extends SysuiTestCase {
    }
    }


    @Test
    @Test
    public void getInternetWifiDrawable_withWifiLevelUnreachable_returnNull() {
    public void getWifiDrawable_withWifiLevelUnreachable_returnNull() {
        when(mConnectedEntry.getLevel()).thenReturn(WIFI_LEVEL_UNREACHABLE);
        when(mConnectedEntry.getLevel()).thenReturn(WIFI_LEVEL_UNREACHABLE);


        Drawable drawable = mInternetDialogController.getInternetWifiDrawable(mConnectedEntry);
        assertThat(mInternetDialogController.getWifiDrawable(mConnectedEntry)).isNull();
    }

    @Test
    public void getWifiDrawable_withHotspotNetworkEntry_returnHotspotDrawable() {
        HotspotNetworkEntry entry = mock(HotspotNetworkEntry.class);
        when(entry.getDeviceType()).thenReturn(DEVICE_TYPE_PHONE);
        Drawable hotspotDrawable = mock(Drawable.class);
        mTestableResources.addOverride(getHotspotIconResource(DEVICE_TYPE_PHONE), hotspotDrawable);


        assertThat(drawable).isNull();
        assertThat(mInternetDialogController.getWifiDrawable(entry)).isEqualTo(hotspotDrawable);
    }
    }


    @Test
    @Test