diff --git a/CHANGELOG.md b/CHANGELOG.md index 08bd528..f7218cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -64,6 +64,16 @@ Versioning: two-part `MAJOR.MINOR` — each release bumps the minor (features an --- +## [Unreleased] + +### Fixed +- **Alben-Tab sprang beim Zurück wieder nach oben** — ein `LaunchedEffect(albumSort)` scrollte auf + Position 0. Der feuert aber nicht nur beim Sortierwechsel, sondern auch bei jedem Neu-Composen, + also genau beim Zurückkommen aus einem Album: die gemerkte Position wurde sofort verworfen. Das + Hochscrollen sitzt jetzt in `LibraryViewModel.setAlbumSort()` und läuft nur bei echtem Wechsel. + +--- + ## [2.2] — 2026-08-22 A cleanup-and-parity release: the **Song Importer moves into the Global Search field** (one field, diff --git a/android/app/src/main/kotlin/com/novasonic/app/ui/screen/LibraryScreen.kt b/android/app/src/main/kotlin/com/novasonic/app/ui/screen/LibraryScreen.kt index b0c37af..f86617f 100644 --- a/android/app/src/main/kotlin/com/novasonic/app/ui/screen/LibraryScreen.kt +++ b/android/app/src/main/kotlin/com/novasonic/app/ui/screen/LibraryScreen.kt @@ -7,9 +7,7 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items -import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.foundation.lazy.items -import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.shape.CircleShape @@ -167,7 +165,9 @@ fun LibraryScreen( } } val albumGridState = vm.albumsGridState // hoisted → survives album drill-in/back - LaunchedEffect(state.albumSort) { albumGridState.scrollToItem(0) } + // Kein LaunchedEffect(state.albumSort) zum Hochscrollen: der liefe auch beim ersten + // Compose nach dem Zurückkommen und würde die gemerkte Position sofort verwerfen. + // Das Hochscrollen passiert jetzt in vm.setAlbumSort(), also nur bei echtem Wechsel. LazyVerticalGrid( state = albumGridState, columns = GridCells.Adaptive(minSize = 150.dp), diff --git a/android/app/src/main/kotlin/com/novasonic/app/viewmodel/LibraryViewModel.kt b/android/app/src/main/kotlin/com/novasonic/app/viewmodel/LibraryViewModel.kt index 3d81018..525ac71 100644 --- a/android/app/src/main/kotlin/com/novasonic/app/viewmodel/LibraryViewModel.kt +++ b/android/app/src/main/kotlin/com/novasonic/app/viewmodel/LibraryViewModel.kt @@ -45,7 +45,12 @@ class LibraryViewModel(app: Application) : AndroidViewModel(app) { init { loadPlaylists() } fun setAlbumSort(sort: AlbumSort) { + if (sort == _state.value.albumSort) return _state.value = _state.value.copy(albumSort = sort) + // Eine andere Sortierung heißt eine andere Liste — dort oben anfangen. Bewusst hier und + // nicht als LaunchedEffect im Screen: der feuert auch bei jedem Neu-Composen (z. B. nach + // dem Zurück aus einem Album) und hätte die gemerkte Scrollposition jedes Mal verworfen. + viewModelScope.launch { albumsGridState.scrollToItem(0) } } fun selectTab(tab: LibraryTab) {