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 5205f5259ae..369218b86ad 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