Handle audio content on People Tiles.

Bug: 188878426
Test: PeopleSpaceUtilsTest and manual
Change-Id: I4dbdbe2fa6e559988a9a33f7afebd006d5274623
diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java
index 7b5ab0d..e53cc0b 100644
--- a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java
+++ b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java
@@ -52,6 +52,7 @@
 import com.android.internal.logging.UiEvent;
 import com.android.internal.logging.UiEventLogger;
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.widget.MessagingMessage;
 import com.android.settingslib.utils.ThreadUtils;
 import com.android.systemui.R;
 import com.android.systemui.people.widget.PeopleSpaceWidgetManager;
@@ -265,10 +266,16 @@
         boolean hasMessageText = message != null && !TextUtils.isEmpty(message.getText());
         CharSequence content = (isMissedCall && !hasMessageText)
                 ? context.getString(R.string.missed_call) : message.getText();
-        Uri dataUri = message != null ? message.getDataUri() : null;
+
+        // We only use the URI if it's an image, otherwise we fallback to text (for example, with an
+        // audio URI)
+        Uri imageUri = message != null && MessagingMessage.hasImage(message)
+                ? message.getDataUri() : null;
+
         if (DEBUG) {
             Log.d(TAG, "Tile key: " + key.toString() + ". Notification message has text: "
-                    + hasMessageText + " Has last interaction: " + sbn.getPostTime());
+                    + hasMessageText + ". Image URI: " + imageUri + ". Has last interaction: "
+                    + sbn.getPostTime());
         }
         CharSequence sender = getSenderIfGroupConversation(notification, message);
 
@@ -278,7 +285,7 @@
                 .setNotificationCategory(notification.category)
                 .setNotificationContent(content)
                 .setNotificationSender(sender)
-                .setNotificationDataUri(dataUri)
+                .setNotificationDataUri(imageUri)
                 .setMessagesCount(messagesCount)
                 .build();
     }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/people/PeopleSpaceUtilsTest.java b/packages/SystemUI/tests/src/com/android/systemui/people/PeopleSpaceUtilsTest.java
index fd28c2c..007a3b9 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/people/PeopleSpaceUtilsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/people/PeopleSpaceUtilsTest.java
@@ -285,6 +285,73 @@
     }
 
     @Test
+    public void testAugmentTileFromNotificationGroupWithImageUri() {
+        Notification notification = new Notification.Builder(mContext, "test")
+                .setContentTitle("TEST_TITLE")
+                .setContentText("TEST_TEXT")
+                .setShortcutId(SHORTCUT_ID_1)
+                .setStyle(new Notification.MessagingStyle(PERSON)
+                        .addMessage(new Notification.MessagingStyle.Message(
+                                NOTIFICATION_TEXT_1, 0, PERSON)
+                                .setData("image/jpeg", URI))
+                )
+                .build();
+        NotificationEntry notificationEntry = new NotificationEntryBuilder()
+                .setNotification(notification)
+                .setShortcutInfo(new ShortcutInfo.Builder(mContext, SHORTCUT_ID_1).build())
+                .setUser(UserHandle.of(0))
+                .setPkg(PACKAGE_NAME)
+                .build();
+        PeopleSpaceTile tile =
+                new PeopleSpaceTile
+                        .Builder(SHORTCUT_ID_1, "userName", ICON, new Intent())
+                        .setPackageName(PACKAGE_NAME)
+                        .setUserHandle(new UserHandle(0))
+                        .build();
+        PeopleTileKey key = new PeopleTileKey(tile);
+        PeopleSpaceTile actual = PeopleSpaceUtils
+                .augmentTileFromNotification(mContext, tile, key, notificationEntry, 0,
+                        Optional.empty());
+
+        assertThat(actual.getNotificationContent().toString()).isEqualTo(NOTIFICATION_TEXT_1);
+        assertThat(actual.getNotificationDataUri()).isEqualTo(URI);
+    }
+
+    @Test
+    public void testAugmentTileFromNotificationGroupWithAudioUri() {
+        Notification notification = new Notification.Builder(mContext, "test")
+                .setContentTitle("TEST_TITLE")
+                .setContentText("TEST_TEXT")
+                .setShortcutId(SHORTCUT_ID_1)
+                .setStyle(new Notification.MessagingStyle(PERSON)
+                        .addMessage(new Notification.MessagingStyle.Message(
+                                NOTIFICATION_TEXT_1, 0, PERSON)
+                                .setData("audio/ogg", URI))
+                )
+                .build();
+        NotificationEntry notificationEntry = new NotificationEntryBuilder()
+                .setNotification(notification)
+                .setShortcutInfo(new ShortcutInfo.Builder(mContext, SHORTCUT_ID_1).build())
+                .setUser(UserHandle.of(0))
+                .setPkg(PACKAGE_NAME)
+                .build();
+        PeopleSpaceTile tile =
+                new PeopleSpaceTile
+                        .Builder(SHORTCUT_ID_1, "userName", ICON, new Intent())
+                        .setPackageName(PACKAGE_NAME)
+                        .setUserHandle(new UserHandle(0))
+                        .build();
+        PeopleTileKey key = new PeopleTileKey(tile);
+        PeopleSpaceTile actual = PeopleSpaceUtils
+                .augmentTileFromNotification(mContext, tile, key, notificationEntry, 0,
+                        Optional.empty());
+
+        assertThat(actual.getNotificationContent().toString()).isEqualTo(NOTIFICATION_TEXT_1);
+        assertThat(actual.getNotificationDataUri()).isNull();
+    }
+
+
+    @Test
     public void testAugmentTileFromNotificationNoContent() {
         PeopleSpaceTile tile =
                 new PeopleSpaceTile