diff --git a/android/app/src/main/kotlin/es/freetimelab/pluriwave/AlarmScheduler.kt b/android/app/src/main/kotlin/es/freetimelab/pluriwave/AlarmScheduler.kt
index 05d3cf1..e260f86 100644
--- a/android/app/src/main/kotlin/es/freetimelab/pluriwave/AlarmScheduler.kt
+++ b/android/app/src/main/kotlin/es/freetimelab/pluriwave/AlarmScheduler.kt
@@ -577,7 +577,8 @@ class AlarmScheduler(private val context: Context) {
)
val notification = NotificationCompat.Builder(appContext, PluriWaveAlarmReceiver.CHANNEL_ID)
- .setSmallIcon(android.R.drawable.ic_lock_idle_alarm)
+ .setSmallIcon(R.drawable.ic_stat_pluriwave)
+ .setColor(NotificationBrand.CYAN)
.setContentTitle(spec.title)
.setContentText(text)
.setPriority(NotificationCompat.PRIORITY_LOW)
diff --git a/android/app/src/main/kotlin/es/freetimelab/pluriwave/NotificationBrand.kt b/android/app/src/main/kotlin/es/freetimelab/pluriwave/NotificationBrand.kt
new file mode 100644
index 0000000..913d40e
--- /dev/null
+++ b/android/app/src/main/kotlin/es/freetimelab/pluriwave/NotificationBrand.kt
@@ -0,0 +1,14 @@
+package es.freetimelab.pluriwave
+
+import androidx.annotation.ColorInt
+
+/**
+ * Shared brand color for native notification icons.
+ *
+ * Single source of truth for the cyan tint applied via `NotificationCompat.Builder.setColor()`
+ * across all PluriWave alarm and audio notifications, mirroring the [AlarmNotificationStrings]
+ * shared-constants precedent.
+ */
+object NotificationBrand {
+ @ColorInt const val CYAN: Int = 0xFF21D4D9.toInt()
+}
diff --git a/android/app/src/main/kotlin/es/freetimelab/pluriwave/PluriWaveAlarmReceiver.kt b/android/app/src/main/kotlin/es/freetimelab/pluriwave/PluriWaveAlarmReceiver.kt
index 5902a78..cbd3896 100644
--- a/android/app/src/main/kotlin/es/freetimelab/pluriwave/PluriWaveAlarmReceiver.kt
+++ b/android/app/src/main/kotlin/es/freetimelab/pluriwave/PluriWaveAlarmReceiver.kt
@@ -181,7 +181,8 @@ class PluriWaveAlarmReceiver : BroadcastReceiver() {
)
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
- .setSmallIcon(android.R.drawable.ic_dialog_info)
+ .setSmallIcon(R.drawable.ic_stat_pluriwave)
+ .setColor(NotificationBrand.CYAN)
.setContentTitle(title)
.setContentText(contentText)
.setPriority(NotificationCompat.PRIORITY_LOW)
diff --git a/android/app/src/main/kotlin/es/freetimelab/pluriwave/PluriWaveAlarmService.kt b/android/app/src/main/kotlin/es/freetimelab/pluriwave/PluriWaveAlarmService.kt
index a8da5cf..20a8b33 100644
--- a/android/app/src/main/kotlin/es/freetimelab/pluriwave/PluriWaveAlarmService.kt
+++ b/android/app/src/main/kotlin/es/freetimelab/pluriwave/PluriWaveAlarmService.kt
@@ -387,7 +387,8 @@ class PluriWaveAlarmService : Service() {
snoozeMinutes: Int
) =
NotificationCompat.Builder(this, CHANNEL_ID)
- .setSmallIcon(android.R.drawable.ic_lock_idle_alarm)
+ .setSmallIcon(R.drawable.ic_stat_pluriwave)
+ .setColor(NotificationBrand.CYAN)
.setContentTitle(AlarmNotificationStrings.ringTitle(this))
.setContentText(
if (stationName.isNullOrBlank()) title else "$title - $stationName"
diff --git a/android/app/src/main/res/drawable/ic_stat_pluriwave.xml b/android/app/src/main/res/drawable/ic_stat_pluriwave.xml
new file mode 100644
index 0000000..59e0210
--- /dev/null
+++ b/android/app/src/main/res/drawable/ic_stat_pluriwave.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/lib/main.dart b/lib/main.dart
index 3a5f1b4..b9c67cc 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -12,6 +12,10 @@ import 'tema/pluriwave_tokens.dart';
const _anchoMinimoLandscape = 600.0;
+/// Branded monochrome status-bar icon, replacing the default full-color
+/// launcher silhouette fallback.
+const androidNotificationIconResource = 'drawable/ic_stat_pluriwave';
+
/// S5-R8: media notification accent uses the brand color, not the M3
/// default purple. Top-level const so tests can assert it.
const configuracionAudioService = AudioServiceConfig(
@@ -20,6 +24,7 @@ const configuracionAudioService = AudioServiceConfig(
androidNotificationOngoing: true,
androidStopForegroundOnPause: true,
notificationColor: PluriWaveTokens.brand,
+ androidNotificationIcon: androidNotificationIconResource,
);
Future main() async {
diff --git a/test/tema/notification_color_test.dart b/test/tema/notification_color_test.dart
index 9594c51..f2bf3f2 100644
--- a/test/tema/notification_color_test.dart
+++ b/test/tema/notification_color_test.dart
@@ -13,4 +13,15 @@ void main() {
isNot(const Color(0xFF6750A4)),
);
});
+
+ test('AudioServiceConfig usa el icono monocromo de marca', () {
+ expect(
+ configuracionAudioService.androidNotificationIcon,
+ 'drawable/ic_stat_pluriwave',
+ );
+ expect(
+ configuracionAudioService.androidNotificationIcon,
+ isNot('mipmap/ic_launcher'),
+ );
+ });
}