mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Provide methods to override notification fields
`contentTitle` and `contentText` can now be overridden. Issue: androidx/media#150 PiperOrigin-RevId: 471287701
This commit is contained in:
parent
6d3cc01d79
commit
a45df2fdcb
@ -281,7 +281,9 @@ public class DefaultMediaNotificationProvider implements MediaNotification.Provi
|
||||
|
||||
// Set metadata info in the notification.
|
||||
MediaMetadata metadata = player.getMediaMetadata();
|
||||
builder.setContentTitle(metadata.title).setContentText(metadata.artist);
|
||||
builder
|
||||
.setContentTitle(getNotificationContentTitle(metadata))
|
||||
.setContentText(getNotificationContentText(metadata));
|
||||
@Nullable ListenableFuture<Bitmap> bitmapFuture = loadArtworkBitmap(metadata);
|
||||
if (bitmapFuture != null) {
|
||||
if (pendingOnBitmapLoadedFutureCallback != null) {
|
||||
@ -504,6 +506,42 @@ public class DefaultMediaNotificationProvider implements MediaNotification.Provi
|
||||
return compactViewIndices;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the content title to be used to build the notification.
|
||||
*
|
||||
* <p>This method is called each time a new notification is built.
|
||||
*
|
||||
* <p>Override this method to customize which field of {@link MediaMetadata} is used for content
|
||||
* title of the notification.
|
||||
*
|
||||
* <p>By default, the notification shows {@link MediaMetadata#title} as content title.
|
||||
*
|
||||
* @param metadata The media metadata from which content title is fetched.
|
||||
* @return Notification content title.
|
||||
*/
|
||||
@Nullable
|
||||
protected CharSequence getNotificationContentTitle(MediaMetadata metadata) {
|
||||
return metadata.title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the content text to be used to build the notification.
|
||||
*
|
||||
* <p>This method is called each time a new notification is built.
|
||||
*
|
||||
* <p>Override this method to customize which field of {@link MediaMetadata} is used for content
|
||||
* text of the notification.
|
||||
*
|
||||
* <p>By default, the notification shows {@link MediaMetadata#artist} as content text.
|
||||
*
|
||||
* @param metadata The media metadata from which content text is fetched.
|
||||
* @return Notification content text.
|
||||
*/
|
||||
@Nullable
|
||||
protected CharSequence getNotificationContentText(MediaMetadata metadata) {
|
||||
return metadata.artist;
|
||||
}
|
||||
|
||||
private void ensureNotificationChannel() {
|
||||
if (Util.SDK_INT < 26 || notificationManager.getNotificationChannel(channelId) != null) {
|
||||
return;
|
||||
|
@ -510,6 +510,52 @@ public class DefaultMediaNotificationProviderTest {
|
||||
.isEqualTo(R.drawable.media3_icon_circular_play);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setMediaMetadataTitle_notificationUsesItAsContentTitle() {
|
||||
Context context = ApplicationProvider.getApplicationContext();
|
||||
DefaultMediaNotificationProvider defaultMediaNotificationProvider =
|
||||
new DefaultMediaNotificationProvider.Builder(context).build();
|
||||
DefaultActionFactory defaultActionFactory =
|
||||
new DefaultActionFactory(Robolectric.setupService(TestService.class));
|
||||
MediaSession mockMediaSession =
|
||||
createMockMediaSessionForNotification(
|
||||
new MediaMetadata.Builder().setTitle("title").build());
|
||||
|
||||
MediaNotification notification =
|
||||
defaultMediaNotificationProvider.createNotification(
|
||||
mockMediaSession,
|
||||
ImmutableList.of(),
|
||||
defaultActionFactory,
|
||||
mock(MediaNotification.Provider.Callback.class));
|
||||
|
||||
boolean isMediaMetadataTitleEqualToNotificationContentTitle =
|
||||
"title".contentEquals(NotificationCompat.getContentTitle(notification.notification));
|
||||
assertThat(isMediaMetadataTitleEqualToNotificationContentTitle).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setMediaMetadataArtist_notificationUsesItAsContentText() {
|
||||
Context context = ApplicationProvider.getApplicationContext();
|
||||
DefaultMediaNotificationProvider defaultMediaNotificationProvider =
|
||||
new DefaultMediaNotificationProvider.Builder(context).build();
|
||||
DefaultActionFactory defaultActionFactory =
|
||||
new DefaultActionFactory(Robolectric.setupService(TestService.class));
|
||||
MediaSession mockMediaSession =
|
||||
createMockMediaSessionForNotification(
|
||||
new MediaMetadata.Builder().setArtist("artist").build());
|
||||
|
||||
MediaNotification notification =
|
||||
defaultMediaNotificationProvider.createNotification(
|
||||
mockMediaSession,
|
||||
ImmutableList.of(),
|
||||
defaultActionFactory,
|
||||
mock(MediaNotification.Provider.Callback.class));
|
||||
|
||||
boolean isMediaMetadataArtistEqualToNotificationContentText =
|
||||
"artist".contentEquals(NotificationCompat.getContentText(notification.notification));
|
||||
assertThat(isMediaMetadataArtistEqualToNotificationContentText).isTrue();
|
||||
}
|
||||
|
||||
private static void assertHasNotificationChannel(
|
||||
List<Object> notificationChannels, String channelId, String channelName) {
|
||||
boolean found = false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user