From de073b5032aa732f0ebe299dcf31d4b4cd00995f Mon Sep 17 00:00:00 2001 From: Sikander Date: Mon, 31 Jan 2022 01:54:34 +0500 Subject: [PATCH 1/2] XIOmi support updated --- .../flutterappbadger/FlutterAppBadgerPlugin.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/android/src/main/java/fr/g123k/flutterappbadger/FlutterAppBadgerPlugin.java b/android/src/main/java/fr/g123k/flutterappbadger/FlutterAppBadgerPlugin.java index 18d1e47..4cf46a5 100644 --- a/android/src/main/java/fr/g123k/flutterappbadger/FlutterAppBadgerPlugin.java +++ b/android/src/main/java/fr/g123k/flutterappbadger/FlutterAppBadgerPlugin.java @@ -8,6 +8,10 @@ import io.flutter.plugin.common.MethodChannel.Result; import io.flutter.plugin.common.MethodCall; import me.leolin.shortcutbadger.ShortcutBadger; +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.os.Build; /** * FlutterAppBadgerPlugin @@ -18,6 +22,8 @@ public class FlutterAppBadgerPlugin implements MethodCallHandler, FlutterPlugin private MethodChannel channel; private static final String CHANNEL_NAME = "g123k/flutter_app_badger"; + private Notification.Builder builder; + /** * Plugin registration. */ @@ -27,17 +33,25 @@ public void onAttachedToEngine(FlutterPluginBinding flutterPluginBinding) { channel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), CHANNEL_NAME); channel.setMethodCallHandler(this); applicationContext = flutterPluginBinding.getApplicationContext(); + builder = new Notification.Builder(applicationContext) + .setContentTitle("") + .setContentText("") + .setSmallIcon(R.drawable.ic_launcher); } @Override public void onDetachedFromEngine(FlutterPluginBinding flutterPluginBinding) { channel.setMethodCallHandler(null); applicationContext = null; + builder = null; } @Override public void onMethodCall(MethodCall call, Result result) { if (call.method.equals("updateBadgeCount")) { + if (Build.MANUFACTURER.equalsIgnoreCase("Xiaomi")) { + ShortcutBadger.applyNotification(applicationContext, builder.build(), Integer.valueOf(call.argument("count").toString())); + } ShortcutBadger.applyCount(applicationContext, Integer.valueOf(call.argument("count").toString())); result.success(null); } else if (call.method.equals("removeBadge")) { From 4316b95ddb068c89d8e1d347fabb97964807f84f Mon Sep 17 00:00:00 2001 From: Sikander Date: Mon, 31 Jan 2022 08:28:52 +0500 Subject: [PATCH 2/2] Xiaomi Support added --- .../FlutterAppBadgerPlugin.java | 49 ++++++++++++++++--- lib/flutter_app_badger.dart | 4 +- 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/android/src/main/java/fr/g123k/flutterappbadger/FlutterAppBadgerPlugin.java b/android/src/main/java/fr/g123k/flutterappbadger/FlutterAppBadgerPlugin.java index 4cf46a5..710ea49 100644 --- a/android/src/main/java/fr/g123k/flutterappbadger/FlutterAppBadgerPlugin.java +++ b/android/src/main/java/fr/g123k/flutterappbadger/FlutterAppBadgerPlugin.java @@ -1,17 +1,22 @@ package fr.g123k.flutterappbadger; import android.content.Context; - import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; import io.flutter.plugin.common.MethodChannel.Result; import io.flutter.plugin.common.MethodCall; import me.leolin.shortcutbadger.ShortcutBadger; +import android.annotation.TargetApi; +import android.app.IntentService; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; +import android.content.Context; +import android.content.Intent; import android.os.Build; +import android.util.Log; + /** * FlutterAppBadgerPlugin @@ -21,8 +26,10 @@ public class FlutterAppBadgerPlugin implements MethodCallHandler, FlutterPlugin private Context applicationContext; private MethodChannel channel; private static final String CHANNEL_NAME = "g123k/flutter_app_badger"; + private static final String NOTIFICATION_CHANNEL = "g123k/flutter_app_badger"; - private Notification.Builder builder; + private NotificationManager mNotificationManager; + private int notificationId = 0; /** * Plugin registration. @@ -33,26 +40,43 @@ public void onAttachedToEngine(FlutterPluginBinding flutterPluginBinding) { channel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), CHANNEL_NAME); channel.setMethodCallHandler(this); applicationContext = flutterPluginBinding.getApplicationContext(); - builder = new Notification.Builder(applicationContext) - .setContentTitle("") - .setContentText("") - .setSmallIcon(R.drawable.ic_launcher); + + mNotificationManager = (NotificationManager) applicationContext.getSystemService(applicationContext.NOTIFICATION_SERVICE); } @Override public void onDetachedFromEngine(FlutterPluginBinding flutterPluginBinding) { channel.setMethodCallHandler(null); applicationContext = null; - builder = null; } @Override public void onMethodCall(MethodCall call, Result result) { if (call.method.equals("updateBadgeCount")) { if (Build.MANUFACTURER.equalsIgnoreCase("Xiaomi")) { - ShortcutBadger.applyNotification(applicationContext, builder.build(), Integer.valueOf(call.argument("count").toString())); + Notification.Builder builder = new Notification.Builder(applicationContext) + .setContentTitle(call.argument("title").toString()) + .setContentText(call.argument("description").toString()) + .setSmallIcon(applicationContext.getApplicationInfo().icon); + + mNotificationManager.cancel(notificationId); + notificationId++; + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + setupNotificationChannel(); + + builder.setChannelId(NOTIFICATION_CHANNEL); + } + Notification notification = builder.build(); + ShortcutBadger.applyNotification(applicationContext, notification, Integer.valueOf(call.argument("count").toString())); + mNotificationManager.notify(notificationId, notification); } + else + { + Log.d("App Badger: ", "Other Model detected"); + ShortcutBadger.applyCount(applicationContext, Integer.valueOf(call.argument("count").toString())); + } result.success(null); } else if (call.method.equals("removeBadge")) { ShortcutBadger.removeCount(applicationContext); @@ -63,4 +87,13 @@ public void onMethodCall(MethodCall call, Result result) { result.notImplemented(); } } + + @TargetApi(Build.VERSION_CODES.O) + private void setupNotificationChannel() { + NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL, "ShortcutBadger Sample", + NotificationManager.IMPORTANCE_DEFAULT); + + mNotificationManager.createNotificationChannel(channel); + } + } diff --git a/lib/flutter_app_badger.dart b/lib/flutter_app_badger.dart index 6378ce3..ccf04f0 100644 --- a/lib/flutter_app_badger.dart +++ b/lib/flutter_app_badger.dart @@ -6,8 +6,8 @@ class FlutterAppBadger { static const MethodChannel _channel = const MethodChannel('g123k/flutter_app_badger'); - static void updateBadgeCount(int count) { - _channel.invokeMethod('updateBadgeCount', {"count": count}); + static void updateBadgeCount(int count,{String title = 'Missed notification',String description=''}) { + _channel.invokeMethod('updateBadgeCount', {"count": count,"title": title,"description": description}); } static void removeBadge() {