Skip to content

Commit 99b0429

Browse files
Added MediaStyle handling (Android only) (#389)
* [Media Style][Android] Added MediaStyle handling * [MediaStyle][Android] Removed showActionsInCompactView handling as requested * [MediaStyle][Android] Updated README as requested * [MediaStyle][Android] - Updated README as requested - Removed MediaStyleInformation class as requested * renamed button for showing media notification Co-authored-by: Michael Bui <[email protected]>
1 parent bbf8357 commit 99b0429

File tree

7 files changed

+44
-6
lines changed

7 files changed

+44
-6
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ A cross platform plugin for displaying local notifications.
3434
* Big text
3535
* Inbox
3636
* Messaging
37+
* Media
38+
* While media playback control using a `MediaSession.Token` is not supported, with this style you let Android treat the `largeIcon` bitmap as album artwork
3739
* [Android] Group notifications
3840
* [Android] Show progress notifications
3941
* [Android] Configure notification visibility on the lockscreen

android/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,6 @@ android {
3535

3636
dependencies {
3737
implementation "androidx.core:core:1.1.0"
38+
implementation "androidx.media:media:1.1.0"
3839
implementation "com.google.code.gson:gson:2.8.5"
3940
}

android/src/main/java/com/dexterous/flutterlocalnotifications/FlutterLocalNotificationsPlugin.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,9 @@ private static void setStyle(Context context, NotificationDetails notificationDe
447447
case Messaging:
448448
setMessagingStyle(context, notificationDetails, builder);
449449
break;
450+
case Media:
451+
setMediaStyle(builder);
452+
break;
450453
default:
451454
break;
452455
}
@@ -500,6 +503,10 @@ private static void setInboxStyle(NotificationDetails notificationDetails, Notif
500503
builder.setStyle(inboxStyle);
501504
}
502505

506+
private static void setMediaStyle(NotificationCompat.Builder builder) {
507+
androidx.media.app.NotificationCompat.MediaStyle mediaStyle = new androidx.media.app.NotificationCompat.MediaStyle();
508+
builder.setStyle(mediaStyle);
509+
}
503510

504511
private static void setMessagingStyle(Context context, NotificationDetails notificationDetails, NotificationCompat.Builder builder) {
505512
MessagingStyleInformation messagingStyleInformation = (MessagingStyleInformation) notificationDetails.styleInformation;

android/src/main/java/com/dexterous/flutterlocalnotifications/NotificationStyle.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ public enum NotificationStyle{
55
BigPicture,
66
BigText,
77
Inbox,
8-
Messaging
8+
Messaging,
9+
Media
910
}
1011

android/src/main/java/com/dexterous/flutterlocalnotifications/models/NotificationDetails.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,8 @@ private static void readStyleInformation(NotificationDetails notificationDetails
267267
readInboxStyleInformation(notificationDetails, styleInformation, defaultStyleInformation);
268268
} else if (notificationDetails.style == NotificationStyle.Messaging) {
269269
readMessagingStyleInformation(notificationDetails, styleInformation, defaultStyleInformation);
270+
} else if (notificationDetails.style == NotificationStyle.Media) {
271+
notificationDetails.styleInformation = defaultStyleInformation;
270272
}
271273
}
272274

example/lib/main.dart

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ class _HomePageState extends State<HomePage> {
178178
),
179179
PaddedRaisedButton(
180180
buttonText:
181-
'Show plain notification as public on every lockscreen [Android]',
181+
'Show plain notification as public on every lockscreen [Android]',
182182
onPressed: () async {
183183
await _showPublicNotification();
184184
},
@@ -237,6 +237,12 @@ class _HomePageState extends State<HomePage> {
237237
await _showBigPictureNotificationHideExpandedLargeIcon();
238238
},
239239
),
240+
PaddedRaisedButton(
241+
buttonText: 'Show media notification [Android]',
242+
onPressed: () async {
243+
await _showNotificationMediaStyle();
244+
},
245+
),
240246
PaddedRaisedButton(
241247
buttonText: 'Show big text notification [Android]',
242248
onPressed: () async {
@@ -448,6 +454,23 @@ class _HomePageState extends State<HomePage> {
448454
0, 'big text title', 'silent body', platformChannelSpecifics);
449455
}
450456

457+
Future<void> _showNotificationMediaStyle() async {
458+
var largeIconPath = await _downloadAndSaveImage(
459+
'http://via.placeholder.com/128x128/00FF00/000000', 'largeIcon');
460+
var androidPlatformChannelSpecifics = AndroidNotificationDetails(
461+
'media channel id',
462+
'media channel name',
463+
'media channel description',
464+
largeIcon: largeIconPath,
465+
largeIconBitmapSource: BitmapSource.FilePath,
466+
style: AndroidNotificationStyle.Media,
467+
);
468+
var platformChannelSpecifics =
469+
NotificationDetails(androidPlatformChannelSpecifics, null);
470+
await flutterLocalNotificationsPlugin.show(
471+
0, 'notification title', 'notification body', platformChannelSpecifics);
472+
}
473+
451474
Future<void> _showBigTextNotification() async {
452475
var bigTextStyleInformation = BigTextStyleInformation(
453476
'Lorem <i>ipsum dolor sit</i> amet, consectetur <b>adipiscing elit</b>, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
@@ -775,13 +798,15 @@ class _HomePageState extends State<HomePage> {
775798
Future<void> _showPublicNotification() async {
776799
var androidPlatformChannelSpecifics = AndroidNotificationDetails(
777800
'your channel id', 'your channel name', 'your channel description',
778-
importance: Importance.Max, priority: Priority.High, ticker: 'ticker',
801+
importance: Importance.Max,
802+
priority: Priority.High,
803+
ticker: 'ticker',
779804
visibility: NotificationVisibility.Public);
780805
var iOSPlatformChannelSpecifics = IOSNotificationDetails();
781806
var platformChannelSpecifics = NotificationDetails(
782807
androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);
783-
await flutterLocalNotificationsPlugin.show(
784-
0, 'public notification title', 'public notification body', platformChannelSpecifics,
808+
await flutterLocalNotificationsPlugin.show(0, 'public notification title',
809+
'public notification body', platformChannelSpecifics,
785810
payload: 'item x');
786811
}
787812

lib/src/platform_specifics/android/enums.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ enum BitmapSource { Drawable, FilePath }
55
enum IconSource { Drawable, FilePath, ContentUri }
66

77
/// The available notification styles on Android
8-
enum AndroidNotificationStyle { Default, BigPicture, BigText, Inbox, Messaging }
8+
enum AndroidNotificationStyle { Default, BigPicture, BigText, Inbox, Messaging, Media }
99

1010
/// The available actions for managing notification channels.
1111
/// [CreateIfNotExists]: will create a channel if it doesn't exist

0 commit comments

Comments
 (0)