fix: Add payload to all intents
This commit is contained in:
parent
c7ee2b6c6e
commit
2490a8ee9f
@ -44,11 +44,13 @@ class MyAppState extends State<MyApp> {
|
|||||||
|
|
||||||
await MoxplatformPlugin.notifications.createNotificationChannel(
|
await MoxplatformPlugin.notifications.createNotificationChannel(
|
||||||
"Test notification channel",
|
"Test notification channel",
|
||||||
|
"Test1",
|
||||||
channelId,
|
channelId,
|
||||||
false,
|
false,
|
||||||
);
|
);
|
||||||
await MoxplatformPlugin.notifications.createNotificationChannel(
|
await MoxplatformPlugin.notifications.createNotificationChannel(
|
||||||
"Test notification channel for warnings",
|
"Test notification channel for warnings",
|
||||||
|
"Test2",
|
||||||
otherChannelId,
|
otherChannelId,
|
||||||
false,
|
false,
|
||||||
);
|
);
|
||||||
@ -191,6 +193,7 @@ class MyHomePage extends StatelessWidget {
|
|||||||
messages: messages,
|
messages: messages,
|
||||||
channelId: channelId,
|
channelId: channelId,
|
||||||
jid: 'testjid',
|
jid: 'testjid',
|
||||||
|
isGroupchat: true,
|
||||||
extra: {
|
extra: {
|
||||||
'jid': 'testjid',
|
'jid': 'testjid',
|
||||||
'avatarPath': 'lol',
|
'avatarPath': 'lol',
|
||||||
|
@ -387,6 +387,20 @@ public class Api {
|
|||||||
this.messages = setterArg;
|
this.messages = setterArg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Flag indicating whether this notification is from a groupchat or not. */
|
||||||
|
private @NonNull Boolean isGroupchat;
|
||||||
|
|
||||||
|
public @NonNull Boolean getIsGroupchat() {
|
||||||
|
return isGroupchat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIsGroupchat(@NonNull Boolean setterArg) {
|
||||||
|
if (setterArg == null) {
|
||||||
|
throw new IllegalStateException("Nonnull field \"isGroupchat\" is null.");
|
||||||
|
}
|
||||||
|
this.isGroupchat = setterArg;
|
||||||
|
}
|
||||||
|
|
||||||
/** Additional data to include. */
|
/** Additional data to include. */
|
||||||
private @Nullable Map<String, String> extra;
|
private @Nullable Map<String, String> extra;
|
||||||
|
|
||||||
@ -438,6 +452,13 @@ public class Api {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private @Nullable Boolean isGroupchat;
|
||||||
|
|
||||||
|
public @NonNull Builder setIsGroupchat(@NonNull Boolean setterArg) {
|
||||||
|
this.isGroupchat = setterArg;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
private @Nullable Map<String, String> extra;
|
private @Nullable Map<String, String> extra;
|
||||||
|
|
||||||
public @NonNull Builder setExtra(@Nullable Map<String, String> setterArg) {
|
public @NonNull Builder setExtra(@Nullable Map<String, String> setterArg) {
|
||||||
@ -452,6 +473,7 @@ public class Api {
|
|||||||
pigeonReturn.setChannelId(channelId);
|
pigeonReturn.setChannelId(channelId);
|
||||||
pigeonReturn.setJid(jid);
|
pigeonReturn.setJid(jid);
|
||||||
pigeonReturn.setMessages(messages);
|
pigeonReturn.setMessages(messages);
|
||||||
|
pigeonReturn.setIsGroupchat(isGroupchat);
|
||||||
pigeonReturn.setExtra(extra);
|
pigeonReturn.setExtra(extra);
|
||||||
return pigeonReturn;
|
return pigeonReturn;
|
||||||
}
|
}
|
||||||
@ -459,12 +481,13 @@ public class Api {
|
|||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
ArrayList<Object> toList() {
|
ArrayList<Object> toList() {
|
||||||
ArrayList<Object> toListResult = new ArrayList<Object>(6);
|
ArrayList<Object> toListResult = new ArrayList<Object>(7);
|
||||||
toListResult.add(title);
|
toListResult.add(title);
|
||||||
toListResult.add(id);
|
toListResult.add(id);
|
||||||
toListResult.add(channelId);
|
toListResult.add(channelId);
|
||||||
toListResult.add(jid);
|
toListResult.add(jid);
|
||||||
toListResult.add(messages);
|
toListResult.add(messages);
|
||||||
|
toListResult.add(isGroupchat);
|
||||||
toListResult.add(extra);
|
toListResult.add(extra);
|
||||||
return toListResult;
|
return toListResult;
|
||||||
}
|
}
|
||||||
@ -481,7 +504,9 @@ public class Api {
|
|||||||
pigeonResult.setJid((String) jid);
|
pigeonResult.setJid((String) jid);
|
||||||
Object messages = list.get(4);
|
Object messages = list.get(4);
|
||||||
pigeonResult.setMessages((List<NotificationMessage>) messages);
|
pigeonResult.setMessages((List<NotificationMessage>) messages);
|
||||||
Object extra = list.get(5);
|
Object isGroupchat = list.get(5);
|
||||||
|
pigeonResult.setIsGroupchat((Boolean) isGroupchat);
|
||||||
|
Object extra = list.get(6);
|
||||||
pigeonResult.setExtra((Map<String, String>) extra);
|
pigeonResult.setExtra((Map<String, String>) extra);
|
||||||
return pigeonResult;
|
return pigeonResult;
|
||||||
}
|
}
|
||||||
@ -914,12 +939,14 @@ public class Api {
|
|||||||
/** Generated interface from Pigeon that represents a handler of messages from Flutter. */
|
/** Generated interface from Pigeon that represents a handler of messages from Flutter. */
|
||||||
public interface MoxplatformApi {
|
public interface MoxplatformApi {
|
||||||
|
|
||||||
void createNotificationChannel(@NonNull String title, @NonNull String id, @NonNull Boolean urgent);
|
void createNotificationChannel(@NonNull String title, @NonNull String description, @NonNull String id, @NonNull Boolean urgent);
|
||||||
|
|
||||||
void showMessagingNotification(@NonNull MessagingNotification notification);
|
void showMessagingNotification(@NonNull MessagingNotification notification);
|
||||||
|
|
||||||
void showNotification(@NonNull RegularNotification notification);
|
void showNotification(@NonNull RegularNotification notification);
|
||||||
|
|
||||||
|
void dismissNotification(@NonNull Long id);
|
||||||
|
|
||||||
void setNotificationSelfAvatar(@NonNull String path);
|
void setNotificationSelfAvatar(@NonNull String path);
|
||||||
|
|
||||||
void setNotificationI18n(@NonNull NotificationI18nData data);
|
void setNotificationI18n(@NonNull NotificationI18nData data);
|
||||||
@ -948,10 +975,11 @@ public class Api {
|
|||||||
ArrayList<Object> wrapped = new ArrayList<Object>();
|
ArrayList<Object> wrapped = new ArrayList<Object>();
|
||||||
ArrayList<Object> args = (ArrayList<Object>) message;
|
ArrayList<Object> args = (ArrayList<Object>) message;
|
||||||
String titleArg = (String) args.get(0);
|
String titleArg = (String) args.get(0);
|
||||||
String idArg = (String) args.get(1);
|
String descriptionArg = (String) args.get(1);
|
||||||
Boolean urgentArg = (Boolean) args.get(2);
|
String idArg = (String) args.get(2);
|
||||||
|
Boolean urgentArg = (Boolean) args.get(3);
|
||||||
try {
|
try {
|
||||||
api.createNotificationChannel(titleArg, idArg, urgentArg);
|
api.createNotificationChannel(titleArg, descriptionArg, idArg, urgentArg);
|
||||||
wrapped.add(0, null);
|
wrapped.add(0, null);
|
||||||
}
|
}
|
||||||
catch (Throwable exception) {
|
catch (Throwable exception) {
|
||||||
@ -1002,6 +1030,30 @@ public class Api {
|
|||||||
api.showNotification(notificationArg);
|
api.showNotification(notificationArg);
|
||||||
wrapped.add(0, null);
|
wrapped.add(0, null);
|
||||||
}
|
}
|
||||||
|
catch (Throwable exception) {
|
||||||
|
ArrayList<Object> wrappedError = wrapError(exception);
|
||||||
|
wrapped = wrappedError;
|
||||||
|
}
|
||||||
|
reply.reply(wrapped);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
channel.setMessageHandler(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
BasicMessageChannel<Object> channel =
|
||||||
|
new BasicMessageChannel<>(
|
||||||
|
binaryMessenger, "dev.flutter.pigeon.moxplatform_platform_interface.MoxplatformApi.dismissNotification", getCodec());
|
||||||
|
if (api != null) {
|
||||||
|
channel.setMessageHandler(
|
||||||
|
(message, reply) -> {
|
||||||
|
ArrayList<Object> wrapped = new ArrayList<Object>();
|
||||||
|
ArrayList<Object> args = (ArrayList<Object>) message;
|
||||||
|
Number idArg = (Number) args.get(0);
|
||||||
|
try {
|
||||||
|
api.dismissNotification((idArg == null) ? null : idArg.longValue());
|
||||||
|
wrapped.add(0, null);
|
||||||
|
}
|
||||||
catch (Throwable exception) {
|
catch (Throwable exception) {
|
||||||
ArrayList<Object> wrappedError = wrapError(exception);
|
ArrayList<Object> wrappedError = wrapError(exception);
|
||||||
wrapped = wrappedError;
|
wrapped = wrappedError;
|
||||||
|
@ -2,8 +2,8 @@ package me.polynom.moxplatform_android;
|
|||||||
|
|
||||||
import static androidx.core.content.ContextCompat.getSystemService;
|
import static androidx.core.content.ContextCompat.getSystemService;
|
||||||
import static me.polynom.moxplatform_android.ConstantsKt.SHARED_PREFERENCES_KEY;
|
import static me.polynom.moxplatform_android.ConstantsKt.SHARED_PREFERENCES_KEY;
|
||||||
import static me.polynom.moxplatform_android.RecordSentMessageKt.recordSentMessage;
|
|
||||||
import static me.polynom.moxplatform_android.CryptoKt.*;
|
import static me.polynom.moxplatform_android.CryptoKt.*;
|
||||||
|
import static me.polynom.moxplatform_android.RecordSentMessageKt.*;
|
||||||
|
|
||||||
import me.polynom.moxplatform_android.Api.*;
|
import me.polynom.moxplatform_android.Api.*;
|
||||||
|
|
||||||
@ -18,6 +18,7 @@ import android.content.SharedPreferences;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.core.app.NotificationManagerCompat;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||||
|
|
||||||
@ -258,10 +259,11 @@ public class MoxplatformAndroidPlugin extends BroadcastReceiver implements Flutt
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createNotificationChannel(@NonNull String title, @NonNull String id, @NonNull Boolean urgent) {
|
public void createNotificationChannel(@NonNull String title, @NonNull String description, @NonNull String id, @NonNull Boolean urgent) {
|
||||||
final NotificationChannel channel = new NotificationChannel(id, title, urgent ? NotificationManager.IMPORTANCE_HIGH : NotificationManager.IMPORTANCE_DEFAULT);
|
final NotificationChannel channel = new NotificationChannel(id, title, urgent ? NotificationManager.IMPORTANCE_HIGH : NotificationManager.IMPORTANCE_DEFAULT);
|
||||||
channel.enableVibration(true);
|
channel.enableVibration(true);
|
||||||
channel.enableLights(true);
|
channel.enableLights(true);
|
||||||
|
channel.setDescription(description);
|
||||||
final NotificationManager manager = getSystemService(context, NotificationManager.class);
|
final NotificationManager manager = getSystemService(context, NotificationManager.class);
|
||||||
manager.createNotificationChannel(channel);
|
manager.createNotificationChannel(channel);
|
||||||
}
|
}
|
||||||
@ -276,6 +278,11 @@ public class MoxplatformAndroidPlugin extends BroadcastReceiver implements Flutt
|
|||||||
NotificationsKt.showNotification(context, notification);
|
NotificationsKt.showNotification(context, notification);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void dismissNotification(@NonNull Long id) {
|
||||||
|
NotificationManagerCompat.from(context).cancel(id.intValue());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setNotificationSelfAvatar(@NonNull String path) {
|
public void setNotificationSelfAvatar(@NonNull String path) {
|
||||||
NotificationDataManager.INSTANCE.setAvatarPath(path);
|
NotificationDataManager.INSTANCE.setAvatarPath(path);
|
||||||
|
@ -42,16 +42,30 @@ class NotificationReceiver : BroadcastReceiver() {
|
|||||||
.find { it.id == id }?.notification
|
.find { it.id == id }?.notification
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun extractPayloadMapFromIntent(intent: Intent): Map<String?, String?> {
|
||||||
|
val extras = mutableMapOf<String?, String?>()
|
||||||
|
intent.extras?.keySet()!!.forEach {
|
||||||
|
Log.d(TAG, "Checking $it -> ${intent.extras!!.get(it)}")
|
||||||
|
if (it.startsWith("payload_")) {
|
||||||
|
Log.d(TAG, "Adding $it")
|
||||||
|
extras[it.substring(8)] = intent.extras!!.getString(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return extras
|
||||||
|
}
|
||||||
|
|
||||||
private fun handleMarkAsRead(context: Context, intent: Intent) {
|
private fun handleMarkAsRead(context: Context, intent: Intent) {
|
||||||
NotificationManagerCompat.from(context).cancel(intent.getLongExtra(MARK_AS_READ_ID_KEY, -1).toInt())
|
|
||||||
MoxplatformAndroidPlugin.notificationSink?.success(
|
MoxplatformAndroidPlugin.notificationSink?.success(
|
||||||
NotificationEvent().apply {
|
NotificationEvent().apply {
|
||||||
jid = intent.getStringExtra(NOTIFICATION_EXTRA_JID_KEY)!!
|
jid = intent.getStringExtra(NOTIFICATION_EXTRA_JID_KEY)!!
|
||||||
type = Api.NotificationEventType.MARK_AS_READ
|
type = Api.NotificationEventType.MARK_AS_READ
|
||||||
payload = null
|
payload = null
|
||||||
|
extra = extractPayloadMapFromIntent(intent)
|
||||||
}.toList()
|
}.toList()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
NotificationManagerCompat.from(context).cancel(intent.getLongExtra(MARK_AS_READ_ID_KEY, -1).toInt())
|
||||||
dismissNotification(context, intent);
|
dismissNotification(context, intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,6 +77,7 @@ class NotificationReceiver : BroadcastReceiver() {
|
|||||||
jid = intent.getStringExtra(NOTIFICATION_EXTRA_JID_KEY)!!
|
jid = intent.getStringExtra(NOTIFICATION_EXTRA_JID_KEY)!!
|
||||||
type = Api.NotificationEventType.REPLY
|
type = Api.NotificationEventType.REPLY
|
||||||
payload = replyPayload.toString()
|
payload = replyPayload.toString()
|
||||||
|
extra = extractPayloadMapFromIntent(intent)
|
||||||
}.toList()
|
}.toList()
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -148,19 +163,12 @@ class NotificationReceiver : BroadcastReceiver() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun handleTap(context: Context, intent: Intent) {
|
private fun handleTap(context: Context, intent: Intent) {
|
||||||
val extras = mutableMapOf<String?, String?>()
|
|
||||||
intent.extras?.keySet()!!.forEach {
|
|
||||||
if (it.startsWith("payload_")) {
|
|
||||||
extras[it.substring(8)] = intent.extras!!.getString(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MoxplatformAndroidPlugin.notificationSink?.success(
|
MoxplatformAndroidPlugin.notificationSink?.success(
|
||||||
NotificationEvent().apply {
|
NotificationEvent().apply {
|
||||||
jid = intent.getStringExtra(NOTIFICATION_EXTRA_JID_KEY)!!
|
jid = intent.getStringExtra(NOTIFICATION_EXTRA_JID_KEY)!!
|
||||||
type = Api.NotificationEventType.OPEN
|
type = Api.NotificationEventType.OPEN
|
||||||
payload = null
|
payload = null
|
||||||
extra = extras
|
extra = extractPayloadMapFromIntent(intent)
|
||||||
}.toList()
|
}.toList()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ import androidx.core.app.RemoteInput
|
|||||||
import androidx.core.content.FileProvider
|
import androidx.core.content.FileProvider
|
||||||
import androidx.core.graphics.drawable.IconCompat
|
import androidx.core.graphics.drawable.IconCompat
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import java.lang.Exception
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Holds "persistent" data for notifications, like i18n strings. While not useful now, this is
|
* Holds "persistent" data for notifications, like i18n strings. While not useful now, this is
|
||||||
@ -78,6 +79,10 @@ fun showMessagingNotification(context: Context, notification: Api.MessagingNotif
|
|||||||
action = REPLY_ACTION
|
action = REPLY_ACTION
|
||||||
putExtra(NOTIFICATION_EXTRA_JID_KEY, notification.jid)
|
putExtra(NOTIFICATION_EXTRA_JID_KEY, notification.jid)
|
||||||
putExtra(NOTIFICATION_EXTRA_ID_KEY, notification.id)
|
putExtra(NOTIFICATION_EXTRA_ID_KEY, notification.id)
|
||||||
|
|
||||||
|
notification.extra?.forEach {
|
||||||
|
putExtra("payload_${it.key}", it.value)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
val replyPendingIntent = PendingIntent.getBroadcast(
|
val replyPendingIntent = PendingIntent.getBroadcast(
|
||||||
context.applicationContext,
|
context.applicationContext,
|
||||||
@ -99,6 +104,10 @@ fun showMessagingNotification(context: Context, notification: Api.MessagingNotif
|
|||||||
action = MARK_AS_READ_ACTION
|
action = MARK_AS_READ_ACTION
|
||||||
putExtra(NOTIFICATION_EXTRA_JID_KEY, notification.jid)
|
putExtra(NOTIFICATION_EXTRA_JID_KEY, notification.jid)
|
||||||
putExtra(NOTIFICATION_EXTRA_ID_KEY, notification.id)
|
putExtra(NOTIFICATION_EXTRA_ID_KEY, notification.id)
|
||||||
|
|
||||||
|
notification.extra?.forEach {
|
||||||
|
putExtra("payload_${it.key}", it.value)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
val markAsReadPendingIntent = PendingIntent.getBroadcast(
|
val markAsReadPendingIntent = PendingIntent.getBroadcast(
|
||||||
context.applicationContext,
|
context.applicationContext,
|
||||||
@ -144,7 +153,14 @@ fun showMessagingNotification(context: Context, notification: Api.MessagingNotif
|
|||||||
}
|
}
|
||||||
}.build()
|
}.build()
|
||||||
val style = NotificationCompat.MessagingStyle(selfPerson);
|
val style = NotificationCompat.MessagingStyle(selfPerson);
|
||||||
for (message in notification.messages) {
|
style.isGroupConversation = notification.isGroupchat
|
||||||
|
if (notification.isGroupchat) {
|
||||||
|
style.conversationTitle = notification.title
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i in notification.messages.indices) {
|
||||||
|
val message = notification.messages[i]
|
||||||
|
|
||||||
// Build the sender
|
// Build the sender
|
||||||
val sender = Person.Builder().apply {
|
val sender = Person.Builder().apply {
|
||||||
setName(message.sender)
|
setName(message.sender)
|
||||||
@ -152,11 +168,15 @@ fun showMessagingNotification(context: Context, notification: Api.MessagingNotif
|
|||||||
|
|
||||||
// Set the avatar, if available
|
// Set the avatar, if available
|
||||||
if (message.avatarPath != null) {
|
if (message.avatarPath != null) {
|
||||||
|
try {
|
||||||
setIcon(
|
setIcon(
|
||||||
IconCompat.createWithAdaptiveBitmap(
|
IconCompat.createWithAdaptiveBitmap(
|
||||||
BitmapFactory.decodeFile(message.avatarPath),
|
BitmapFactory.decodeFile(message.avatarPath),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
} catch (ex: Throwable) {
|
||||||
|
Log.w(TAG, "Failed to open avatar at ${message.avatarPath}")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}.build()
|
}.build()
|
||||||
|
|
||||||
@ -204,6 +224,11 @@ fun showMessagingNotification(context: Context, notification: Api.MessagingNotif
|
|||||||
addAction(replyAction)
|
addAction(replyAction)
|
||||||
addAction(markAsReadAction)
|
addAction(markAsReadAction)
|
||||||
|
|
||||||
|
// Groupchat title
|
||||||
|
if (notification.isGroupchat) {
|
||||||
|
setContentTitle(notification.title)
|
||||||
|
}
|
||||||
|
|
||||||
setAllowSystemGeneratedContextualActions(true)
|
setAllowSystemGeneratedContextualActions(true)
|
||||||
setCategory(Notification.CATEGORY_MESSAGE)
|
setCategory(Notification.CATEGORY_MESSAGE)
|
||||||
|
|
||||||
|
@ -11,10 +11,11 @@ class AndroidNotificationsImplementation extends NotificationsImplementation {
|
|||||||
@override
|
@override
|
||||||
Future<void> createNotificationChannel(
|
Future<void> createNotificationChannel(
|
||||||
String title,
|
String title,
|
||||||
|
String description,
|
||||||
String id,
|
String id,
|
||||||
bool urgent,
|
bool urgent,
|
||||||
) async {
|
) async {
|
||||||
return _api.createNotificationChannel(title, id, urgent);
|
return _api.createNotificationChannel(title, description, id, urgent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -29,6 +30,11 @@ class AndroidNotificationsImplementation extends NotificationsImplementation {
|
|||||||
return _api.showNotification(notification);
|
return _api.showNotification(notification);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> dismissNotification(int id) async {
|
||||||
|
return _api.dismissNotification(id);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> setNotificationSelfAvatar(String path) async {
|
Future<void> setNotificationSelfAvatar(String path) async {
|
||||||
return _api.setNotificationSelfAvatar(path);
|
return _api.setNotificationSelfAvatar(path);
|
||||||
|
@ -106,6 +106,7 @@ class MessagingNotification {
|
|||||||
required this.channelId,
|
required this.channelId,
|
||||||
required this.jid,
|
required this.jid,
|
||||||
required this.messages,
|
required this.messages,
|
||||||
|
required this.isGroupchat,
|
||||||
this.extra,
|
this.extra,
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -124,6 +125,9 @@ class MessagingNotification {
|
|||||||
/// Messages to show.
|
/// Messages to show.
|
||||||
List<NotificationMessage?> messages;
|
List<NotificationMessage?> messages;
|
||||||
|
|
||||||
|
/// Flag indicating whether this notification is from a groupchat or not.
|
||||||
|
bool isGroupchat;
|
||||||
|
|
||||||
/// Additional data to include.
|
/// Additional data to include.
|
||||||
Map<String?, String?>? extra;
|
Map<String?, String?>? extra;
|
||||||
|
|
||||||
@ -134,6 +138,7 @@ class MessagingNotification {
|
|||||||
channelId,
|
channelId,
|
||||||
jid,
|
jid,
|
||||||
messages,
|
messages,
|
||||||
|
isGroupchat,
|
||||||
extra,
|
extra,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@ -146,7 +151,8 @@ class MessagingNotification {
|
|||||||
channelId: result[2]! as String,
|
channelId: result[2]! as String,
|
||||||
jid: result[3]! as String,
|
jid: result[3]! as String,
|
||||||
messages: (result[4] as List<Object?>?)!.cast<NotificationMessage?>(),
|
messages: (result[4] as List<Object?>?)!.cast<NotificationMessage?>(),
|
||||||
extra: (result[5] as Map<Object?, Object?>?)?.cast<String?, String?>(),
|
isGroupchat: result[5]! as bool,
|
||||||
|
extra: (result[6] as Map<Object?, Object?>?)?.cast<String?, String?>(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -331,12 +337,12 @@ class MoxplatformApi {
|
|||||||
|
|
||||||
static const MessageCodec<Object?> codec = _MoxplatformApiCodec();
|
static const MessageCodec<Object?> codec = _MoxplatformApiCodec();
|
||||||
|
|
||||||
Future<void> createNotificationChannel(String arg_title, String arg_id, bool arg_urgent) async {
|
Future<void> createNotificationChannel(String arg_title, String arg_description, String arg_id, bool arg_urgent) async {
|
||||||
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
|
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
|
||||||
'dev.flutter.pigeon.moxplatform_platform_interface.MoxplatformApi.createNotificationChannel', codec,
|
'dev.flutter.pigeon.moxplatform_platform_interface.MoxplatformApi.createNotificationChannel', codec,
|
||||||
binaryMessenger: _binaryMessenger);
|
binaryMessenger: _binaryMessenger);
|
||||||
final List<Object?>? replyList =
|
final List<Object?>? replyList =
|
||||||
await channel.send(<Object?>[arg_title, arg_id, arg_urgent]) as List<Object?>?;
|
await channel.send(<Object?>[arg_title, arg_description, arg_id, arg_urgent]) as List<Object?>?;
|
||||||
if (replyList == null) {
|
if (replyList == null) {
|
||||||
throw PlatformException(
|
throw PlatformException(
|
||||||
code: 'channel-error',
|
code: 'channel-error',
|
||||||
@ -397,6 +403,28 @@ class MoxplatformApi {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> dismissNotification(int arg_id) async {
|
||||||
|
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
|
||||||
|
'dev.flutter.pigeon.moxplatform_platform_interface.MoxplatformApi.dismissNotification', codec,
|
||||||
|
binaryMessenger: _binaryMessenger);
|
||||||
|
final List<Object?>? replyList =
|
||||||
|
await channel.send(<Object?>[arg_id]) as List<Object?>?;
|
||||||
|
if (replyList == null) {
|
||||||
|
throw PlatformException(
|
||||||
|
code: 'channel-error',
|
||||||
|
message: 'Unable to establish connection on channel.',
|
||||||
|
);
|
||||||
|
} else if (replyList.length > 1) {
|
||||||
|
throw PlatformException(
|
||||||
|
code: replyList[0]! as String,
|
||||||
|
message: replyList[1] as String?,
|
||||||
|
details: replyList[2],
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> setNotificationSelfAvatar(String arg_path) async {
|
Future<void> setNotificationSelfAvatar(String arg_path) async {
|
||||||
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
|
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
|
||||||
'dev.flutter.pigeon.moxplatform_platform_interface.MoxplatformApi.setNotificationSelfAvatar', codec,
|
'dev.flutter.pigeon.moxplatform_platform_interface.MoxplatformApi.setNotificationSelfAvatar', codec,
|
||||||
|
@ -4,7 +4,7 @@ import 'package:moxplatform_platform_interface/src/api.g.dart';
|
|||||||
abstract class NotificationsImplementation {
|
abstract class NotificationsImplementation {
|
||||||
/// Creates a notification channel with the name [title] and id [id]. If [urgent] is true, then
|
/// Creates a notification channel with the name [title] and id [id]. If [urgent] is true, then
|
||||||
/// it configures the channel as carrying urgent information.
|
/// it configures the channel as carrying urgent information.
|
||||||
Future<void> createNotificationChannel(String title, String id, bool urgent);
|
Future<void> createNotificationChannel(String title, String description, String id, bool urgent);
|
||||||
|
|
||||||
/// Shows a notification [notification] in the messaging style with everyting it needs.
|
/// Shows a notification [notification] in the messaging style with everyting it needs.
|
||||||
Future<void> showMessagingNotification(MessagingNotification notification);
|
Future<void> showMessagingNotification(MessagingNotification notification);
|
||||||
@ -12,6 +12,9 @@ abstract class NotificationsImplementation {
|
|||||||
/// Shows a regular notification [notification].
|
/// Shows a regular notification [notification].
|
||||||
Future<void> showNotification(RegularNotification notification);
|
Future<void> showNotification(RegularNotification notification);
|
||||||
|
|
||||||
|
/// Dismisses the notification with id [id].
|
||||||
|
Future<void> dismissNotification(int id);
|
||||||
|
|
||||||
/// Sets the path to the self-avatar for in-notification replies.
|
/// Sets the path to the self-avatar for in-notification replies.
|
||||||
Future<void> setNotificationSelfAvatar(String path);
|
Future<void> setNotificationSelfAvatar(String path);
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ import 'package:moxplatform_platform_interface/src/notifications.dart';
|
|||||||
|
|
||||||
class StubNotificationsImplementation extends NotificationsImplementation {
|
class StubNotificationsImplementation extends NotificationsImplementation {
|
||||||
@override
|
@override
|
||||||
Future<void> createNotificationChannel(String title, String id, bool urgent) async {}
|
Future<void> createNotificationChannel(String title, String description, String id, bool urgent) async {}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> showMessagingNotification(MessagingNotification notification) async {}
|
Future<void> showMessagingNotification(MessagingNotification notification) async {}
|
||||||
@ -12,6 +12,8 @@ class StubNotificationsImplementation extends NotificationsImplementation {
|
|||||||
@override
|
@override
|
||||||
Future<void> showNotification(RegularNotification notification) async {}
|
Future<void> showNotification(RegularNotification notification) async {}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> dismissNotification(int id) async {}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> setNotificationSelfAvatar(String path) async {}
|
Future<void> setNotificationSelfAvatar(String path) async {}
|
||||||
|
@ -54,7 +54,7 @@ class NotificationMessage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class MessagingNotification {
|
class MessagingNotification {
|
||||||
const MessagingNotification(this.title, this.id, this.jid, this.messages, this.channelId, this.extra);
|
const MessagingNotification(this.title, this.id, this.jid, this.messages, this.channelId, this.isGroupchat, this.extra);
|
||||||
|
|
||||||
/// The title of the conversation.
|
/// The title of the conversation.
|
||||||
final String title;
|
final String title;
|
||||||
@ -71,6 +71,9 @@ class MessagingNotification {
|
|||||||
/// Messages to show.
|
/// Messages to show.
|
||||||
final List<NotificationMessage?> messages;
|
final List<NotificationMessage?> messages;
|
||||||
|
|
||||||
|
/// Flag indicating whether this notification is from a groupchat or not.
|
||||||
|
final bool isGroupchat;
|
||||||
|
|
||||||
/// Additional data to include.
|
/// Additional data to include.
|
||||||
final Map<String?, String?>? extra;
|
final Map<String?, String?>? extra;
|
||||||
}
|
}
|
||||||
@ -111,6 +114,7 @@ class NotificationEvent {
|
|||||||
this.jid,
|
this.jid,
|
||||||
this.type,
|
this.type,
|
||||||
this.payload,
|
this.payload,
|
||||||
|
this.extra,
|
||||||
);
|
);
|
||||||
|
|
||||||
/// The JID the notification was for.
|
/// The JID the notification was for.
|
||||||
@ -143,9 +147,10 @@ class NotificationI18nData {
|
|||||||
|
|
||||||
@HostApi()
|
@HostApi()
|
||||||
abstract class MoxplatformApi {
|
abstract class MoxplatformApi {
|
||||||
void createNotificationChannel(String title, String id, bool urgent);
|
void createNotificationChannel(String title, String description, String id, bool urgent);
|
||||||
void showMessagingNotification(MessagingNotification notification);
|
void showMessagingNotification(MessagingNotification notification);
|
||||||
void showNotification(RegularNotification notification);
|
void showNotification(RegularNotification notification);
|
||||||
|
void dismissNotification(int id);
|
||||||
void setNotificationSelfAvatar(String path);
|
void setNotificationSelfAvatar(String path);
|
||||||
void setNotificationI18n(NotificationI18nData data);
|
void setNotificationI18n(NotificationI18nData data);
|
||||||
String getPersistentDataPath();
|
String getPersistentDataPath();
|
||||||
|
Reference in New Issue
Block a user