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

Commit a2084a63 authored by Weng Su's avatar Weng Su
Browse files

[Provider model] Add "See all" text link to Internet Panel

- Add "See all" text link at the bottom of the network providers list
  - Don't show "See all" text link if the Wi-Fi network is empty

Bug: 188710392
Test: manual test
atest -c ProviderModelSliceTest

Change-Id: If99c1e6597b4d2ef6a916fbdab3df9cfad8b464e
parent 7b8c367d
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
<!--
    Copyright (C) 2021 The Android Open Source Project

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24"
        android:viewportHeight="24"
        android:autoMirrored="true"
        android:tint="?attr/colorControlNormal">
    <path
        android:fillColor="@android:color/white"
        android:pathData="M6.23,20.23l1.77,1.77l10,-10l-10,-10l-1.77,1.77l8.23,8.23z"/>
</vector>
+30 −1
Original line number Diff line number Diff line
@@ -22,9 +22,12 @@ import static android.app.slice.Slice.EXTRA_TOGGLE_STATE;
import static com.android.settings.slices.CustomSliceRegistry.PROVIDER_MODEL_SLICE_URI;

import android.annotation.ColorInt;
import android.app.PendingIntent;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.telephony.SubscriptionManager;
@@ -150,11 +153,12 @@ public class ProviderModelSlice extends WifiSlice {
            final List<WifiSliceItem> disconnectedWifiList = wifiList.stream()
                    .filter(wifiSliceItem -> wifiSliceItem.getConnectedState()
                            != WifiEntry.CONNECTED_STATE_CONNECTED)
                    .limit(maxListSize)
                    .limit(maxListSize - 1)
                    .collect(Collectors.toList());
            for (WifiSliceItem item : disconnectedWifiList) {
                listBuilder.addRow(getWifiSliceItemRow(item));
            }
            listBuilder.addRow(getSeeAllRow());
        }
        return listBuilder.build();
    }
@@ -252,6 +256,31 @@ public class ProviderModelSlice extends WifiSlice {
                .setSubtitle(mContext.getText(R.string.to_switch_networks_disconnect_ethernet));
    }

    protected ListBuilder.RowBuilder getSeeAllRow() {
        final CharSequence title = mContext.getText(R.string.previous_connected_see_all);
        final IconCompat icon = getSeeAllIcon();
        return new ListBuilder.RowBuilder()
                .setTitleItem(icon, ListBuilder.ICON_IMAGE)
                .setTitle(title)
                .setPrimaryAction(getPrimaryAction(icon, title));
    }

    protected IconCompat getSeeAllIcon() {
        final Drawable drawable = mContext.getDrawable(R.drawable.ic_arrow_forward);
        if (drawable != null) {
            drawable.setTint(
                    Utils.getColorAttrDefaultColor(mContext, android.R.attr.colorControlNormal));
            return Utils.createIconWithDrawable(drawable);
        }
        return Utils.createIconWithDrawable(new ColorDrawable(Color.TRANSPARENT));
    }

    protected SliceAction getPrimaryAction(IconCompat icon, CharSequence title) {
        final PendingIntent intent = PendingIntent.getActivity(mContext, 0 /* requestCode */,
                getIntent(), PendingIntent.FLAG_IMMUTABLE /* flags */);
        return SliceAction.createDeeplink(intent, icon, ListBuilder.ICON_IMAGE, title);
    }

    @Override
    protected ListBuilder.RowBuilder getWifiSliceItemRow(WifiSliceItem wifiSliceItem) {
        final CharSequence title = wifiSliceItem.getTitle();
+1 −1
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ public class NetworkProviderWorker extends WifiScanWorker implements
        DataConnectivityListener.Client, InternetUpdater.InternetChangeListener,
        SubscriptionsChangeListener.SubscriptionsChangeListenerClient {
    private static final String TAG = "NetworkProviderWorker";
    private static final int PROVIDER_MODEL_DEFAULT_EXPANDED_ROW_COUNT = 4;
    private static final int PROVIDER_MODEL_DEFAULT_EXPANDED_ROW_COUNT = 5;
    private DataContentObserver mMobileDataObserver;
    private SignalStrengthListener mSignalStrengthListener;
    private SubscriptionsChangeListener mSubscriptionsListener;
+28 −10
Original line number Diff line number Diff line
@@ -153,6 +153,7 @@ public class ProviderModelSliceTest {

        assertThat(slice).isNotNull();
        verify(mListBuilder, times(1)).addRow(mMockCarrierRowBuild);
        assertThat(mMockProviderModelSlice.hasSeeAllRow()).isFalse();
    }

    @Test
@@ -166,11 +167,12 @@ public class ProviderModelSliceTest {

        assertThat(slice).isNotNull();
        verify(mListBuilder, times(1)).addRow(mMockCarrierRowBuild);
        assertThat(mMockProviderModelSlice.hasSeeAllRow()).isFalse();
    }

    @Test
    @UiThreadTest
    public void getSlice_haveTwoWifiAndOneCarrier_getCarrierAndTwoWiFi() {
    public void getSlice_haveTwoWifiAndOneCarrier_getCarrierAndTwoWiFiAndSeeAll() {
        mWifiList.clear();
        mockWifiItemCondition(mMockWifiSliceItem1, "wifi1", "wifi1",
                WifiEntry.CONNECTED_STATE_CONNECTED, "wifi1_key", true);
@@ -185,12 +187,13 @@ public class ProviderModelSliceTest {

        assertThat(slice).isNotNull();
        verify(mListBuilder, times(1)).addRow(mMockCarrierRowBuild);
        verify(mListBuilder, times(3)).addRow(any(ListBuilder.RowBuilder.class));
        verify(mListBuilder, times(4)).addRow(any(ListBuilder.RowBuilder.class));
        assertThat(mMockProviderModelSlice.hasSeeAllRow()).isTrue();
    }

    @Test
    @UiThreadTest
    public void getSlice_haveOneConnectedWifiAndTwoDisconnectedWifiAndNoCarrier_getTwoRow() {
    public void getSlice_haveOneConnectedWifiAndTwoDisconnectedWifiAndNoCarrier_getFourRow() {
        mWifiList.clear();
        mockWifiItemCondition(mMockWifiSliceItem1, "wifi1", "wifi1",
                WifiEntry.CONNECTED_STATE_CONNECTED, "wifi1_key", true);
@@ -207,12 +210,13 @@ public class ProviderModelSliceTest {
        final Slice slice = mMockProviderModelSlice.getSlice();

        assertThat(slice).isNotNull();
        verify(mListBuilder, times(3)).addRow(any(ListBuilder.RowBuilder.class));
        verify(mListBuilder, times(4)).addRow(any(ListBuilder.RowBuilder.class));
        assertThat(mMockProviderModelSlice.hasSeeAllRow()).isTrue();
    }

    @Test
    @UiThreadTest
    public void getSlice_haveTwoDisconnectedWifiAndNoCarrier_getTwoRow() {
    public void getSlice_haveTwoDisconnectedWifiAndNoCarrier_getThreeRow() {
        mWifiList.clear();
        mockWifiItemCondition(mMockWifiSliceItem1, "wifi1", "wifi1",
                WifiEntry.CONNECTED_STATE_DISCONNECTED, "wifi1_key", true);
@@ -226,12 +230,13 @@ public class ProviderModelSliceTest {
        final Slice slice = mMockProviderModelSlice.getSlice();

        assertThat(slice).isNotNull();
        verify(mListBuilder, times(2)).addRow(any(ListBuilder.RowBuilder.class));
        verify(mListBuilder, times(3)).addRow(any(ListBuilder.RowBuilder.class));
        assertThat(mMockProviderModelSlice.hasSeeAllRow()).isTrue();
    }

    @Test
    @UiThreadTest
    public void getSlice_haveEthernetAndCarrierAndTwoDisconnectedWifi_getFourRow() {
    public void getSlice_haveEthernetAndCarrierAndTwoDisconnectedWifi_getFiveRow() {
        mWifiList.clear();
        mockWifiItemCondition(mMockWifiSliceItem1, "wifi1", "wifi1",
                WifiEntry.CONNECTED_STATE_DISCONNECTED, "wifi1_key", true);
@@ -249,12 +254,13 @@ public class ProviderModelSliceTest {
        assertThat(slice).isNotNull();
        assertThat(mMockProviderModelSlice.hasCreateEthernetRow()).isTrue();
        verify(mListBuilder, times(1)).addRow(mMockCarrierRowBuild);
        verify(mListBuilder, times(4)).addRow(any(ListBuilder.RowBuilder.class));
        verify(mListBuilder, times(5)).addRow(any(ListBuilder.RowBuilder.class));
        assertThat(mMockProviderModelSlice.hasSeeAllRow()).isTrue();
    }

    @Test
    @UiThreadTest
    public void getSlice_haveEthernetAndCarrierAndConnectedWifiAndDisconnectedWifi_getFourRow() {
    public void getSlice_haveEthernetAndCarrierAndConnectedWifiAndDisconnectedWifi_getFiveRow() {
        mWifiList.clear();
        mockWifiItemCondition(mMockWifiSliceItem1, "wifi1", "wifi1",
                WifiEntry.CONNECTED_STATE_CONNECTED, "wifi1_key", true);
@@ -272,7 +278,8 @@ public class ProviderModelSliceTest {
        assertThat(slice).isNotNull();
        assertThat(mMockProviderModelSlice.hasCreateEthernetRow()).isTrue();
        verify(mListBuilder, times(1)).addRow(mMockCarrierRowBuild);
        verify(mListBuilder, times(4)).addRow(any(ListBuilder.RowBuilder.class));
        verify(mListBuilder, times(5)).addRow(any(ListBuilder.RowBuilder.class));
        assertThat(mMockProviderModelSlice.hasSeeAllRow()).isTrue();
    }

    @Test
@@ -334,6 +341,7 @@ public class ProviderModelSliceTest {
    public class MockProviderModelSlice extends ProviderModelSlice {
        private MockNetworkProviderWorker mNetworkProviderWorker;
        private boolean mHasCreateEthernetRow;
        private boolean mHasSeeAllRow;

        MockProviderModelSlice(Context context, MockNetworkProviderWorker networkProviderWorker) {
            super(context);
@@ -356,9 +364,19 @@ public class ProviderModelSliceTest {
            return super.createEthernetRow();
        }

        @Override
        protected ListBuilder.RowBuilder getSeeAllRow() {
            mHasSeeAllRow = true;
            return super.getSeeAllRow();
        }

        public boolean hasCreateEthernetRow() {
            return mHasCreateEthernetRow;
        }

        public boolean hasSeeAllRow() {
            return mHasSeeAllRow;
        }
    }

    @Test