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'), + ); + }); }