From f1ffd21cda235223c3dc96188b2b0cfca5ccf0e2 Mon Sep 17 00:00:00 2001 From: evgeny Date: Thu, 29 Oct 2026 01:56:40 +0100 Subject: [PATCH] Report missing publisher system services and use current app language --- .../src/main/java/com/utun/chat/data/StreamService.kt | 11 ++++++----- .../router-tests/src/main/kotlin/android/Manifest.kt | 5 ++++- .../src/main/kotlin/android/widget/Toast.kt | 1 + 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamService.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamService.kt index 8e569953..40c25bb2 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamService.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/StreamService.kt @@ -78,20 +78,21 @@ class StreamService : Service() { id = intent?.getLongExtra("id", 0) ?: 0 val audio = intent?.getBooleanExtra("audio", true) ?: true try { - val notifications = getSystemService(NotificationManager::class.java) - notifications.createNotificationChannel(NotificationChannel("live_stream", getString(R.string.stream_title), NotificationManager.IMPORTANCE_LOW)) + val notifications = checkNotNull(getSystemService(NotificationManager::class.java)) { "NotificationManager unavailable" } + notifications.createNotificationChannel(NotificationChannel("live_stream", AppLanguage.text(R.string.stream_title), NotificationManager.IMPORTANCE_LOW)) val open = PendingIntent.getActivity(this, 0, Intent(this, MainActivity::class.java).setData(Uri.parse("utun-stream:open:$id")), PendingIntent.FLAG_IMMUTABLE).also { openIntent = it } val stop = PendingIntent.getService(this, 0, Intent(this, StreamService::class.java).setAction("stop") .setData(Uri.parse("utun-stream:stop:$id")).putExtra("id", id), PendingIntent.FLAG_IMMUTABLE).also { stopIntent = it } val notification = NotificationCompat.Builder(this, "live_stream").setSmallIcon(android.R.drawable.ic_menu_camera) - .setContentTitle(getString(R.string.stream_live)).setContentIntent(open).setOngoing(true) - .addAction(android.R.drawable.ic_media_pause, getString(R.string.stream_stop), stop).build() + .setContentTitle(AppLanguage.text(R.string.stream_live)).setContentIntent(open).setOngoing(true) + .addAction(android.R.drawable.ic_media_pause, AppLanguage.text(R.string.stream_stop), stop).build() val type = if (Build.VERSION.SDK_INT >= 30) ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA or (if (audio) ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE else 0) else 0 foregroundOwned = true; ServiceCompat.startForeground(this, 1004, notification, type) if (id == 0L || !StreamController.serviceReady(id, this)) { finish(); return START_NOT_STICKY } - lock = getSystemService(PowerManager::class.java).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "utun:live_stream") + lock = checkNotNull(getSystemService(PowerManager::class.java)) { "PowerManager unavailable" } + .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "utun:live_stream") lock!!.setReferenceCounted(false); lock!!.acquire() val group = intent!!.getLongExtra("group", 0) val publisher = StreamController.state.value ?: error("Missing publisher") diff --git a/tools/chatgui-android/router-tests/src/main/kotlin/android/Manifest.kt b/tools/chatgui-android/router-tests/src/main/kotlin/android/Manifest.kt index 0a084c8e..5272845a 100644 --- a/tools/chatgui-android/router-tests/src/main/kotlin/android/Manifest.kt +++ b/tools/chatgui-android/router-tests/src/main/kotlin/android/Manifest.kt @@ -9,4 +9,7 @@ object Manifest { } } -object R { object drawable { const val ic_dialog_info = 1; const val ic_btn_speak_now = 2; const val ic_menu_call = 3 } } +object R { object drawable { + const val ic_dialog_info = 1; const val ic_btn_speak_now = 2; const val ic_menu_call = 3 + const val ic_menu_camera = 4; const val ic_media_pause = 5 +} } diff --git a/tools/chatgui-android/router-tests/src/main/kotlin/android/widget/Toast.kt b/tools/chatgui-android/router-tests/src/main/kotlin/android/widget/Toast.kt index d96cee65..fb8bf63f 100644 --- a/tools/chatgui-android/router-tests/src/main/kotlin/android/widget/Toast.kt +++ b/tools/chatgui-android/router-tests/src/main/kotlin/android/widget/Toast.kt @@ -6,6 +6,7 @@ import android.content.Context class Toast private constructor(val text: String) { companion object { const val LENGTH_LONG = 1 + const val LENGTH_SHORT = 0 val shown = mutableListOf() fun makeText(context: Context, text: String, duration: Int) = Toast(text) fun makeText(context: Context, resource: Int, duration: Int) = Toast("resource:$resource")