From 84c4cd587e8f4263360ec6dc612562d4b04aa882 Mon Sep 17 00:00:00 2001 From: Ericgacoki Date: Fri, 6 Dec 2024 08:29:15 +0300 Subject: [PATCH] fix refresh indicator position --- .../presentation/screen/AlbumWithInfoScreen.kt | 13 +++++++++++++ .../album/presentation/screen/AllAlbumScreen.kt | 16 ++++++++++++++-- .../presentation/screen/ArtistInfoScreen.kt | 17 +++++++++++++---- .../artist/presentation/screen/ArtistsScreen.kt | 14 ++++++++++++++ .../presentation/screen/FoldersAndTracks.kt | 13 +++++++++++++ 5 files changed, 67 insertions(+), 6 deletions(-) diff --git a/feature/album/src/main/java/com/android/swingmusic/album/presentation/screen/AlbumWithInfoScreen.kt b/feature/album/src/main/java/com/android/swingmusic/album/presentation/screen/AlbumWithInfoScreen.kt index 93d71fb..8df48cb 100644 --- a/feature/album/src/main/java/com/android/swingmusic/album/presentation/screen/AlbumWithInfoScreen.kt +++ b/feature/album/src/main/java/com/android/swingmusic/album/presentation/screen/AlbumWithInfoScreen.kt @@ -44,6 +44,8 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.pulltorefresh.PullToRefreshBox +import androidx.compose.material3.pulltorefresh.PullToRefreshDefaults +import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect @@ -665,6 +667,7 @@ fun AlbumWithInfoScreen( val baseUrl by mediaControllerViewModel.baseUrl.collectAsState() var showOnRefreshIndicator by remember { mutableStateOf(false) } + val refreshState = rememberPullToRefreshState() LaunchedEffect( key1 = albumWithInfoState.albumHash, @@ -681,6 +684,7 @@ fun AlbumWithInfoScreen( PullToRefreshBox( modifier = Modifier.fillMaxSize(), isRefreshing = showOnRefreshIndicator, + state = refreshState, onRefresh = { showOnRefreshIndicator = true @@ -688,6 +692,15 @@ fun AlbumWithInfoScreen( event = AlbumWithInfoUiEvent.OnRefreshAlbumInfo ) }, + indicator = { + PullToRefreshDefaults.Indicator( + modifier = Modifier + .padding(top = 76.dp) + .align(Alignment.TopCenter), + isRefreshing = showOnRefreshIndicator, + state = refreshState + ) + } ) { when (albumWithInfoState.infoResource) { is Resource.Loading -> { diff --git a/feature/album/src/main/java/com/android/swingmusic/album/presentation/screen/AllAlbumScreen.kt b/feature/album/src/main/java/com/android/swingmusic/album/presentation/screen/AllAlbumScreen.kt index bb67f12..0c3a21f 100644 --- a/feature/album/src/main/java/com/android/swingmusic/album/presentation/screen/AllAlbumScreen.kt +++ b/feature/album/src/main/java/com/android/swingmusic/album/presentation/screen/AllAlbumScreen.kt @@ -33,6 +33,8 @@ import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.pulltorefresh.PullToRefreshBox +import androidx.compose.material3.pulltorefresh.PullToRefreshDefaults +import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.derivedStateOf @@ -101,8 +103,7 @@ private fun AllAlbums( } var isGridCountMenuExpanded by remember { mutableStateOf(false) } - - Scaffold { pv -> + Scaffold { pv -> Scaffold( modifier = Modifier.padding(pv), topBar = { @@ -319,6 +320,7 @@ fun AllAlbumScreen( val baseUrl by allAlbumsViewModel.baseUrl.collectAsState() var showOnRefreshIndicator by remember { mutableStateOf(false) } + val refreshState = rememberPullToRefreshState() val errorState = when { pagingAlbums.loadState.append is LoadState.Error -> pagingAlbums.loadState.append as LoadState.Error @@ -338,11 +340,21 @@ fun AllAlbumScreen( SwingMusicTheme(navBarColor = MaterialTheme.colorScheme.inverseOnSurface) { PullToRefreshBox( isRefreshing = showOnRefreshIndicator, + state = refreshState, onRefresh = { showOnRefreshIndicator = true allAlbumsViewModel.onAlbumsUiEvent(AlbumsUiEvent.OnPullToRefresh) }, + indicator = { + PullToRefreshDefaults.Indicator( + modifier = Modifier + .padding(top = 76.dp) + .align(Alignment.TopCenter), + isRefreshing = showOnRefreshIndicator, + state = refreshState + ) + } ) { AllAlbums( pagingAlbums = pagingAlbums, diff --git a/feature/artist/src/main/java/com/android/swingmusic/artist/presentation/screen/ArtistInfoScreen.kt b/feature/artist/src/main/java/com/android/swingmusic/artist/presentation/screen/ArtistInfoScreen.kt index dce64e1..3e65de9 100644 --- a/feature/artist/src/main/java/com/android/swingmusic/artist/presentation/screen/ArtistInfoScreen.kt +++ b/feature/artist/src/main/java/com/android/swingmusic/artist/presentation/screen/ArtistInfoScreen.kt @@ -34,6 +34,8 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.pulltorefresh.PullToRefreshBox +import androidx.compose.material3.pulltorefresh.PullToRefreshDefaults +import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect @@ -86,7 +88,6 @@ import com.android.swingmusic.uicomponent.presentation.theme.SwingMusicTheme_Pre import com.android.swingmusic.uicomponent.presentation.util.Screen import com.android.swingmusic.uicomponent.presentation.util.formattedAlbumDuration import com.ramcosta.composedestinations.annotation.Destination -import timber.log.Timber @OptIn(ExperimentalMaterial3Api::class) @SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") @@ -824,6 +825,7 @@ fun ArtistInfoScreen( artistInfoState.value.similarArtistsResource.data else emptyList() var showOnRefreshIndicator by remember { mutableStateOf(false) } + val refreshState = rememberPullToRefreshState() LaunchedEffect(key1 = Unit) { if (artistInfoState.value.requiresReload || loadNewArtist) { @@ -839,6 +841,7 @@ fun ArtistInfoScreen( PullToRefreshBox( modifier = Modifier.fillMaxSize(), isRefreshing = showOnRefreshIndicator, + state = refreshState, onRefresh = { showOnRefreshIndicator = true @@ -848,10 +851,16 @@ fun ArtistInfoScreen( ?: artistHash ) ) - - Timber.e("Artist Hash VM: ${artistInfoState.value.infoResource.data?.artist?.artistHash}") - Timber.e("Artist Hash Nav: $artistHash") }, + indicator = { + PullToRefreshDefaults.Indicator( + modifier = Modifier + .padding(top = 76.dp) + .align(Alignment.TopCenter), + isRefreshing = showOnRefreshIndicator, + state = refreshState + ) + } ) { when (val res = artistInfoState.value.infoResource) { is Resource.Loading -> { diff --git a/feature/artist/src/main/java/com/android/swingmusic/artist/presentation/screen/ArtistsScreen.kt b/feature/artist/src/main/java/com/android/swingmusic/artist/presentation/screen/ArtistsScreen.kt index 99bd079..a0475b3 100644 --- a/feature/artist/src/main/java/com/android/swingmusic/artist/presentation/screen/ArtistsScreen.kt +++ b/feature/artist/src/main/java/com/android/swingmusic/artist/presentation/screen/ArtistsScreen.kt @@ -33,6 +33,8 @@ import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.pulltorefresh.PullToRefreshBox +import androidx.compose.material3.pulltorefresh.PullToRefreshDefaults +import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue @@ -317,7 +319,9 @@ fun ArtistsScreen( val sortByPairs by remember { derivedStateOf { artistsViewModel.sortArtistsByEntries.toList() } } val baseUrl by remember { artistsViewModel.baseUrl() } + var showOnRefreshIndicator by remember { mutableStateOf(false) } + val refreshState = rememberPullToRefreshState() val errorState = when { pagingArtists.loadState.append is LoadState.Error -> pagingArtists.loadState.append as LoadState.Error @@ -337,11 +341,21 @@ fun ArtistsScreen( SwingMusicTheme(navBarColor = MaterialTheme.colorScheme.inverseOnSurface) { PullToRefreshBox( isRefreshing = showOnRefreshIndicator, + state = refreshState, onRefresh = { showOnRefreshIndicator = true artistsViewModel.onArtistUiEvent(ArtistUiEvent.OnPullToRefresh) }, + indicator = { + PullToRefreshDefaults.Indicator( + modifier = Modifier + .padding(top = 76.dp) + .align(Alignment.TopCenter), + isRefreshing = showOnRefreshIndicator, + state = refreshState + ) + } ) { Artists( pagingArtists = pagingArtists, diff --git a/feature/folder/src/main/java/com/android/swingmusic/folder/presentation/screen/FoldersAndTracks.kt b/feature/folder/src/main/java/com/android/swingmusic/folder/presentation/screen/FoldersAndTracks.kt index 996eee0..5ea926a 100644 --- a/feature/folder/src/main/java/com/android/swingmusic/folder/presentation/screen/FoldersAndTracks.kt +++ b/feature/folder/src/main/java/com/android/swingmusic/folder/presentation/screen/FoldersAndTracks.kt @@ -27,6 +27,8 @@ import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.pulltorefresh.PullToRefreshBox +import androidx.compose.material3.pulltorefresh.PullToRefreshDefaults +import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect @@ -90,6 +92,7 @@ private fun FoldersAndTracks( var clickedTrack: Track? by remember { mutableStateOf(null) } var showOnRefreshIndicator by remember { mutableStateOf(false) } + val refreshState = rememberPullToRefreshState() val lazyColumnState = rememberLazyListState() val pathsLazyRowState = rememberLazyListState() @@ -99,12 +102,22 @@ private fun FoldersAndTracks( PullToRefreshBox( modifier = Modifier.fillMaxSize(), isRefreshing = showOnRefreshIndicator, + state = refreshState, onRefresh = { showOnRefreshIndicator = true val event = FolderUiEvent.OnClickFolder(currentFolder) onPullToRefresh(event) }, + indicator = { + PullToRefreshDefaults.Indicator( + modifier = Modifier + .padding(top = 76.dp) + .align(Alignment.TopCenter), + isRefreshing = showOnRefreshIndicator, + state = refreshState + ) + } ) { Scaffold( modifier = Modifier.padding(it),