diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceUtils.java index 7b5ab0df1e5e1..e53cc0b72e3b4 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.annotations.VisibleForTesting; 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 @@ public class PeopleSpaceUtils { 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 @@ public class PeopleSpaceUtils { .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 fd28c2c9e64c9..007a3b93eca84 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/people/PeopleSpaceUtilsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/people/PeopleSpaceUtilsTest.java @@ -284,6 +284,73 @@ public class PeopleSpaceUtilsTest extends SysuiTestCase { assertThat(actual.getNotificationSender().toString()).isEqualTo("name"); } + @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 =