Ensure if text is loading the textview is still taking space

Test: manual - loadlist, loadgrid and fyft app
Bug: 74212891
Change-Id: Iad9aa986073549253d7e52f27da16ed993cbcdf8
diff --git a/samples/SupportSliceDemos/src/main/java/com/example/androidx/slice/demos/SampleSliceProvider.java b/samples/SupportSliceDemos/src/main/java/com/example/androidx/slice/demos/SampleSliceProvider.java
index a9008cb..f472edf 100644
--- a/samples/SupportSliceDemos/src/main/java/com/example/androidx/slice/demos/SampleSliceProvider.java
+++ b/samples/SupportSliceDemos/src/main/java/com/example/androidx/slice/demos/SampleSliceProvider.java
@@ -33,6 +33,7 @@
 import android.os.Handler;
 import android.provider.Settings;
 import android.text.SpannableString;
+import android.text.TextUtils;
 import android.text.format.DateUtils;
 import android.text.style.ForegroundColorSpan;
 import android.util.SparseArray;
@@ -580,27 +581,34 @@
             update(1500, mListSummaries, 1, "12 miles | 12 min | $9.00", sliceUri, r);
             update(1700, mListSummaries, 2, "5 miles | 10 min | $8.00", sliceUri, r);
         }
-        Slice s = new ListBuilder(getContext(), sliceUri, -TimeUnit.MINUTES.toMillis(5))
+        CharSequence work = mListSummaries.get(0, "");
+        CharSequence home = mListSummaries.get(1, "");
+        CharSequence school = mListSummaries.get(2, "");
+        Slice s = new ListBuilder(getContext(), sliceUri, -TimeUnit.MINUTES.toMillis(50))
                 .addRow(b -> b
                         .setTitle("Work")
-                        .setSubtitle(mListSummaries.get(0, ""), updating)
+                        .setSubtitle(work,
+                                updating || TextUtils.isEmpty(work))
                         .addEndItem(Icon.createWithResource(getContext(), R.drawable.ic_work),
                                 ICON_IMAGE))
                 .addRow(b -> b
                         .setTitle("Home")
-                        .setSubtitle(mListSummaries.get(1, ""), updating)
+                        .setSubtitle(mListSummaries.get(1, ""),
+                                updating || TextUtils.isEmpty(home))
                         .addEndItem(
                                 Icon.createWithResource(getContext(), R.drawable.ic_home),
                                 ICON_IMAGE))
                 .addRow(b -> b
                         .setTitle("School")
-                        .setSubtitle(mListSummaries.get(2, ""), updating)
+                        .setSubtitle(mListSummaries.get(2, ""),
+                                updating || TextUtils.isEmpty(school))
                         .addEndItem(Icon.createWithResource(getContext(), R.drawable.ic_school),
                                 ICON_IMAGE))
                 .build();
         return s;
     }
 
+    // TODO: Should test large image grids
     private Slice createLoadingGridSlice(Uri sliceUri) {
         boolean updating = mGridLastUpdate == 0
                 || mGridLastUpdate < (System.currentTimeMillis() - 10 * System.currentTimeMillis());
@@ -613,26 +621,36 @@
             update(1500, mGridSummaries, 3, "33 min", sliceUri, r);
             update(1000, mGridSummaries, 4, "12 min", sliceUri, r);
         }
+        CharSequence title = mGridSummaries.get(0, "");
+        CharSequence subtitle = mGridSummaries.get(1, "");
+        CharSequence home = mGridSummaries.get(2, "");
+        CharSequence work = mGridSummaries.get(3, "");
+        CharSequence school = mGridSummaries.get(4, "");
         Slice s = new ListBuilder(getContext(), sliceUri, INFINITY)
                 .setHeader(hb -> hb
-                        .setTitle(mGridSummaries.get(0, ""), updating)
-                        .setSubtitle(mGridSummaries.get(1, ""), updating))
+                        .setTitle(title,
+                                updating || TextUtils.isEmpty(title))
+                        .setSubtitle(subtitle,
+                                updating || TextUtils.isEmpty(subtitle)))
                 .addGrid(gb -> gb
                     .addCell(cb -> cb
                             .addImage(Icon.createWithResource(getContext(), R.drawable.ic_home),
                                     ICON_IMAGE)
                             .addTitleText("Home")
-                            .addText(mGridSummaries.get(2, ""), updating))
+                            .addText(home,
+                                    updating || TextUtils.isEmpty(home)))
                     .addCell(cb -> cb
                             .addImage(Icon.createWithResource(getContext(), R.drawable.ic_work),
                                     ICON_IMAGE)
                             .addTitleText("Work")
-                            .addText(mGridSummaries.get(3, ""), updating))
+                            .addText(work,
+                                    updating || TextUtils.isEmpty(work)))
                     .addCell(cb -> cb
                             .addImage(Icon.createWithResource(getContext(), R.drawable.ic_school),
                                     ICON_IMAGE)
                             .addTitleText("School")
-                            .addText(mGridSummaries.get(4, ""), updating)))
+                            .addText(school,
+                                    updating || TextUtils.isEmpty(school))))
                     .build();
         return s;
     }
diff --git a/slices/view/src/main/java/androidx/slice/widget/RowContent.java b/slices/view/src/main/java/androidx/slice/widget/RowContent.java
index 8f30f53..7565895 100644
--- a/slices/view/src/main/java/androidx/slice/widget/RowContent.java
+++ b/slices/view/src/main/java/androidx/slice/widget/RowContent.java
@@ -17,6 +17,7 @@
 package androidx.slice.widget;
 
 import static android.app.slice.Slice.HINT_ACTIONS;
+import static android.app.slice.Slice.HINT_PARTIAL;
 import static android.app.slice.Slice.HINT_SEE_MORE;
 import static android.app.slice.Slice.HINT_SHORTCUT;
 import static android.app.slice.Slice.HINT_SUMMARY;
@@ -273,7 +274,9 @@
     }
 
     private static boolean hasText(SliceItem textSlice) {
-        return textSlice != null && !TextUtils.isEmpty(textSlice.getText());
+        return textSlice != null
+                && (textSlice.hasHint(HINT_PARTIAL)
+                    || !TextUtils.isEmpty(textSlice.getText()));
     }
 
     /**
diff --git a/slices/view/src/main/java/androidx/slice/widget/RowView.java b/slices/view/src/main/java/androidx/slice/widget/RowView.java
index b5f55a7..71d7fb0 100644
--- a/slices/view/src/main/java/androidx/slice/widget/RowView.java
+++ b/slices/view/src/main/java/androidx/slice/widget/RowView.java
@@ -18,6 +18,7 @@
 
 import static android.app.slice.Slice.EXTRA_TOGGLE_STATE;
 import static android.app.slice.Slice.HINT_NO_TINT;
+import static android.app.slice.Slice.HINT_PARTIAL;
 import static android.app.slice.Slice.HINT_SHORTCUT;
 import static android.app.slice.Slice.SUBTYPE_TOGGLE;
 import static android.app.slice.SliceItem.FORMAT_ACTION;
@@ -318,7 +319,9 @@
                     SliceViewUtil.getRelativeTimeString(mLastUpdated));
         }
         CharSequence subtitle = subtitleItem != null ? subtitleItem.getText() : null;
-        if (!TextUtils.isEmpty(subtitle)) {
+        boolean subtitleExists = !TextUtils.isEmpty(subtitle)
+                        || (subtitleItem != null && subtitleItem.hasHint(HINT_PARTIAL));
+        if (subtitleExists) {
             mSecondaryText.setText(subtitle);
             mSecondaryText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mIsHeader
                     ? mHeaderSubtitleSize
@@ -337,7 +340,7 @@
             mLastUpdatedText.setTextColor(mSubtitleColor);
         }
         mLastUpdatedText.setVisibility(TextUtils.isEmpty(subtitleTimeString) ? GONE : VISIBLE);
-        mSecondaryText.setVisibility(TextUtils.isEmpty(subtitle) ? GONE : VISIBLE);
+        mSecondaryText.setVisibility(subtitleExists ? VISIBLE : GONE);
     }
 
     private void addRange(final SliceItem range) {