Handle spanned conversation labels

Test: Robotests
Fixes: 194446117
Change-Id: If21f727e00b181f0da127b09e5a1c46ec3257836
diff --git a/src/com/android/settings/notification/app/RecentConversationsPreferenceController.java b/src/com/android/settings/notification/app/RecentConversationsPreferenceController.java
index 4984fad..1ceb45c 100644
--- a/src/com/android/settings/notification/app/RecentConversationsPreferenceController.java
+++ b/src/com/android/settings/notification/app/RecentConversationsPreferenceController.java
@@ -233,8 +233,13 @@
                 private final Collator sCollator = Collator.getInstance();
                 @Override
                 public int compare(ConversationChannel o1, ConversationChannel o2) {
-                    int labelComparison = sCollator.compare(o1.getShortcutInfo().getLabel(),
-                            o2.getShortcutInfo().getLabel());
+                    int labelComparison = 0;
+                    if (o1.getShortcutInfo().getLabel() != null
+                            && o2.getShortcutInfo().getLabel() != null) {
+                        labelComparison = sCollator.compare(
+                                o1.getShortcutInfo().getLabel().toString(),
+                                o2.getShortcutInfo().getLabel().toString());
+                    }
 
                     if (labelComparison == 0) {
                         return o1.getNotificationChannel().getId().compareTo(
diff --git a/tests/robotests/src/com/android/settings/notification/app/RecentConversationsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/app/RecentConversationsPreferenceControllerTest.java
index f0ae7ab..1688d63 100644
--- a/tests/robotests/src/com/android/settings/notification/app/RecentConversationsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/app/RecentConversationsPreferenceControllerTest.java
@@ -36,6 +36,7 @@
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.provider.Settings;
+import android.text.SpannedString;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.LinearLayout;
@@ -338,4 +339,36 @@
         // one for the preference, none for 'clear all'
         verify(outerContainer, times(1)).addPreference(any());
     }
+
+    @Test
+    public void testSpans() {
+        ShortcutInfo si = mock(ShortcutInfo.class);
+        when(si.getLabel()).thenReturn(new SpannedString("hello"));
+        ConversationChannel ccw = new ConversationChannel(si, 6,
+                new NotificationChannel("hi", "hi", 4),
+                null, 7,
+                true /* hasactivenotifs */);
+        ShortcutInfo si2 = mock(ShortcutInfo.class);
+        when(si2.getLabel()).thenReturn("hello");
+        ConversationChannel ccw2 = new ConversationChannel(si2, 6,
+                new NotificationChannel("hi2", "hi2", 4),
+                null, 7,
+                true /* hasactivenotifs */);
+        // no crash
+        mController.mConversationComparator.compare(ccw, ccw2);
+    }
+
+    @Test
+    public void testNullSpans() {
+        ConversationChannel ccw = new ConversationChannel(mock(ShortcutInfo.class), 6,
+                new NotificationChannel("hi", "hi", 4),
+                null, 7,
+                true /* hasactivenotifs */);
+        ConversationChannel ccw2 = new ConversationChannel(mock(ShortcutInfo.class), 6,
+                new NotificationChannel("hi2", "hi2", 4),
+                null, 7,
+                true /* hasactivenotifs */);
+        // no crash
+        mController.mConversationComparator.compare(ccw, ccw2);
+    }
 }