fix(android): Fix notification grouping with the foreground notification
This commit is contained in:
parent
11ea1fae12
commit
27440067cd
@ -1,9 +1,13 @@
|
|||||||
package me.polynom.moxplatform_android;
|
package me.polynom.moxplatform_android;
|
||||||
|
|
||||||
|
import static me.polynom.moxplatform_android.ConstantsKt.GROUP_KEY_FOREGROUND;
|
||||||
|
import static me.polynom.moxplatform_android.ConstantsKt.GROUP_KEY_MESSAGES;
|
||||||
|
import static me.polynom.moxplatform_android.ConstantsKt.GROUP_KEY_OTHER;
|
||||||
import static me.polynom.moxplatform_android.ConstantsKt.SHARED_PREFERENCES_KEY;
|
import static me.polynom.moxplatform_android.ConstantsKt.SHARED_PREFERENCES_KEY;
|
||||||
|
|
||||||
import android.app.AlarmManager;
|
import android.app.AlarmManager;
|
||||||
import android.app.NotificationChannel;
|
import android.app.NotificationChannel;
|
||||||
|
import android.app.NotificationChannelGroup;
|
||||||
import android.app.NotificationManager;
|
import android.app.NotificationManager;
|
||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
import android.app.Service;
|
import android.app.Service;
|
||||||
@ -98,14 +102,40 @@ public class BackgroundService extends Service implements MethodChannel.MethodCa
|
|||||||
|
|
||||||
private void createNotificationChannel() {
|
private void createNotificationChannel() {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
CharSequence name = "Moxxy Background Service";
|
|
||||||
String description = "Executing Moxxy in the background";
|
|
||||||
|
|
||||||
int importance = NotificationManager.IMPORTANCE_LOW;
|
|
||||||
NotificationChannel channel = new NotificationChannel("FOREGROUND_DEFAULT", name, importance);
|
|
||||||
channel.setDescription(description);
|
|
||||||
|
|
||||||
NotificationManager notificationManager = getSystemService(NotificationManager.class);
|
NotificationManager notificationManager = getSystemService(NotificationManager.class);
|
||||||
|
|
||||||
|
// Create a special notification group for the foreground service notification to prevent
|
||||||
|
// message notifications from getting grouped with it in >= Android 13.
|
||||||
|
notificationManager.createNotificationChannelGroup(
|
||||||
|
new NotificationChannelGroup(
|
||||||
|
GROUP_KEY_FOREGROUND,
|
||||||
|
"The foreground notification"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
notificationManager.createNotificationChannelGroup(
|
||||||
|
new NotificationChannelGroup(
|
||||||
|
GROUP_KEY_MESSAGES,
|
||||||
|
"Messages"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
notificationManager.createNotificationChannelGroup(
|
||||||
|
new NotificationChannelGroup(
|
||||||
|
GROUP_KEY_OTHER,
|
||||||
|
"Other"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
NotificationChannel channel = new NotificationChannel(
|
||||||
|
"FOREGROUND_DEFAULT",
|
||||||
|
"Moxxy Background Service",
|
||||||
|
NotificationManager.IMPORTANCE_LOW
|
||||||
|
);
|
||||||
|
channel.setDescription("Executing Moxxy in the background");
|
||||||
|
// Prevent showing a badge in the Launcher
|
||||||
|
channel.setShowBadge(false);
|
||||||
|
channel.setGroup("foreground");
|
||||||
|
|
||||||
|
// Create the channel
|
||||||
notificationManager.createNotificationChannel(channel);
|
notificationManager.createNotificationChannel(channel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,10 @@ const val TAG = "Moxplatform"
|
|||||||
// The size of the buffer to hashing, encryption, and decryption in bytes.
|
// The size of the buffer to hashing, encryption, and decryption in bytes.
|
||||||
const val BUFFER_SIZE = 8096
|
const val BUFFER_SIZE = 8096
|
||||||
|
|
||||||
|
const val GROUP_KEY_FOREGROUND = "foreground"
|
||||||
|
const val GROUP_KEY_MESSAGES = "messages"
|
||||||
|
const val GROUP_KEY_OTHER = "other"
|
||||||
|
|
||||||
// The data key for text entered in the notification's reply field
|
// The data key for text entered in the notification's reply field
|
||||||
const val REPLY_TEXT_KEY = "key_reply_text"
|
const val REPLY_TEXT_KEY = "key_reply_text"
|
||||||
|
|
||||||
|
@ -161,6 +161,7 @@ class NotificationReceiver : BroadcastReceiver() {
|
|||||||
val recoveredBuilder = Notification.Builder.recoverBuilder(context, notification).apply {
|
val recoveredBuilder = Notification.Builder.recoverBuilder(context, notification).apply {
|
||||||
style = newStyle
|
style = newStyle
|
||||||
setOnlyAlertOnce(true)
|
setOnlyAlertOnce(true)
|
||||||
|
setGroup(GROUP_KEY_MESSAGES)
|
||||||
}
|
}
|
||||||
NotificationManagerCompat.from(context).notify(id, recoveredBuilder.build())
|
NotificationManagerCompat.from(context).notify(id, recoveredBuilder.build())
|
||||||
}
|
}
|
||||||
|
@ -254,6 +254,9 @@ fun showMessagingNotification(context: Context, notification: Api.MessagingNotif
|
|||||||
setContentTitle(notification.title)
|
setContentTitle(notification.title)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Prevent grouping with the foreground service
|
||||||
|
setGroup(GROUP_KEY_MESSAGES)
|
||||||
|
|
||||||
setAllowSystemGeneratedContextualActions(true)
|
setAllowSystemGeneratedContextualActions(true)
|
||||||
setCategory(Notification.CATEGORY_MESSAGE)
|
setCategory(Notification.CATEGORY_MESSAGE)
|
||||||
|
|
||||||
@ -278,6 +281,8 @@ fun showNotification(context: Context, notification: Api.RegularNotification) {
|
|||||||
Api.NotificationIcon.WARNING -> setSmallIcon(R.drawable.warning)
|
Api.NotificationIcon.WARNING -> setSmallIcon(R.drawable.warning)
|
||||||
Api.NotificationIcon.NONE -> {}
|
Api.NotificationIcon.NONE -> {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setGroup(GROUP_KEY_OTHER)
|
||||||
}.build()
|
}.build()
|
||||||
|
|
||||||
// Post the notification
|
// Post the notification
|
||||||
|
Reference in New Issue
Block a user