From f7b2b0f9bccb301c35ff496a934673524299970c Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Sat, 19 Nov 2022 18:00:23 +0530 Subject: [PATCH] feat(android): replace Accompanist swiperefresh with Compose Material --- android/build.gradle.kts | 2 +- .../claw/android/ui/lists/NetworkPosts.kt | 45 ++++++++----------- gradle/libs.versions.toml | 1 - 3 files changed, 20 insertions(+), 28 deletions(-) diff --git a/android/build.gradle.kts b/android/build.gradle.kts index 01c14d51..649e3dfc 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -51,9 +51,9 @@ dependencies { implementation(projects.database) implementation(projects.metadataExtractor) implementation(projects.model) - implementation(libs.accompanist.swiperefresh) implementation(libs.accompanist.sysuicontroller) implementation(libs.androidx.activity.compose) + implementation(libs.androidx.compose.material) implementation(libs.androidx.compose.material3) implementation(libs.androidx.core.splashscreen) implementation(libs.androidx.lifecycle.compose) diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/lists/NetworkPosts.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/lists/NetworkPosts.kt index e19a0012..c54fa9ac 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/lists/NetworkPosts.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/lists/NetworkPosts.kt @@ -10,6 +10,10 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material.pullrefresh.PullRefreshIndicator +import androidx.compose.material.pullrefresh.pullRefresh +import androidx.compose.material.pullrefresh.rememberPullRefreshState import androidx.compose.material3.Divider import androidx.compose.material3.MaterialTheme import androidx.compose.material3.contentColorFor @@ -19,15 +23,13 @@ import androidx.compose.ui.Modifier import androidx.paging.LoadState import androidx.paging.compose.LazyPagingItems import androidx.paging.compose.items -import com.google.accompanist.swiperefresh.SwipeRefresh -import com.google.accompanist.swiperefresh.SwipeRefreshIndicator -import com.google.accompanist.swiperefresh.rememberSwipeRefreshState import dev.msfjarvis.claw.common.posts.PostActions import dev.msfjarvis.claw.common.posts.toDbModel import dev.msfjarvis.claw.common.ui.NetworkError import dev.msfjarvis.claw.database.local.SavedPost import dev.msfjarvis.claw.model.LobstersPost +@OptIn(ExperimentalMaterialApi::class) @Composable fun NetworkPosts( items: LazyPagingItems, @@ -39,33 +41,17 @@ fun NetworkPosts( ) { val loadState = items.loadState.refresh val isRefreshing = loadState == LoadState.Loading - SwipeRefresh( - state = rememberSwipeRefreshState(isRefreshing), - onRefresh = reloadPosts, - indicator = { state, trigger -> - val backgroundColor = MaterialTheme.colorScheme.surface - SwipeRefreshIndicator( - state = state, - refreshTriggerDistance = trigger, - backgroundColor = backgroundColor, - contentColor = contentColorFor(backgroundColor) + val pullRefreshState = rememberPullRefreshState(isRefreshing, reloadPosts) + Box(modifier = modifier.fillMaxSize().pullRefresh(pullRefreshState)) { + if (items.itemCount == 0 && loadState is LoadState.Error) { + NetworkError( + label = "Failed to load posts", + error = loadState.error, + modifier = Modifier.align(Alignment.Center), ) - } - ) { - if (items.itemCount == 0) { - Box(modifier = Modifier.fillMaxSize()) { - if (loadState is LoadState.Error) { - NetworkError( - label = "Failed to load posts", - error = loadState.error, - modifier = Modifier.align(Alignment.Center), - ) - } - } } else { LazyColumn( state = listState, - modifier = modifier, ) { items(items) { item -> if (item != null) { @@ -81,5 +67,12 @@ fun NetworkPosts( } } } + PullRefreshIndicator( + refreshing = isRefreshing, + state = pullRefreshState, + modifier = Modifier.align(Alignment.TopCenter), + backgroundColor = MaterialTheme.colorScheme.surface, + contentColor = contentColorFor(MaterialTheme.colorScheme.surface), + ) } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3078c324..529d9ba8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -20,7 +20,6 @@ workmanager = "2.8.0-beta02" [libraries] accompanist-flowlayout = { module = "com.google.accompanist:accompanist-flowlayout", version.ref = "accompanist" } -accompanist-swiperefresh = { module = "com.google.accompanist:accompanist-swiperefresh", version.ref = "accompanist" } accompanist-sysuicontroller = { module = "com.google.accompanist:accompanist-systemuicontroller", version.ref = "accompanist" } androidx-activity-compose = "androidx.activity:activity-compose:1.7.0-alpha02" androidx-benchmark-macro-junit4 = "androidx.benchmark:benchmark-macro-junit4:1.2.0-alpha07"