From 334aa51a096b6a4c3f4890d6ab278724e32bcef5 Mon Sep 17 00:00:00 2001 From: marc Date: Sun, 6 Sep 2026 20:35:37 +0200 Subject: [PATCH] feat(android): Backend- und Scrobble-Adresse als Vorgabe aus dem Build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Beide Adressen stehen ohnehin in der docker-compose.yml — sie zusaetzlich auf jedem Geraet einzutippen ist Arbeit ohne Nutzen. Sie kommen jetzt als buildConfigField aus -PnovasonicBackend= / -PnovasonicScrobble= und greifen, wenn im Geraetespeicher nichts steht. Die Felder in den Einstellungen bleiben sichtbar und ueberschreibbar: zieht ein Dienst um oder aendert sich ein Port, laesst sich das am Geraet korrigieren, statt ein APK bauen, hochladen und installieren zu muessen. Ohne gesetzte Eigenschaften verhaelt sich die App exakt wie bisher. Zugangsdaten bleiben bewusst aussen vor — die gehoeren pro Person, nicht in ein APK, das im Release liegt. Co-Authored-By: Claude Opus 5 --- android/app/build.gradle.kts | 9 +++++++++ .../src/main/kotlin/com/novasonic/app/data/PrefsStore.kt | 8 ++++++-- .../kotlin/com/novasonic/app/ui/screen/SettingsScreen.kt | 3 +++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 3d3657e..150d765 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -32,6 +32,15 @@ android { // zusaetzliche Einstellung in der App waere also nur eine weitere Adresse zum Pflegen — // und eine, die vom Manifest abweichen koennte, ohne dass es jemand merkt. buildConfigField("String", "SHARE_HOST", "\"$host1\"") + + // Vorgabe-Adressen fuer Backend und Scrobble-Dienst. Sie stehen ohnehin in der + // docker-compose.yml — sie zusaetzlich auf jedem Geraet einzutippen ist Arbeit ohne Nutzen. + // Leer gelassen verhaelt sich die App wie bisher (Felder sichtbar, nichts vorbelegt). + // Zugangsdaten bleiben bewusst aussen vor: die gehoeren pro Person, nicht ins APK. + val backendUrl = (project.findProperty("novasonicBackend") as String?) ?: "" + val scrobbleUrl = (project.findProperty("novasonicScrobble") as String?) ?: "" + buildConfigField("String", "DEFAULT_BACKEND_URL", "\"$backendUrl\"") + buildConfigField("String", "DEFAULT_SCROBBLE_URL", "\"$scrobbleUrl\"") } buildFeatures { diff --git a/android/app/src/main/kotlin/com/novasonic/app/data/PrefsStore.kt b/android/app/src/main/kotlin/com/novasonic/app/data/PrefsStore.kt index 76da7c3..49d94ba 100644 --- a/android/app/src/main/kotlin/com/novasonic/app/data/PrefsStore.kt +++ b/android/app/src/main/kotlin/com/novasonic/app/data/PrefsStore.kt @@ -71,8 +71,12 @@ class PrefsStore(private val context: Context) { username = prefs[KEY_USERNAME] ?: "", password = prefs[KEY_PASSWORD] ?: "", lastFmKey = prefs[KEY_LASTFM_KEY] ?: "", - backendUrl = prefs[KEY_BACKEND_URL] ?: "", - scrobbleUrl = prefs[KEY_SCROBBLE_URL] ?: "", + backendUrl = prefs[KEY_BACKEND_URL]?.ifBlank { null } + ?: com.novasonic.app.BuildConfig.DEFAULT_BACKEND_URL, + // Leerer Speicherwert => eingebaute Vorgabe. So muss auf einem frischen Geraet nichts + // eingetippt werden, ein eigener Eintrag hat aber weiterhin Vorrang. + scrobbleUrl = prefs[KEY_SCROBBLE_URL]?.ifBlank { null } + ?: com.novasonic.app.BuildConfig.DEFAULT_SCROBBLE_URL, scrobbleMode = prefs[KEY_SCROBBLE_MODE] ?: "30s", showPlayCount = prefs[KEY_SHOW_COUNT] ?: false, theme = prefs[KEY_THEME] ?: "dark-ocean", diff --git a/android/app/src/main/kotlin/com/novasonic/app/ui/screen/SettingsScreen.kt b/android/app/src/main/kotlin/com/novasonic/app/ui/screen/SettingsScreen.kt index 98f7893..4828d13 100644 --- a/android/app/src/main/kotlin/com/novasonic/app/ui/screen/SettingsScreen.kt +++ b/android/app/src/main/kotlin/com/novasonic/app/ui/screen/SettingsScreen.kt @@ -194,6 +194,9 @@ fun SettingsScreen(onOpenStats: () -> Unit = {}, onOpenCompare: () -> Unit = {}) label = "Last.fm API Key", hint = "Kostenlos unter last.fm/api/account/create", ) + // Vorbelegt aus BuildConfig (siehe build.gradle.kts): auf einem frischen Geraet muss nichts + // eingetippt werden. Das Feld bleibt trotzdem bedienbar — zieht der Dienst um, laesst sich + // das hier korrigieren, ohne ein neues APK zu bauen. NsTextField( value = state.backendUrl, onValueChange = vm::onBackendUrl, label = "NovaSonic Backend URL",