From b348c40bc0f6dc2aec4e8a5c4be45af0a5be3b92 Mon Sep 17 00:00:00 2001 From: Javad Jafari Date: Thu, 11 Jan 2024 21:25:45 +0330 Subject: [PATCH] #130 update dependencies - finally the M2 dependency removed to use M3 swipeRefresh - update the README.md versions. --- README.md | 18 +++---- app/build.gradle.kts | 20 ++++---- .../common/ui/BoxWithSwipeRefresh.kt | 47 ++++++++----------- .../backgroundable/main/MainActivity.kt | 13 +---- .../themesetting/ThemeSettingScreen.kt | 5 +- gradle/libs.versions.toml | 16 +++---- 6 files changed, 49 insertions(+), 70 deletions(-) diff --git a/README.md b/README.md index 28ae148..d7264f1 100644 --- a/README.md +++ b/README.md @@ -54,21 +54,21 @@ This app is built with the help of the following libraries and dependencies: - Android Gradle Plugin (Version 8.1.2). - [Accompanist]([link_to_library2](https://github.com/google/accompanist)) (Version 0.32.0). -- [Coil](https://github.com/coil-kt/coil) (Version 2.4.0). +- [Coil](https://github.com/coil-kt/coil) (Version 2.5.0). - Compose (Version 1.5.4). -- [Detekt](https://github.com/detekt/detekt) (Version 1.23.1). -- [Dagger](https://dagger.dev/) (Version 2.48.1). +- [Detekt](https://github.com/detekt/detekt) (Version 1.23.4). +- [Dagger](https://dagger.dev/) (Version 2.50.0). - [Chucker](https://github.com/ChuckerTeam/chucker/) (Version 4.0.0). - Datastore (Version 1.0.0). -- [Telephoto](https://github.com/saket/telephoto) (Version 0.6.2). -- KotlinxSerialization (Version 1.6.0). -- Kotlin (Version 1.9.20). -- Navigation Compose (Version 2.7.5). +- [Telephoto](https://github.com/saket/telephoto) (Version 0.7.1). +- KotlinxSerialization (Version 1.6.2). +- Kotlin (Version 1.9.22). +- Navigation Compose (Version 2.7.6). - Paging3 (Version 3.2.1). - [Retrofit2](https://github.com/square/retrofit) (Version 2.9.0). - [Okhttp3](https://github.com/square/okhttp) (Version 4.12.0). -- Room (Version 2.6.0). -- KSP (Version 1.9.20-1.0.14). +- Room (Version 2.6.1). +- KSP (Version 1.9.22-1.0.16). Test Libraries diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 420ef06..faa8eb3 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -160,14 +160,15 @@ android { } kotlinOptions { jvmTarget = "17" - freeCompilerArgs += "-opt-in=androidx.compose.foundation.ExperimentalFoundationApi" - freeCompilerArgs += "-opt-in=androidx.compose.material3.ExperimentalMaterial3Api" - freeCompilerArgs += "-opt-in=androidx.paging.ExperimentalPagingApi" - freeCompilerArgs += "-opt-in=com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi" - freeCompilerArgs += "-opt-in=kotlinx.serialization.ExperimentalSerializationApi" - freeCompilerArgs += "-opt-in=kotlinx.coroutines.FlowPreview" - freeCompilerArgs += "-opt-in=androidx.compose.material.ExperimentalMaterialApi" - freeCompilerArgs += "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi" + freeCompilerArgs += listOf( + "-opt-in=androidx.compose.foundation.ExperimentalFoundationApi", + "-opt-in=androidx.compose.material3.ExperimentalMaterial3Api", + "-opt-in=androidx.paging.ExperimentalPagingApi", + "-opt-in=com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi", + "-opt-in=kotlinx.serialization.ExperimentalSerializationApi", + "-opt-in=kotlinx.coroutines.FlowPreview", + "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi", + ) } buildFeatures { compose = true @@ -215,9 +216,6 @@ dependencies { implementation(libs.composeUi) implementation(libs.composeMaterial3) implementation(libs.lifecycleRuntimeCompose) - implementation(libs.composeMaterial) { - because("just for the swipe refresh") - } implementation(libs.coilCompose) /*coroutine*/ diff --git a/app/src/main/kotlin/ir/thatsmejavad/backgroundable/common/ui/BoxWithSwipeRefresh.kt b/app/src/main/kotlin/ir/thatsmejavad/backgroundable/common/ui/BoxWithSwipeRefresh.kt index b22914e..d5d7398 100644 --- a/app/src/main/kotlin/ir/thatsmejavad/backgroundable/common/ui/BoxWithSwipeRefresh.kt +++ b/app/src/main/kotlin/ir/thatsmejavad/backgroundable/common/ui/BoxWithSwipeRefresh.kt @@ -2,18 +2,13 @@ package ir.thatsmejavad.backgroundable.common.ui import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.BoxScope -import androidx.compose.material.pullrefresh.PullRefreshIndicator -import androidx.compose.material.pullrefresh.pullRefresh -import androidx.compose.material.pullrefresh.rememberPullRefreshState -import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.pulltorefresh.PullToRefreshContainer +import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import kotlinx.coroutines.launch +import androidx.compose.ui.input.nestedscroll.nestedScroll @Composable fun BoxWithSwipeRefresh( @@ -22,27 +17,25 @@ fun BoxWithSwipeRefresh( modifier: Modifier = Modifier, content: @Composable BoxScope.() -> Unit ) { - val refreshScope = rememberCoroutineScope() - fun refresh() = refreshScope.launch { onSwipe() } - val refreshing by remember(isRefreshing) { mutableStateOf(isRefreshing) } - val pullRefreshState = rememberPullRefreshState(refreshing, ::refresh) + val state = rememberPullToRefreshState() - Box( - modifier = modifier - .pullRefresh( - state = pullRefreshState, - enabled = !refreshing - ), - ) { - content() + if (state.isRefreshing) { + LaunchedEffect(true) { + onSwipe() + } + } - PullRefreshIndicator( - refreshing = refreshing, - state = pullRefreshState, + if (!isRefreshing) { + LaunchedEffect(true) { + state.endRefresh() + } + } + + Box(modifier = modifier.nestedScroll(state.nestedScrollConnection)) { + content() + PullToRefreshContainer( modifier = Modifier.align(Alignment.TopCenter), - scale = true, - backgroundColor = MaterialTheme.colorScheme.primaryContainer, - contentColor = MaterialTheme.colorScheme.onPrimaryContainer, + state = state, ) } } diff --git a/app/src/main/kotlin/ir/thatsmejavad/backgroundable/main/MainActivity.kt b/app/src/main/kotlin/ir/thatsmejavad/backgroundable/main/MainActivity.kt index b9cf280..e6207a4 100644 --- a/app/src/main/kotlin/ir/thatsmejavad/backgroundable/main/MainActivity.kt +++ b/app/src/main/kotlin/ir/thatsmejavad/backgroundable/main/MainActivity.kt @@ -1,5 +1,3 @@ -@file:Suppress("UsingMaterialAndMaterial3Libraries") - package ir.thatsmejavad.backgroundable.main import android.Manifest @@ -22,8 +20,6 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.shape.CornerSize -import androidx.compose.material.ModalBottomSheetValue -import androidx.compose.material.rememberModalBottomSheetState import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.NavigationBar @@ -35,7 +31,6 @@ import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.SideEffect import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -48,8 +43,8 @@ import androidx.navigation.NavGraph.Companion.findStartDestination import androidx.navigation.compose.NavHost import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController -import com.google.accompanist.navigation.material.BottomSheetNavigator import com.google.accompanist.navigation.material.ModalBottomSheetLayout +import com.google.accompanist.navigation.material.rememberBottomSheetNavigator import ir.thatsmejavad.backgroundable.BackgroundableApplication import ir.thatsmejavad.backgroundable.BuildConfig import ir.thatsmejavad.backgroundable.common.ui.NavigationBarDestinations @@ -119,11 +114,7 @@ class MainActivity : AppCompatActivity() { @Composable private fun BackgroundableApp() { - val sheetState = rememberModalBottomSheetState( - initialValue = ModalBottomSheetValue.Hidden, - skipHalfExpanded = true - ) - val bottomSheetNavigator = remember { BottomSheetNavigator(sheetState) } + val bottomSheetNavigator = rememberBottomSheetNavigator() val navController = rememberNavController(bottomSheetNavigator) ModalBottomSheetLayout( diff --git a/app/src/main/kotlin/ir/thatsmejavad/backgroundable/screens/settings/themesetting/ThemeSettingScreen.kt b/app/src/main/kotlin/ir/thatsmejavad/backgroundable/screens/settings/themesetting/ThemeSettingScreen.kt index 04d6b6f..cd5d070 100644 --- a/app/src/main/kotlin/ir/thatsmejavad/backgroundable/screens/settings/themesetting/ThemeSettingScreen.kt +++ b/app/src/main/kotlin/ir/thatsmejavad/backgroundable/screens/settings/themesetting/ThemeSettingScreen.kt @@ -30,7 +30,6 @@ import androidx.compose.material3.MediumTopAppBar import androidx.compose.material3.PrimaryTabRow import androidx.compose.material3.Switch import androidx.compose.material3.Tab -import androidx.compose.material3.TabRowDefaults.tabIndicatorOffset import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.rememberTopAppBarState @@ -134,10 +133,10 @@ fun ThemeSettingScreen( selectedTabIndex = selectedTabIndex, divider = {}, containerColor = MaterialTheme.colorScheme.surfaceContainerHigh, - indicator = { tabPositions -> + indicator = { Box( modifier = Modifier - .tabIndicatorOffset(tabPositions[selectedTabIndex]) + .tabIndicatorOffset(selectedTabIndex) .fillMaxHeight() .clip(MaterialTheme.shapes.extraLarge) .padding(10.dp) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 39dd40a..8c9b685 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] accompanist = "0.32.0" -activityCompose = "1.8.1" +activityCompose = "1.8.2" agp = "8.1.2" androidxJunit = "1.1.5" appMetrica = "5.3.0" @@ -9,13 +9,13 @@ caoc = "2.4.0" chucker = "4.0.0" coilCompose = "2.5.0" composeAnimation = "1.5.4" -composeCompiler = "1.5.6" +composeCompiler = "1.5.8" composeRuntime = "1.5.4" composeUi = "1.5.4" compsoeFoundation = "1.5.4" coreKtx = "1.12.0" coroutine = "1.7.3" -dagger = "2.49" +dagger = "2.50" datastore = "1.0.0" detekt = "1.23.4" espressoCore = "3.5.1" @@ -23,15 +23,14 @@ jacoco = "0.8.11" javalite = "3.23.0" junit = "5.10.1" kotestAssertion = "5.8.0" -kotlin = "1.9.21" +kotlin = "1.9.22" kotlinxSerialization = "1.6.2" kover = "0.7.4" -ksp = "1.9.21-1.0.15" +ksp = "1.9.22-1.0.16" lifecycleRuntime = "2.6.2" -material = "1.5.4" -material3 = "1.2.0-alpha12" +material3 = "1.2.0-beta02" mockK = "1.13.8" -navigationCompose = "2.7.5" +navigationCompose = "2.7.6" okhttp = "4.12.0" paging = "3.2.1" protobuf = "0.9.4" @@ -54,7 +53,6 @@ chuckerNoOp = { module = "com.github.chuckerteam.chucker:library-no-op", version coilCompose = { module = "io.coil-kt:coil-compose", version.ref = "coilCompose" } composeAnimation = { module = "androidx.compose.animation:animation", version.ref = "composeAnimation" } composeFoundation = { module = "androidx.compose.foundation:foundation", version.ref = "compsoeFoundation" } -composeMaterial = { module = "androidx.compose.material:material", version.ref = "material" } composeMaterial3 = { module = "androidx.compose.material3:material3", version.ref = "material3" } composeRuntime = { module = "androidx.compose.runtime:runtime", version.ref = "composeRuntime" } composeUi = { module = "androidx.compose.ui:ui", version.ref = "composeUi" }