Merge "Add place holder rows to wifi slice."
diff --git a/src/com/android/settings/homepage/CardContentLoader.java b/src/com/android/settings/homepage/CardContentLoader.java
index 401e53c..22cde86 100644
--- a/src/com/android/settings/homepage/CardContentLoader.java
+++ b/src/com/android/settings/homepage/CardContentLoader.java
@@ -154,6 +154,7 @@
 
         final Slice slice = Slice.bindSlice(mContext, uri, SUPPORTED_SPECS);
         if (slice == null || slice.hasHint(HINT_ERROR)) {
+            Log.w(TAG, "Failed to bind slice, not eligible for display " + uri);
             return false;
         }
 
diff --git a/src/com/android/settings/wifi/WifiSlice.java b/src/com/android/settings/wifi/WifiSlice.java
index 536be6f..b055bcf 100644
--- a/src/com/android/settings/wifi/WifiSlice.java
+++ b/src/com/android/settings/wifi/WifiSlice.java
@@ -35,6 +35,7 @@
 import android.provider.SettingsSlicesContract;
 import android.text.TextUtils;
 
+import androidx.annotation.VisibleForTesting;
 import androidx.core.graphics.drawable.IconCompat;
 import androidx.slice.Slice;
 import androidx.slice.builders.ListBuilder;
@@ -61,6 +62,7 @@
  */
 public class WifiSlice implements CustomSliceable {
 
+
     /**
      * Backing Uri for the Wifi Slice.
      */
@@ -71,6 +73,9 @@
             .appendPath(KEY_WIFI)
             .build();
 
+    @VisibleForTesting
+    static final int DEFAULT_EXPANDED_ROW_COUNT = 3;
+
     private final Context mContext;
 
     public WifiSlice(Context context) {
@@ -115,26 +120,43 @@
                         .addEndItem(toggleSliceAction)
                         .setPrimaryAction(primarySliceAction));
 
-        if (isWifiEnabled) {
-            final List<AccessPoint> result = getBackgroundWorker().getResults();
-            if (result != null && !result.isEmpty()) {
-                for (AccessPoint ap : result) {
-                    listBuilder.addRow(getAccessPointRow(ap));
-                }
-                listBuilder.setSeeMoreAction(primaryAction);
+        if (!isWifiEnabled) {
+            return listBuilder.build();
+        }
+
+        List<AccessPoint> result = getBackgroundWorker().getResults();
+        if (result == null) {
+            result = new ArrayList<>();
+        }
+        final int apCount = result.size();
+        // Add AP rows
+        final CharSequence placeholder = mContext.getText(R.string.summary_placeholder);
+        for (int i = 0; i < DEFAULT_EXPANDED_ROW_COUNT; i++) {
+            if (i < apCount) {
+                listBuilder.addRow(getAccessPointRow(result.get(i)));
+            } else {
+                listBuilder.addRow(new RowBuilder()
+                        .setTitle(placeholder)
+                        .setSubtitle(placeholder));
             }
         }
-        return listBuilder.build();
+        // Add more button
+        return listBuilder
+                .setSeeMoreAction(primaryAction)
+                .build();
     }
 
     private RowBuilder getAccessPointRow(AccessPoint accessPoint) {
         final String title = accessPoint.getConfigName();
         final IconCompat levelIcon = IconCompat.createWithResource(mContext,
                 com.android.settingslib.Utils.getWifiIconResource(accessPoint.getLevel()));
+        final CharSequence apSummary = accessPoint.getSettingsSummary();
         final RowBuilder rowBuilder = new RowBuilder()
                 .setTitleItem(levelIcon, ListBuilder.ICON_IMAGE)
                 .setTitle(title)
-                .setSubtitle(accessPoint.getSettingsSummary())
+                .setSubtitle(!TextUtils.isEmpty(apSummary)
+                        ? apSummary
+                        : mContext.getText(R.string.summary_placeholder))
                 .setPrimaryAction(new SliceAction(
                         getAccessPointAction(accessPoint), levelIcon, title));
 
diff --git a/tests/robotests/src/com/android/settings/testutils/SliceTester.java b/tests/robotests/src/com/android/settings/testutils/SliceTester.java
index 49a84f2..892f948 100644
--- a/tests/robotests/src/com/android/settings/testutils/SliceTester.java
+++ b/tests/robotests/src/com/android/settings/testutils/SliceTester.java
@@ -213,7 +213,7 @@
             for (SliceItem subTitleItem : titleItems) {
                 if (TextUtils.equals(subTitleItem.getText(), title)) {
                     hasTitle = true;
-                    assertThat(subTitleItem.getText()).isEqualTo(title);
+                    break;
                 }
             }
         }
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiSliceTest.java b/tests/robotests/src/com/android/settings/wifi/WifiSliceTest.java
index 742c8ad..bd1ad46 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiSliceTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiSliceTest.java
@@ -17,6 +17,11 @@
 
 package com.android.settings.wifi;
 
+import static android.app.slice.Slice.HINT_LIST_ITEM;
+import static android.app.slice.SliceItem.FORMAT_SLICE;
+
+import static com.android.settings.wifi.WifiSlice.DEFAULT_EXPANDED_ROW_COUNT;
+
 import static com.google.common.truth.Truth.assertThat;
 
 import android.content.Context;
@@ -29,6 +34,7 @@
 import androidx.slice.SliceMetadata;
 import androidx.slice.SliceProvider;
 import androidx.slice.core.SliceAction;
+import androidx.slice.core.SliceQuery;
 import androidx.slice.widget.SliceLiveData;
 
 import com.android.settings.R;
@@ -60,7 +66,7 @@
     }
 
     @Test
-    public void getWifiSlice_correctSliceContent() {
+    public void getWifiSlice_shouldHaveTitleAndToggle() {
         final Slice wifiSlice = mWifiSlice.getSlice();
         final SliceMetadata metadata = SliceMetadata.from(mContext, wifiSlice);
 
@@ -77,6 +83,17 @@
     }
 
     @Test
+    public void getWifiSlice_noAp_shouldReturnPlaceholder() {
+        final Slice wifiSlice = mWifiSlice.getSlice();
+
+        int rows = SliceQuery.findAll(wifiSlice, FORMAT_SLICE, HINT_LIST_ITEM,
+                null /* nonHints */).size();
+        // All AP rows + title row + see more row
+        // (see more row will drop the last AP row, thus -1)
+        assertThat(rows).isEqualTo(DEFAULT_EXPANDED_ROW_COUNT - 1 + 2);
+    }
+
+    @Test
     public void handleUriChange_updatesWifi() {
         final Intent intent = mWifiSlice.getIntent();
         intent.putExtra(android.app.slice.Slice.EXTRA_TOGGLE_STATE, true);