From fca7cc79c1e896fc1873d4c3fd28bd1013d0b2bf Mon Sep 17 00:00:00 2001 From: marc Date: Wed, 9 Sep 2026 08:42:27 +0200 Subject: [PATCH] feat(android): Cache nach einem Update einmalig leeren (1.7) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Im cacheDir liegen Coils Bildspeicher und heruntergeladene APK-Updates, beides jederzeit neu beschaffbar. Blieb dort nach einer neuen Version etwas Altes liegen, war "Cache leeren" von Hand in den Systemeinstellungen die einzige Abhilfe — nichts, das sich einem normalen Nutzer erklaeren laesst. Geleert wird jetzt beim ersten Start nach einem Versionswechsel, verglichen wird der gespeicherte versionCode. Im laufenden Betrieb passiert nichts, sonst waeren die Cover bei jedem Start neu zu laden. Beim allerersten Start nach der Installation ebenfalls nicht, da gibt es nichts aufzuraeumen. Offline-Downloads bleiben unberuehrt: die liegen unter filesDir/offline. Co-Authored-By: Claude Opus 5 --- CHANGELOG.md | 7 +++++ android/app/build.gradle.kts | 4 +-- .../kotlin/com/novasonic/app/NovaSonicApp.kt | 26 +++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 886f37a..e147188 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -72,6 +72,13 @@ Versioning: two-part `MAJOR.MINOR` — each release bumps the minor (features an ## [2.4] — 2026-09-06 ### Added +- **Android 1.7 (versionCode 10): Cache räumt sich nach einem Update selbst auf** — im `cacheDir` + liegen Coils Bildspeicher (Cover) und heruntergeladene APK-Updates. Blieb dort nach einer neuen + Version etwas Altes liegen, half nur „Cache leeren" von Hand in den Systemeinstellungen — nichts, + das man einem normalen Nutzer erklären möchte. Beim ersten Start nach einem Versionswechsel wird + der Cache jetzt einmalig geleert; im laufenden Betrieb passiert nichts, sonst wären die Cover bei + jedem Start neu zu laden. **Offline-Downloads sind nicht betroffen**, die liegen unter + `filesDir/offline` und damit außerhalb des Caches. - **Android 1.6 (versionCode 9): Warteschlange ist sofort da** — bisher wurden nur die Song-Ids gesichert und beim Start **einzeln nacheinander über das Netz** nachgeladen. Das dauerte Sekunden, klappte mal und mal nicht und ohne Verbindung gar nicht. Jetzt liegen die vollständigen Songs als diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index c024e85..7096766 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -14,8 +14,8 @@ android { applicationId = "com.novasonic.app" minSdk = 26 targetSdk = 35 - versionCode = 9 - versionName = "1.6" + versionCode = 10 + versionName = "1.7" // Host der eigenen NovaSonic-Web-App — Ziel der geteilten Links. Einmal in // gradle.properties setzen (novasonicHost=music.example.com); ohne Angabe bleibt der // Platzhalter stehen und der App-Link greift schlicht nicht. diff --git a/android/app/src/main/kotlin/com/novasonic/app/NovaSonicApp.kt b/android/app/src/main/kotlin/com/novasonic/app/NovaSonicApp.kt index 53cbc9a..47c830d 100644 --- a/android/app/src/main/kotlin/com/novasonic/app/NovaSonicApp.kt +++ b/android/app/src/main/kotlin/com/novasonic/app/NovaSonicApp.kt @@ -24,8 +24,34 @@ class NovaSonicApp : Application() { // 30s preview player — app-level so its control bar survives navigation (see AppNavigation). val previewController: PreviewController = PreviewController() + /** + * Raeumt den Cache nach einem App-Update einmalig auf. + * + * Im cacheDir liegen Coils Bildspeicher (Cover) und heruntergeladene APK-Updates — beides + * jederzeit neu beschaffbar. Nach einem Update konnten dort Reste liegen, die zu alten Anzeigen + * fuehrten; die einzige Abhilfe war bisher "Cache leeren" von Hand in den Systemeinstellungen, + * was man einem normalen Nutzer nicht erklaeren moechte. Das passiert jetzt automatisch und + * ausschliesslich beim Versionswechsel, nicht im laufenden Betrieb — sonst waeren die Cover bei + * jedem Start neu zu laden. + * + * Offline-Downloads sind NICHT betroffen: die liegen unter filesDir/offline, nicht im cacheDir. + */ + private fun cacheNachUpdateLeeren() { + val prefs = getSharedPreferences("app_state", MODE_PRIVATE) + val zuletzt = prefs.getInt("last_version_code", -1) + val jetzt = BuildConfig.VERSION_CODE + if (zuletzt == jetzt) return + if (zuletzt != -1) { + runCatching { cacheDir.deleteRecursively() } + .onSuccess { android.util.Log.i("NsCache", "Cache nach Update $zuletzt -> $jetzt geleert") } + .onFailure { android.util.Log.w("NsCache", "Cache-Leeren fehlgeschlagen", it) } + } + prefs.edit().putInt("last_version_code", jetzt).apply() + } + override fun onCreate() { super.onCreate() + cacheNachUpdateLeeren() offlineRepository = OfflineRepository(applicationContext) // must be first repository = MusicRepository(applicationContext) playerController = PlayerController(applicationContext, repository)