diff --git a/app/src/main/java/com/termux/api/apis/NotificationAPI.java b/app/src/main/java/com/termux/api/apis/NotificationAPI.java index caee093a3..d3c211496 100644 --- a/app/src/main/java/com/termux/api/apis/NotificationAPI.java +++ b/app/src/main/java/com/termux/api/apis/NotificationAPI.java @@ -17,6 +17,7 @@ import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationManagerCompat; import androidx.core.app.RemoteInput; +import androidx.core.graphics.drawable.IconCompat; import androidx.core.util.Pair; import com.termux.api.R; @@ -27,6 +28,9 @@ import com.termux.shared.shell.command.ExecutionCommand; import com.termux.shared.termux.TermuxConstants; import com.termux.shared.termux.TermuxConstants.TERMUX_APP.TERMUX_SERVICE; +import com.termux.shared.termux.theme.TermuxThemeUtils; +import com.termux.shared.theme.NightMode; +import com.termux.shared.theme.ThemeUtils; import java.io.File; import java.io.PrintWriter; @@ -174,7 +178,7 @@ static Pair buildNotification(final Context int ledOffMs = intent.getIntExtra("led-off", 800); long[] vibratePattern = intent.getLongArrayExtra("vibrate"); - boolean useSound = intent.getBooleanExtra("sound", false); + boolean silent = intent.getBooleanExtra("silent", false); boolean ongoing = intent.getBooleanExtra("ongoing", false); boolean alertOnce = intent.getBooleanExtra("alert-once", false); @@ -202,6 +206,11 @@ static Pair buildNotification(final Context String SmallIcon = intent.getStringExtra("icon"); + // When dark mode is enabled, assume the notification icon is shown on a dark background + // and color it white for better visibility + TermuxThemeUtils.setAppNightMode(context); + boolean shouldUseWhiteIcon = ThemeUtils.shouldEnableDarkTheme(context, NightMode.getAppNightMode().getName()); + if (SmallIcon != null) { final Class clz = R.drawable.class; final Field[] fields = clz.getDeclaredFields(); @@ -209,10 +218,16 @@ static Pair buildNotification(final Context String name = field.getName(); if (name.equals("ic_" + SmallIcon + "_black_24dp")) { try { - notification.setSmallIcon(field.getInt(clz)); - } catch (Exception e) { - break; - } + int id = field.getInt(clz); + if (shouldUseWhiteIcon) { + IconCompat icon = IconCompat.createWithResource(context, id); + icon.setTint(0xFFFFFFFF); + notification.setSmallIcon(icon); + } else { + notification.setSmallIcon(id); + } + } catch (Exception ignored) {} + break; } } } @@ -275,7 +290,7 @@ static Pair buildNotification(final Context notification.setVibrate(vibrateArg); } - if (useSound) notification.setSound(Settings.System.DEFAULT_NOTIFICATION_URI); + if (silent) notification.setSilent(true); notification.setAutoCancel(true); @@ -421,6 +436,6 @@ static Intent createExecuteIntent(String action){ static PendingIntent createAction(final Context context, String action){ Intent executeIntent = createExecuteIntent(action); - return PendingIntent.getService(context, 0, executeIntent, 0); + return PendingIntent.getService(context, UUID.randomUUID().hashCode(), executeIntent, 0); } }