From 41830dcd056ff5785523ce0f4d40dd2875d5d28f Mon Sep 17 00:00:00 2001 From: Rebecca Franks Date: Thu, 19 Dec 2024 14:59:22 +0000 Subject: [PATCH] Remove Swipe to dismiss on JetNews, replace with PullToRefresh --- JetLagged/gradle/libs.versions.toml | 1 - JetNews/app/build.gradle.kts | 2 -- .../example/jetnews/ui/home/HomeScreens.kt | 33 +++++++++++++++---- JetNews/gradle/libs.versions.toml | 1 - Jetcaster/gradle/libs.versions.toml | 1 - Jetchat/gradle/libs.versions.toml | 1 - Jetsnack/gradle/libs.versions.toml | 1 - Reply/gradle/libs.versions.toml | 1 - scripts/libs.versions.toml | 1 - 9 files changed, 26 insertions(+), 16 deletions(-) diff --git a/JetLagged/gradle/libs.versions.toml b/JetLagged/gradle/libs.versions.toml index aa6e4f6beb..f6a54e5682 100644 --- a/JetLagged/gradle/libs.versions.toml +++ b/JetLagged/gradle/libs.versions.toml @@ -60,7 +60,6 @@ version-catalog-update = "0.8.5" [libraries] accompanist-adaptive = { module = "com.google.accompanist:accompanist-adaptive", version.ref = "accompanist" } accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" } -accompanist-swiperefresh = { module = "com.google.accompanist:accompanist-swiperefresh", version.ref = "accompanist" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity-compose" } androidx-activity-ktx = { module = "androidx.activity:activity-ktx", version.ref = "androidx-activity-compose" } androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" } diff --git a/JetNews/app/build.gradle.kts b/JetNews/app/build.gradle.kts index 725b9f48c7..f8bb76ed57 100644 --- a/JetNews/app/build.gradle.kts +++ b/JetNews/app/build.gradle.kts @@ -99,8 +99,6 @@ dependencies { debugImplementation(libs.androidx.compose.ui.test.manifest) debugImplementation(libs.androidx.compose.ui.tooling) - implementation(libs.accompanist.swiperefresh) - implementation(libs.androidx.appcompat) implementation(libs.androidx.activity.ktx) implementation(libs.androidx.core.ktx) diff --git a/JetNews/app/src/main/java/com/example/jetnews/ui/home/HomeScreens.kt b/JetNews/app/src/main/java/com/example/jetnews/ui/home/HomeScreens.kt index d898962be8..68ce0350ca 100644 --- a/JetNews/app/src/main/java/com/example/jetnews/ui/home/HomeScreens.kt +++ b/JetNews/app/src/main/java/com/example/jetnews/ui/home/HomeScreens.kt @@ -67,6 +67,10 @@ import androidx.compose.material3.TextButton import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.material3.TopAppBarState +import androidx.compose.material3.pulltorefresh.PullToRefreshBox +import androidx.compose.material3.pulltorefresh.PullToRefreshDefaults.Indicator +import androidx.compose.material3.pulltorefresh.PullToRefreshState +import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState import androidx.compose.material3.rememberTopAppBarState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect @@ -110,8 +114,6 @@ import com.example.jetnews.ui.utils.BookmarkButton import com.example.jetnews.ui.utils.FavoriteButton import com.example.jetnews.ui.utils.ShareButton import com.example.jetnews.ui.utils.TextSettingsButton -import com.google.accompanist.swiperefresh.SwipeRefresh -import com.google.accompanist.swiperefresh.rememberSwipeRefreshState import kotlinx.coroutines.currentCoroutineContext import kotlinx.coroutines.isActive import kotlinx.coroutines.runBlocking @@ -306,6 +308,7 @@ private fun HomeScreenWithList( val contentModifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection) LoadingContent( + modifier = Modifier.padding(innerPadding), empty = when (uiState) { is HomeUiState.HasPosts -> false is HomeUiState.NoPosts -> uiState.isLoading @@ -317,12 +320,15 @@ private fun HomeScreenWithList( when (uiState) { is HomeUiState.HasPosts -> hasPostsContent(uiState, innerPadding, contentModifier) + is HomeUiState.NoPosts -> { if (uiState.errorMessages.isEmpty()) { // if there are no posts, and no error, let the user refresh manually TextButton( onClick = onRefreshPosts, - modifier.padding(innerPadding).fillMaxSize() + modifier + .padding(innerPadding) + .fillMaxSize() ) { Text( stringResource(id = R.string.home_tap_to_load_content), @@ -383,21 +389,34 @@ private fun HomeScreenWithList( * @param onRefresh (event) event to request refresh * @param content (slot) the main content to show */ +@OptIn(ExperimentalMaterial3Api::class) @Composable private fun LoadingContent( empty: Boolean, emptyContent: @Composable () -> Unit, loading: Boolean, onRefresh: () -> Unit, - content: @Composable () -> Unit + content: @Composable () -> Unit, + modifier : Modifier = Modifier ) { if (empty) { emptyContent() } else { - SwipeRefresh( - state = rememberSwipeRefreshState(loading), + val refreshState = rememberPullToRefreshState() + PullToRefreshBox( + isRefreshing = loading, onRefresh = onRefresh, - content = content, + content = { content() }, + state = refreshState, + indicator = { + Indicator( + modifier = modifier + .align(Alignment.TopCenter) + .padding(), + isRefreshing = loading, + state = refreshState + ) + } ) } } diff --git a/JetNews/gradle/libs.versions.toml b/JetNews/gradle/libs.versions.toml index aa6e4f6beb..f6a54e5682 100644 --- a/JetNews/gradle/libs.versions.toml +++ b/JetNews/gradle/libs.versions.toml @@ -60,7 +60,6 @@ version-catalog-update = "0.8.5" [libraries] accompanist-adaptive = { module = "com.google.accompanist:accompanist-adaptive", version.ref = "accompanist" } accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" } -accompanist-swiperefresh = { module = "com.google.accompanist:accompanist-swiperefresh", version.ref = "accompanist" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity-compose" } androidx-activity-ktx = { module = "androidx.activity:activity-ktx", version.ref = "androidx-activity-compose" } androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" } diff --git a/Jetcaster/gradle/libs.versions.toml b/Jetcaster/gradle/libs.versions.toml index aa6e4f6beb..f6a54e5682 100644 --- a/Jetcaster/gradle/libs.versions.toml +++ b/Jetcaster/gradle/libs.versions.toml @@ -60,7 +60,6 @@ version-catalog-update = "0.8.5" [libraries] accompanist-adaptive = { module = "com.google.accompanist:accompanist-adaptive", version.ref = "accompanist" } accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" } -accompanist-swiperefresh = { module = "com.google.accompanist:accompanist-swiperefresh", version.ref = "accompanist" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity-compose" } androidx-activity-ktx = { module = "androidx.activity:activity-ktx", version.ref = "androidx-activity-compose" } androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" } diff --git a/Jetchat/gradle/libs.versions.toml b/Jetchat/gradle/libs.versions.toml index aa6e4f6beb..f6a54e5682 100644 --- a/Jetchat/gradle/libs.versions.toml +++ b/Jetchat/gradle/libs.versions.toml @@ -60,7 +60,6 @@ version-catalog-update = "0.8.5" [libraries] accompanist-adaptive = { module = "com.google.accompanist:accompanist-adaptive", version.ref = "accompanist" } accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" } -accompanist-swiperefresh = { module = "com.google.accompanist:accompanist-swiperefresh", version.ref = "accompanist" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity-compose" } androidx-activity-ktx = { module = "androidx.activity:activity-ktx", version.ref = "androidx-activity-compose" } androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" } diff --git a/Jetsnack/gradle/libs.versions.toml b/Jetsnack/gradle/libs.versions.toml index aa6e4f6beb..f6a54e5682 100644 --- a/Jetsnack/gradle/libs.versions.toml +++ b/Jetsnack/gradle/libs.versions.toml @@ -60,7 +60,6 @@ version-catalog-update = "0.8.5" [libraries] accompanist-adaptive = { module = "com.google.accompanist:accompanist-adaptive", version.ref = "accompanist" } accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" } -accompanist-swiperefresh = { module = "com.google.accompanist:accompanist-swiperefresh", version.ref = "accompanist" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity-compose" } androidx-activity-ktx = { module = "androidx.activity:activity-ktx", version.ref = "androidx-activity-compose" } androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" } diff --git a/Reply/gradle/libs.versions.toml b/Reply/gradle/libs.versions.toml index aa6e4f6beb..f6a54e5682 100644 --- a/Reply/gradle/libs.versions.toml +++ b/Reply/gradle/libs.versions.toml @@ -60,7 +60,6 @@ version-catalog-update = "0.8.5" [libraries] accompanist-adaptive = { module = "com.google.accompanist:accompanist-adaptive", version.ref = "accompanist" } accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" } -accompanist-swiperefresh = { module = "com.google.accompanist:accompanist-swiperefresh", version.ref = "accompanist" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity-compose" } androidx-activity-ktx = { module = "androidx.activity:activity-ktx", version.ref = "androidx-activity-compose" } androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" } diff --git a/scripts/libs.versions.toml b/scripts/libs.versions.toml index aa6e4f6beb..f6a54e5682 100644 --- a/scripts/libs.versions.toml +++ b/scripts/libs.versions.toml @@ -60,7 +60,6 @@ version-catalog-update = "0.8.5" [libraries] accompanist-adaptive = { module = "com.google.accompanist:accompanist-adaptive", version.ref = "accompanist" } accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" } -accompanist-swiperefresh = { module = "com.google.accompanist:accompanist-swiperefresh", version.ref = "accompanist" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity-compose" } androidx-activity-ktx = { module = "androidx.activity:activity-ktx", version.ref = "androidx-activity-compose" } androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" }