From a2084a63c6ba511d3d657280ac886998eb54baf3 Mon Sep 17 00:00:00 2001 From: Weng Su Date: Wed, 26 May 2021 05:29:20 +0800 Subject: [PATCH] [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 --- res/drawable/ic_arrow_forward.xml | 26 +++++++++++++ .../settings/network/ProviderModelSlice.java | 31 ++++++++++++++- .../telephony/NetworkProviderWorker.java | 2 +- .../network/ProviderModelSliceTest.java | 38 ++++++++++++++----- 4 files changed, 85 insertions(+), 12 deletions(-) create mode 100644 res/drawable/ic_arrow_forward.xml diff --git a/res/drawable/ic_arrow_forward.xml b/res/drawable/ic_arrow_forward.xml new file mode 100644 index 00000000000..078cb693837 --- /dev/null +++ b/res/drawable/ic_arrow_forward.xml @@ -0,0 +1,26 @@ + + + + diff --git a/src/com/android/settings/network/ProviderModelSlice.java b/src/com/android/settings/network/ProviderModelSlice.java index 6b6180b3c5e..b778a05a96c 100644 --- a/src/com/android/settings/network/ProviderModelSlice.java +++ b/src/com/android/settings/network/ProviderModelSlice.java @@ -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 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(); diff --git a/src/com/android/settings/network/telephony/NetworkProviderWorker.java b/src/com/android/settings/network/telephony/NetworkProviderWorker.java index 464ee75cc7d..49d286d6e5b 100644 --- a/src/com/android/settings/network/telephony/NetworkProviderWorker.java +++ b/src/com/android/settings/network/telephony/NetworkProviderWorker.java @@ -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; diff --git a/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java b/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java index 4b06acfb66c..fb17e34a9bc 100644 --- a/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java +++ b/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java @@ -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