From 5efa22a767122029998be1eac0adb2b5918f44e4 Mon Sep 17 00:00:00 2001 From: "ewerton.wantroba" Date: Wed, 15 Oct 2025 17:48:26 -0300 Subject: [PATCH] Feature: Custom notification icon --- .../flutter_overlay_window/FlutterOverlayWindowPlugin.java | 4 ++++ .../window/flutter_overlay_window/OverlayService.java | 4 ++-- .../overlay/window/flutter_overlay_window/WindowSetup.java | 7 +++++++ lib/src/overlay_window.dart | 5 +++++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/flutter/overlay/window/flutter_overlay_window/FlutterOverlayWindowPlugin.java b/android/src/main/java/flutter/overlay/window/flutter_overlay_window/FlutterOverlayWindowPlugin.java index 3ffc76b7..8cd4073e 100644 --- a/android/src/main/java/flutter/overlay/window/flutter_overlay_window/FlutterOverlayWindowPlugin.java +++ b/android/src/main/java/flutter/overlay/window/flutter_overlay_window/FlutterOverlayWindowPlugin.java @@ -85,6 +85,7 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { String overlayTitle = call.argument("overlayTitle"); String overlayContent = call.argument("overlayContent"); String notificationVisibility = call.argument("notificationVisibility"); + String notificationIcon = call.argument("notificationIcon"); boolean enableDrag = call.argument("enableDrag"); String positionGravity = call.argument("positionGravity"); Map startPosition = call.argument("startPosition"); @@ -101,6 +102,9 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { WindowSetup.overlayContent = overlayContent == null ? "" : overlayContent; WindowSetup.positionGravity = positionGravity; WindowSetup.setNotificationVisibility(notificationVisibility); + if(notificationIcon!=null) { + WindowSetup.setNotificationIcon(notificationIcon); + } final Intent intent = new Intent(context, OverlayService.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); diff --git a/android/src/main/java/flutter/overlay/window/flutter_overlay_window/OverlayService.java b/android/src/main/java/flutter/overlay/window/flutter_overlay_window/OverlayService.java index f50d6a37..9152dd4f 100644 --- a/android/src/main/java/flutter/overlay/window/flutter_overlay_window/OverlayService.java +++ b/android/src/main/java/flutter/overlay/window/flutter_overlay_window/OverlayService.java @@ -332,7 +332,7 @@ public void onCreate() { } PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, pendingFlags); - final int notifyIcon = getDrawableResourceId("mipmap", "launcher"); + final int notifyIcon = getDrawableResourceId(WindowSetup.notificationIconResType, WindowSetup.notificationIconName); Notification notification = new NotificationCompat.Builder(this, OverlayConstants.CHANNEL_ID) .setContentTitle(WindowSetup.overlayTitle) .setContentText(WindowSetup.overlayContent) @@ -358,7 +358,7 @@ private void createNotificationChannel() { } private int getDrawableResourceId(String resType, String name) { - return getApplicationContext().getResources().getIdentifier(String.format("ic_%s", name), resType, getApplicationContext().getPackageName()); + return getApplicationContext().getResources().getIdentifier(name, resType, getApplicationContext().getPackageName()); } private int dpToPx(int dp) { diff --git a/android/src/main/java/flutter/overlay/window/flutter_overlay_window/WindowSetup.java b/android/src/main/java/flutter/overlay/window/flutter_overlay_window/WindowSetup.java index 3563a1ca..563a4c20 100644 --- a/android/src/main/java/flutter/overlay/window/flutter_overlay_window/WindowSetup.java +++ b/android/src/main/java/flutter/overlay/window/flutter_overlay_window/WindowSetup.java @@ -20,6 +20,8 @@ public abstract class WindowSetup { static String positionGravity = "none"; static int notificationVisibility = NotificationCompat.VISIBILITY_PRIVATE; static boolean enableDrag = false; + static String notificationIconResType = "mipmap"; + static String notificationIconName = "ic_launcher"; static void setNotificationVisibility(String name) { @@ -98,4 +100,9 @@ static void setGravityFromAlignment(String alignment) { } } + + static void setNotificationIcon(String notificationIcon) { + notificationIconResType = "drawable"; + notificationIconName = notificationIcon; + } } diff --git a/lib/src/overlay_window.dart b/lib/src/overlay_window.dart index fef7d45d..36461fd0 100644 --- a/lib/src/overlay_window.dart +++ b/lib/src/overlay_window.dart @@ -39,6 +39,9 @@ class FlutterOverlayWindow { /// `positionGravity` the overlay postion after drag and default is [PositionGravity.none] /// /// `startPosition` the overlay start position and default is null + /// + /// `notificationIcon` the notification icon (file must be in the android/app/src/main/res/drawable folder) + /// static Future showOverlay({ int height = WindowSize.fullCover, int width = WindowSize.matchParent, @@ -50,6 +53,7 @@ class FlutterOverlayWindow { bool enableDrag = false, PositionGravity positionGravity = PositionGravity.none, OverlayPosition? startPosition, + String? notificationIcon, }) async { await _channel.invokeMethod( 'showOverlay', @@ -64,6 +68,7 @@ class FlutterOverlayWindow { "notificationVisibility": visibility.name, "positionGravity": positionGravity.name, "startPosition": startPosition?.toMap(), + "notificationIcon" : notificationIcon }, ); }