Skip to content

Commit e826bdd

Browse files
rajveermalviyagithub-actions[bot]
authored andcommitted
notif: Use null-safe generics in Pigeon
Now that we use the version of Pigeon package that supports non-nullable types in collections, update our Pigeon files to incorporate them. Fixes: #942
1 parent 8b1b733 commit e826bdd

File tree

5 files changed

+29
-28
lines changed

5 files changed

+29
-28
lines changed

android/app/src/main/kotlin/com/zulip/flutter/Notifications.g.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -262,15 +262,15 @@ data class MessagingStyleMessage (
262262
data class MessagingStyle (
263263
val user: Person,
264264
val conversationTitle: String? = null,
265-
val messages: List<MessagingStyleMessage?>,
265+
val messages: List<MessagingStyleMessage>,
266266
val isGroupConversation: Boolean
267267
)
268268
{
269269
companion object {
270270
fun fromList(pigeonVar_list: List<Any?>): MessagingStyle {
271271
val user = pigeonVar_list[0] as Person
272272
val conversationTitle = pigeonVar_list[1] as String?
273-
val messages = pigeonVar_list[2] as List<MessagingStyleMessage?>
273+
val messages = pigeonVar_list[2] as List<MessagingStyleMessage>
274274
val isGroupConversation = pigeonVar_list[3] as Boolean
275275
return MessagingStyle(user, conversationTitle, messages, isGroupConversation)
276276
}
@@ -294,13 +294,13 @@ data class MessagingStyle (
294294
*/
295295
data class Notification (
296296
val group: String,
297-
val extras: Map<String?, String?>
297+
val extras: Map<String, String>
298298
)
299299
{
300300
companion object {
301301
fun fromList(pigeonVar_list: List<Any?>): Notification {
302302
val group = pigeonVar_list[0] as String
303-
val extras = pigeonVar_list[1] as Map<String?, String?>
303+
val extras = pigeonVar_list[1] as Map<String, String>
304304
return Notification(group, extras)
305305
}
306306
}
@@ -553,7 +553,7 @@ interface AndroidNotificationHostApi {
553553
* https://developer.android.com/reference/kotlin/android/app/NotificationManager.html#notify
554554
* https://developer.android.com/reference/androidx/core/app/NotificationCompat.Builder
555555
*/
556-
fun notify(tag: String?, id: Long, autoCancel: Boolean?, channelId: String, color: Long?, contentIntent: PendingIntent?, contentText: String?, contentTitle: String?, extras: Map<String?, String?>?, groupKey: String?, inboxStyle: InboxStyle?, isGroupSummary: Boolean?, messagingStyle: MessagingStyle?, number: Long?, smallIconResourceName: String?)
556+
fun notify(tag: String?, id: Long, autoCancel: Boolean?, channelId: String, color: Long?, contentIntent: PendingIntent?, contentText: String?, contentTitle: String?, extras: Map<String, String>?, groupKey: String?, inboxStyle: InboxStyle?, isGroupSummary: Boolean?, messagingStyle: MessagingStyle?, number: Long?, smallIconResourceName: String?)
557557
/**
558558
* Wraps `androidx.core.app.NotificationManagerCompat.getActiveNotifications`,
559559
* combined with `androidx.core.app.NotificationCompat.MessagingStyle.extractMessagingStyleFromNotification`.
@@ -692,7 +692,7 @@ interface AndroidNotificationHostApi {
692692
val contentIntentArg = args[5] as PendingIntent?
693693
val contentTextArg = args[6] as String?
694694
val contentTitleArg = args[7] as String?
695-
val extrasArg = args[8] as Map<String?, String?>?
695+
val extrasArg = args[8] as Map<String, String>?
696696
val groupKeyArg = args[9] as String?
697697
val inboxStyleArg = args[10] as InboxStyle?
698698
val isGroupSummaryArg = args[11] as Boolean?

android/app/src/main/kotlin/com/zulip/flutter/ZulipPlugin.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ private class AndroidNotificationHost(val context: Context)
183183
contentIntent: PendingIntent?,
184184
contentText: String?,
185185
contentTitle: String?,
186-
extras: Map<String?, String?>?,
186+
extras: Map<String, String>?,
187187
groupKey: String?,
188188
inboxStyle: InboxStyle?,
189189
isGroupSummary: Boolean?,
@@ -221,7 +221,7 @@ private class AndroidNotificationHost(val context: Context)
221221
val style = NotificationCompat.MessagingStyle(toAndroidPerson(messagingStyle.user))
222222
.setConversationTitle(messagingStyle.conversationTitle)
223223
.setGroupConversation(messagingStyle.isGroupConversation)
224-
messagingStyle.messages.forEach { it?.let {
224+
messagingStyle.messages.forEach { it.let {
225225
style.addMessage(NotificationCompat.MessagingStyle.Message(
226226
it.text,
227227
it.timestampMs,
@@ -268,8 +268,11 @@ private class AndroidNotificationHost(val context: Context)
268268
Notification(
269269
it.notification.group,
270270
desiredExtras
271-
.associateWith { key -> it.notification.extras.getString(key) }
272-
.filter { entry -> entry.value != null }
271+
.mapNotNull { key ->
272+
it.notification.extras.getString(key)?.let { value ->
273+
key to value
274+
} }
275+
.toMap()
273276
),
274277
)
275278
}

lib/host/android_notifications.g.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ class MessagingStyle {
256256

257257
String? conversationTitle;
258258

259-
List<MessagingStyleMessage?> messages;
259+
List<MessagingStyleMessage> messages;
260260

261261
bool isGroupConversation;
262262

@@ -274,7 +274,7 @@ class MessagingStyle {
274274
return MessagingStyle(
275275
user: result[0]! as Person,
276276
conversationTitle: result[1] as String?,
277-
messages: (result[2] as List<Object?>?)!.cast<MessagingStyleMessage?>(),
277+
messages: (result[2] as List<Object?>?)!.cast<MessagingStyleMessage>(),
278278
isGroupConversation: result[3]! as bool,
279279
);
280280
}
@@ -291,7 +291,7 @@ class Notification {
291291

292292
String group;
293293

294-
Map<String?, String?> extras;
294+
Map<String, String> extras;
295295

296296
Object encode() {
297297
return <Object?>[
@@ -304,7 +304,7 @@ class Notification {
304304
result as List<Object?>;
305305
return Notification(
306306
group: result[0]! as String,
307-
extras: (result[1] as Map<Object?, Object?>?)!.cast<String?, String?>(),
307+
extras: (result[1] as Map<Object?, Object?>?)!.cast<String, String>(),
308308
);
309309
}
310310
}
@@ -645,7 +645,7 @@ class AndroidNotificationHostApi {
645645
/// See:
646646
/// https://developer.android.com/reference/kotlin/android/app/NotificationManager.html#notify
647647
/// https://developer.android.com/reference/androidx/core/app/NotificationCompat.Builder
648-
Future<void> notify({String? tag, required int id, bool? autoCancel, required String channelId, int? color, PendingIntent? contentIntent, String? contentText, String? contentTitle, Map<String?, String?>? extras, String? groupKey, InboxStyle? inboxStyle, bool? isGroupSummary, MessagingStyle? messagingStyle, int? number, String? smallIconResourceName, }) async {
648+
Future<void> notify({String? tag, required int id, bool? autoCancel, required String channelId, int? color, PendingIntent? contentIntent, String? contentText, String? contentTitle, Map<String, String>? extras, String? groupKey, InboxStyle? inboxStyle, bool? isGroupSummary, MessagingStyle? messagingStyle, int? number, String? smallIconResourceName, }) async {
649649
final String pigeonVar_channelName = 'dev.flutter.pigeon.zulip.AndroidNotificationHostApi.notify$pigeonVar_messageChannelSuffix';
650650
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
651651
pigeonVar_channelName,

pigeon/notifications.dart

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,7 @@ class MessagingStyle {
129129

130130
final Person user;
131131
final String? conversationTitle;
132-
// TODO(#942): Make list item non-nullable, once pigeon supports non-nullable type arguments.
133-
// https://github.com/flutter/flutter/issues/97848
134-
final List<MessagingStyleMessage?> messages;
132+
final List<MessagingStyleMessage> messages;
135133
final bool isGroupConversation;
136134
}
137135

@@ -142,7 +140,7 @@ class Notification {
142140
Notification({required this.group, required this.extras});
143141

144142
final String group;
145-
final Map<String?, String?> extras; // TODO(#942)
143+
final Map<String, String> extras;
146144
// Various other properties too; add them if needed.
147145
}
148146

@@ -267,7 +265,7 @@ abstract class AndroidNotificationHostApi {
267265
PendingIntent? contentIntent,
268266
String? contentText,
269267
String? contentTitle,
270-
Map<String?, String?>? extras, // TODO(#942)
268+
Map<String, String>? extras,
271269
String? groupKey,
272270
InboxStyle? inboxStyle,
273271
bool? isGroupSummary,

test/model/binding.dart

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -646,7 +646,7 @@ class FakeAndroidNotificationHostApi implements AndroidNotificationHostApi {
646646
PendingIntent? contentIntent,
647647
String? contentText,
648648
String? contentTitle,
649-
Map<String?, String?>? extras,
649+
Map<String, String>? extras,
650650
String? groupKey,
651651
InboxStyle? inboxStyle,
652652
bool? isGroupSummary,
@@ -686,7 +686,7 @@ class FakeAndroidNotificationHostApi implements AndroidNotificationHostApi {
686686
isGroupConversation: messagingStyle.isGroupConversation,
687687
messages: messagingStyle.messages.map((message) =>
688688
MessagingStyleMessage(
689-
text: message!.text,
689+
text: message.text,
690690
timestampMs: message.timestampMs,
691691
person: Person(
692692
key: message.person.key,
@@ -701,14 +701,14 @@ class FakeAndroidNotificationHostApi implements AndroidNotificationHostApi {
701701
_activeNotificationsMessagingStyle[tag];
702702

703703
@override
704-
Future<List<StatusBarNotification>> getActiveNotifications({required List<String?> desiredExtras}) async {
704+
Future<List<StatusBarNotification>> getActiveNotifications({required List<String> desiredExtras}) async {
705705
return _activeNotifications.values.map((statusNotif) {
706706
final notificationExtras = statusNotif.notification.extras;
707-
statusNotif.notification.extras = Map.fromEntries(
708-
desiredExtras
709-
.map((key) => MapEntry(key, notificationExtras[key]))
710-
.where((entry) => entry.value != null)
711-
);
707+
statusNotif.notification.extras = {
708+
for (final key in desiredExtras)
709+
if (notificationExtras[key] != null)
710+
key: notificationExtras[key]!,
711+
};
712712
return statusNotif;
713713
}).toList(growable: false);
714714
}

0 commit comments

Comments
 (0)