Resolver - Center text with no sublabel

Also avoid breaking sharesheet, as the sublabel was intentionally
being marked visible with no text for better alignment.

Fixes: 149622636
Test: manual + atest ResolverActivityTest
Change-Id: Id65058de70cf70c4cb18940e75f4c5051f1da25c
diff --git a/core/java/com/android/internal/app/ChooserListAdapter.java b/core/java/com/android/internal/app/ChooserListAdapter.java
index d6ff7b1..6de3480 100644
--- a/core/java/com/android/internal/app/ChooserListAdapter.java
+++ b/core/java/com/android/internal/app/ChooserListAdapter.java
@@ -828,6 +828,12 @@
         return mServiceTargets.get(value).getChooserTarget();
     }
 
+    protected boolean alwaysShowSubLabel() {
+        // Always show a subLabel for visual consistency across list items. Show an empty
+        // subLabel if the subLabel is the same as the label
+        return true;
+    }
+
     /**
      * Rather than fully sorting the input list, this sorting task will put the top k elements
      * in the head of input list and fill the tail with other elements in undetermined order.
diff --git a/core/java/com/android/internal/app/ResolverListAdapter.java b/core/java/com/android/internal/app/ResolverListAdapter.java
index fc8cafd..04a186c 100644
--- a/core/java/com/android/internal/app/ResolverListAdapter.java
+++ b/core/java/com/android/internal/app/ResolverListAdapter.java
@@ -540,7 +540,7 @@
                 && !((DisplayResolveInfo) info).hasDisplayLabel()) {
             getLoadLabelTask((DisplayResolveInfo) info, holder).execute();
         } else {
-            holder.bindLabel(info.getDisplayLabel(), info.getExtendedInfo());
+            holder.bindLabel(info.getDisplayLabel(), info.getExtendedInfo(), alwaysShowSubLabel());
             if (info instanceof SelectableTargetInfo) {
                 // direct share targets should append the application name for a better readout
                 DisplayResolveInfo rInfo = ((SelectableTargetInfo) info).getDisplayResolveInfo();
@@ -642,6 +642,10 @@
         mIsTabLoaded = true;
     }
 
+    protected boolean alwaysShowSubLabel() {
+        return false;
+    }
+
     /**
      * Necessary methods to communicate between {@link ResolverListAdapter}
      * and {@link ResolverActivity}.
@@ -684,18 +688,16 @@
             icon = (ImageView) view.findViewById(R.id.icon);
         }
 
-        public void bindLabel(CharSequence label, CharSequence subLabel) {
+        public void bindLabel(CharSequence label, CharSequence subLabel, boolean showSubLabel) {
             if (!TextUtils.equals(text.getText(), label)) {
                 text.setText(label);
             }
 
-            // Always show a subLabel for visual consistency across list items. Show an empty
-            // subLabel if the subLabel is the same as the label
             if (TextUtils.equals(label, subLabel)) {
-                subLabel = null;
+                subLabel = "";
             }
 
-            if (!TextUtils.equals(text2.getText(), subLabel)) {
+            if (showSubLabel || !TextUtils.equals(text2.getText(), subLabel)) {
                 text2.setVisibility(View.VISIBLE);
                 text2.setText(subLabel);
             }
@@ -754,7 +756,7 @@
         protected void onPostExecute(CharSequence[] result) {
             mDisplayResolveInfo.setDisplayLabel(result[0]);
             mDisplayResolveInfo.setExtendedInfo(result[1]);
-            mHolder.bindLabel(result[0], result[1]);
+            mHolder.bindLabel(result[0], result[1], alwaysShowSubLabel());
         }
     }