Skip to content

Commit

Permalink
refactor: replace materii PullRefreshLayout library with Material3 Pu…
Browse files Browse the repository at this point in the history
…llToRefreshBox (#338)
  • Loading branch information
cbeyls authored Feb 28, 2025
1 parent 7f5ce8d commit e937de4
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 59 deletions.
2 changes: 0 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ okio = "3.10.2"
openfeedback-m3 = "0.2.3"
playServices-auth = "21.3.0"
playServices-wearable = "19.0.0"
pullrefresh = "1.3.0"

[libraries]
androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "androidx-activity" }
Expand Down Expand Up @@ -69,7 +68,6 @@ kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutine
kotlinx-coroutines-play-services = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-play-services", version.ref = "kotlinx-coroutines" }
kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinx-datetime" }
ktor-client-darwin = { module = "io.ktor:ktor-client-darwin", version.ref = "ktor" }
materii-pullrefresh = { group = "dev.materii.pullrefresh", name = "pullrefresh", version.ref = "pullrefresh" }
moko-resources = { module = "dev.icerock.moko:resources", version.ref = "moko-resources" }
moko-resources_compose = { module = "dev.icerock.moko:resources-compose", version.ref = "moko-resources" }
moko-graphics = { module = "dev.icerock.moko:graphics", version.ref = "moko-graphics" }
Expand Down
1 change: 0 additions & 1 deletion shared/ui/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ kotlin {
api(libs.openfeedback.m3)
implementation(libs.kotlinx.coroutines.core)
implementation(libs.okio) // Used by Openfeedback
implementation(libs.materii.pullrefresh)

implementation(project(":shared:domain"))
implementation(project(":shared:di"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,23 @@ package com.androidmakers.ui.common
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Text
import androidx.compose.material3.pulltorefresh.PullToRefreshBox
import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import com.androidmakers.ui.model.Lce
import dev.icerock.moko.resources.compose.stringResource
import dev.materii.pullrefresh.PullRefreshIndicator
import dev.materii.pullrefresh.PullRefreshState
import dev.materii.pullrefresh.pullRefresh
import dev.materii.pullrefresh.rememberPullRefreshState
import fr.paug.androidmakers.ui.MR

@Composable
Expand Down Expand Up @@ -100,75 +99,37 @@ fun <T> ButtonRefreshableLceLayout(
viewModel: LceViewModel<T>,
content: @Composable (T) -> Unit
) {
val isRefreshing = viewModel.isRefreshing.collectAsState()
val lce = viewModel.values.collectAsState()
val isRefreshing by viewModel.isRefreshing.collectAsState()
val lce by viewModel.values.collectAsState()

LceLayout(
lce = lce.value,
lce = lce,
onRetry = { viewModel.refresh() },
isRefreshing = isRefreshing.value
isRefreshing = isRefreshing
) {
content(it)
}
}

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun <T> SwipeRefreshableLceLayout(
viewModel: LceViewModel<T>,
content: @Composable (T) -> Unit
) {
val isRefreshing = viewModel.isRefreshing.collectAsState()
val lce = viewModel.values.collectAsState()
val pullRefreshState = rememberPullRefreshState(isRefreshing.value, { viewModel.refresh() })
val isRefreshing by viewModel.isRefreshing.collectAsState()
val lce by viewModel.values.collectAsState()
val pullRefreshState = rememberPullToRefreshState()

PullRefreshLayout(
state = pullRefreshState
PullToRefreshBox(
isRefreshing = isRefreshing,
onRefresh = { viewModel.refresh() },
state = pullRefreshState
) {
LceLayout(
lce = lce.value,
lce = lce,
) {
content(it)
}
}
}


// TODO this is a temporary function
// To be removed when Materii-PullToRefresh will be available in 1.4.0
@Composable
fun PullRefreshLayout(
state: PullRefreshState,
modifier: Modifier = Modifier,
flipped: Boolean = false,
enabled: Boolean = true,
indicator: @Composable () -> Unit = {
PullRefreshIndicator(
state = state,
flipped = flipped
)
},
content: @Composable () -> Unit
) {
Box(
modifier = Modifier
.pullRefresh(
state = state,
inverse = flipped,
enabled = enabled
)
.then(modifier)
) {
val indicatorAlignment = if (flipped) Alignment.BottomCenter else Alignment.TopCenter

content()
Box(
modifier = Modifier
.fillMaxWidth()
.align(indicatorAlignment),
contentAlignment = Alignment.Center
) {
indicator()
}

}
}

0 comments on commit e937de4

Please sign in to comment.