diff --git a/composeApp/src/androidMain/kotlin/org/spotube/spotube/media/PlaybackService.kt b/composeApp/src/androidMain/kotlin/org/spotube/spotube/media/PlaybackService.kt index 49b55ac4..bc3fdaf1 100644 --- a/composeApp/src/androidMain/kotlin/org/spotube/spotube/media/PlaybackService.kt +++ b/composeApp/src/androidMain/kotlin/org/spotube/spotube/media/PlaybackService.kt @@ -51,7 +51,6 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.launch -import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext import org.koin.core.component.KoinComponent import org.koin.core.component.inject @@ -59,7 +58,6 @@ import org.jetbrains.compose.resources.getString import spotube.composeapp.generated.resources.Res import spotube.composeapp.generated.resources.notification_playback_channel_description import spotube.composeapp.generated.resources.notification_playback_channel_name -import spotube.composeapp.generated.resources.notification_playback_service_text @OptIn(UnstableApi::class) class PlaybackService : MediaLibraryService(), KoinComponent { @@ -96,9 +94,10 @@ class PlaybackService : MediaLibraryService(), KoinComponent { PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE ) + // Short-lived placeholder until Media3 posts the playback notification. No localized text: + // loading it here would block the main thread (see createNotificationChannel). val notification = NotificationCompat.Builder(this, CHANNEL_ID) .setContentTitle("Spotube") - .setContentText(runBlocking { getString(Res.string.notification_playback_service_text) }) .setSmallIcon(R.drawable.ic_stat_spotube) .setContentIntent(sessionActivity) .setOngoing(true) @@ -125,21 +124,32 @@ class PlaybackService : MediaLibraryService(), KoinComponent { Log.i(TAG, "Library session created") } + /** + * The channel must exist before startForeground, so it's created right away under the app name + * and renamed once the localized strings load. + * + * Never `runBlocking { getString(...) }` here: onCreate runs on the main thread, and Compose + * resources share one in-flight load per strings file. If App()'s stringResource started that + * load on the main dispatcher first, blocking main to await it deadlocks the app on its + * splash screen. + */ @SuppressLint("ObsoleteSdkInt") private fun createNotificationChannel() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - val channel = NotificationChannel( - CHANNEL_ID, - runBlocking { getString(Res.string.notification_playback_channel_name) }, - NotificationManager.IMPORTANCE_LOW - ).apply { - description = runBlocking { - getString(Res.string.notification_playback_channel_description) - } + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) return + val manager = getSystemService(NotificationManager::class.java) + fun channel(name: String, description: String? = null) = + NotificationChannel(CHANNEL_ID, name, NotificationManager.IMPORTANCE_LOW).apply { + this.description = description setShowBadge(false) } - val manager = getSystemService(NotificationManager::class.java) - manager.createNotificationChannel(channel) + + manager.createNotificationChannel(channel("Spotube")) + serviceScope.launch { + // Re-creating a channel with the same ID updates its name and description. + manager.createNotificationChannel( + channel( + name = getString(Res.string.notification_playback_channel_name), + description = getString(Res.string.notification_playback_channel_description))) } } diff --git a/composeApp/src/commonMain/composeResources/values-ar/strings.xml b/composeApp/src/commonMain/composeResources/values-ar/strings.xml index febc7e6a..6671d6d9 100644 --- a/composeApp/src/commonMain/composeResources/values-ar/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-ar/strings.xml @@ -938,7 +938,6 @@ إغلاق - خدمة التشغيل التشغيل عناصر التحكم في تشغيل الوسائط diff --git a/composeApp/src/commonMain/composeResources/values-bn/strings.xml b/composeApp/src/commonMain/composeResources/values-bn/strings.xml index ca7c78cf..a3c26ed2 100644 --- a/composeApp/src/commonMain/composeResources/values-bn/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-bn/strings.xml @@ -914,7 +914,6 @@ বন্ধ করুন - প্লেব্যাক সার্ভিস প্লেব্যাক মিডিয়া প্লেব্যাক কন্ট্রোল diff --git a/composeApp/src/commonMain/composeResources/values-de/strings.xml b/composeApp/src/commonMain/composeResources/values-de/strings.xml index ec3d8da3..4a4115dd 100644 --- a/composeApp/src/commonMain/composeResources/values-de/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-de/strings.xml @@ -914,7 +914,6 @@ Schließen - Wiedergabedienst Wiedergabe Steuerung der Medienwiedergabe diff --git a/composeApp/src/commonMain/composeResources/values-es/strings.xml b/composeApp/src/commonMain/composeResources/values-es/strings.xml index 4fec22e5..48c78bf3 100644 --- a/composeApp/src/commonMain/composeResources/values-es/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-es/strings.xml @@ -920,7 +920,6 @@ Cerrar - Servicio de reproducción Reproducción Controles de reproducción multimedia diff --git a/composeApp/src/commonMain/composeResources/values-fa/strings.xml b/composeApp/src/commonMain/composeResources/values-fa/strings.xml index 679313d5..8a5659ed 100644 --- a/composeApp/src/commonMain/composeResources/values-fa/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-fa/strings.xml @@ -914,7 +914,6 @@ بستن - سرویس پخش پخش کنترل‌های پخش رسانه diff --git a/composeApp/src/commonMain/composeResources/values-fr/strings.xml b/composeApp/src/commonMain/composeResources/values-fr/strings.xml index 644cb9f9..2737c4bc 100644 --- a/composeApp/src/commonMain/composeResources/values-fr/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-fr/strings.xml @@ -920,7 +920,6 @@ Fermer - Service de lecture Lecture Commandes de lecture multimédia diff --git a/composeApp/src/commonMain/composeResources/values-hi/strings.xml b/composeApp/src/commonMain/composeResources/values-hi/strings.xml index 4deeb649..2ed9b459 100644 --- a/composeApp/src/commonMain/composeResources/values-hi/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-hi/strings.xml @@ -913,7 +913,6 @@ बंद करें - प्लेबैक सेवा प्लेबैक मीडिया प्लेबैक कंट्रोल diff --git a/composeApp/src/commonMain/composeResources/values-id/strings.xml b/composeApp/src/commonMain/composeResources/values-id/strings.xml index 27c80b88..f3e1ca6a 100644 --- a/composeApp/src/commonMain/composeResources/values-id/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-id/strings.xml @@ -908,7 +908,6 @@ Tutup - Layanan pemutaran Pemutaran Kontrol pemutaran media diff --git a/composeApp/src/commonMain/composeResources/values-it/strings.xml b/composeApp/src/commonMain/composeResources/values-it/strings.xml index 36196910..b6925383 100644 --- a/composeApp/src/commonMain/composeResources/values-it/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-it/strings.xml @@ -920,7 +920,6 @@ Chiudi - Servizio di riproduzione Riproduzione Controlli di riproduzione multimediale diff --git a/composeApp/src/commonMain/composeResources/values-ja/strings.xml b/composeApp/src/commonMain/composeResources/values-ja/strings.xml index c6b4195d..a915d409 100644 --- a/composeApp/src/commonMain/composeResources/values-ja/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-ja/strings.xml @@ -908,7 +908,6 @@ 閉じる - 再生サービス 再生 メディア再生コントロール diff --git a/composeApp/src/commonMain/composeResources/values-ko/strings.xml b/composeApp/src/commonMain/composeResources/values-ko/strings.xml index cad8b072..5464dc07 100644 --- a/composeApp/src/commonMain/composeResources/values-ko/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-ko/strings.xml @@ -908,7 +908,6 @@ 닫기 - 재생 서비스 재생 미디어 재생 컨트롤 diff --git a/composeApp/src/commonMain/composeResources/values-nl/strings.xml b/composeApp/src/commonMain/composeResources/values-nl/strings.xml index 3206d0d6..337ad03c 100644 --- a/composeApp/src/commonMain/composeResources/values-nl/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-nl/strings.xml @@ -914,7 +914,6 @@ Sluiten - Afspeelservice Afspelen Bediening voor media-afspelen diff --git a/composeApp/src/commonMain/composeResources/values-pl/strings.xml b/composeApp/src/commonMain/composeResources/values-pl/strings.xml index fa6bcfb6..f5b66965 100644 --- a/composeApp/src/commonMain/composeResources/values-pl/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-pl/strings.xml @@ -926,7 +926,6 @@ Zamknij - Usługa odtwarzania Odtwarzanie Sterowanie odtwarzaniem multimediów diff --git a/composeApp/src/commonMain/composeResources/values-pt/strings.xml b/composeApp/src/commonMain/composeResources/values-pt/strings.xml index f7c11447..fed0a741 100644 --- a/composeApp/src/commonMain/composeResources/values-pt/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-pt/strings.xml @@ -920,7 +920,6 @@ Fechar - Serviço de reprodução Reprodução Controles de reprodução de mídia diff --git a/composeApp/src/commonMain/composeResources/values-ru/strings.xml b/composeApp/src/commonMain/composeResources/values-ru/strings.xml index 28b5450e..e499d01d 100644 --- a/composeApp/src/commonMain/composeResources/values-ru/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-ru/strings.xml @@ -926,7 +926,6 @@ Закрыть - Служба воспроизведения Воспроизведение Управление воспроизведением diff --git a/composeApp/src/commonMain/composeResources/values-th/strings.xml b/composeApp/src/commonMain/composeResources/values-th/strings.xml index 2b14b08d..5c5b861d 100644 --- a/composeApp/src/commonMain/composeResources/values-th/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-th/strings.xml @@ -908,7 +908,6 @@ ปิด - บริการเล่นเพลง การเล่น ตัวควบคุมการเล่นสื่อ diff --git a/composeApp/src/commonMain/composeResources/values-tr/strings.xml b/composeApp/src/commonMain/composeResources/values-tr/strings.xml index 123d18cd..4999b886 100644 --- a/composeApp/src/commonMain/composeResources/values-tr/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-tr/strings.xml @@ -914,7 +914,6 @@ Kapat - Çalma hizmeti Çalma Medya çalma kontrolleri diff --git a/composeApp/src/commonMain/composeResources/values-uk/strings.xml b/composeApp/src/commonMain/composeResources/values-uk/strings.xml index 0fbd6d0e..1f07bb5d 100644 --- a/composeApp/src/commonMain/composeResources/values-uk/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-uk/strings.xml @@ -926,7 +926,6 @@ Закрити - Служба відтворення Відтворення Керування відтворенням diff --git a/composeApp/src/commonMain/composeResources/values-vi/strings.xml b/composeApp/src/commonMain/composeResources/values-vi/strings.xml index 241c50f4..b6d4f5ea 100644 --- a/composeApp/src/commonMain/composeResources/values-vi/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-vi/strings.xml @@ -908,7 +908,6 @@ Đóng - Dịch vụ phát nhạc Phát nhạc Điều khiển phát nội dung diff --git a/composeApp/src/commonMain/composeResources/values-zh-rTW/strings.xml b/composeApp/src/commonMain/composeResources/values-zh-rTW/strings.xml index e10e720e..f5907323 100644 --- a/composeApp/src/commonMain/composeResources/values-zh-rTW/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-zh-rTW/strings.xml @@ -908,7 +908,6 @@ 關閉 - 播放服務 播放 媒體播放控制項 diff --git a/composeApp/src/commonMain/composeResources/values-zh/strings.xml b/composeApp/src/commonMain/composeResources/values-zh/strings.xml index b247fac7..d154c6a2 100644 --- a/composeApp/src/commonMain/composeResources/values-zh/strings.xml +++ b/composeApp/src/commonMain/composeResources/values-zh/strings.xml @@ -908,7 +908,6 @@ 关闭 - 播放服务 播放 媒体播放控制