From 94fea14ca238eeef3752d628ee960e9763d9e592 Mon Sep 17 00:00:00 2001 From: Dipen Pradhan Date: Sun, 1 Nov 2026 10:00:08 +0000 Subject: [PATCH] build: upgrade to AGP 9.5.0, Gradle 9.8.2, Kotlin 2.4.21 - Bump Gradle wrapper to 9.8.2 - Bump AGP to 9.5.0, Kotlin to 2.4.21 (Compose Compiler plugin tracks Kotlin) - Bump KSP to 2.3.13 (versioned independently of Kotlin since 2.2) - Adopt AGP 9 built-in Kotlin: drop org.jetbrains.kotlin.android plugin - Migrate kotlinOptions/ freeCompilerArgs opt-ins to the top-level kotlin { compilerOptions } DSL - Remove targetSdk from library defaultConfig (removed in AGP 9) - Bump Roborazzi to 1.66.0 for AGP 9 compatibility (1.77.0 needs a newer Compose runtime than this BOM); the BOM commit moves Roborazzi to 1.77.0 - Compose BOM stays on 2024.12.01 until the BOM upgrade commit - ktfmt-gradle 0.22.0 -> 0.27.0: 0.22.0 only registered its per-source-set check/format tasks when the kotlin-android plugin was applied, which AGP 9 built-in Kotlin no longer is, so ktfmtCheck silently checked nothing. 0.27.0 (AGP 9.x support) discovers source sets from the common extension instead. The stricter formatter (ktfmt 0.64) re-wraps a handful of >100-char lines in this commit so ktfmtCheck passes again. ./gradlew build, ktfmtCheck and unit tests are green --- app/build.gradle.kts | 11 +- .../AnimatableSuspendingAnimations.kt | 4 +- .../ui/animation/AnimateAsStateAnimations.kt | 3 +- .../ui/home/contrast/ContrastThemeActivity.kt | 5 +- .../ui/learnwidgets/Layouts.kt | 6 +- .../ui/learnwidgets/SegmentedButtons.kt | 5 +- build.gradle.kts | 26 +- buildSrc/build.gradle.kts | 4 +- ...se-module-configs-script-plugin.gradle.kts | 15 +- ...in-module-configs-script-plugin.gradle.kts | 18 +- .../verticalgrid/StaggeredVerticalGrid.kt | 15 +- demos/cryptoapp/app/build.gradle.kts | 1 - .../data/repositories/CryptoRepositoryImpl.kt | 5 +- .../components/home/DatingHomeScreen.kt | 8 +- .../composecookbook/gmail/data/SampleData.kt | 222 +++++++++--------- .../moviesapp/ui/home/MoviesHomeActivity.kt | 3 +- .../data/repositories/MovieRepositoryImpl.kt | 67 +++--- .../repositories/MoviesLaneRepositoryImpl.kt | 105 ++++----- .../spotify/ui/home/components/SpotifyHome.kt | 4 +- .../tiktok/components/home/HomeScreen.kt | 5 +- gradle/libs.versions.toml | 11 +- gradle/wrapper/gradle-wrapper.jar | Bin 43583 -> 48749 bytes gradle/wrapper/gradle-wrapper.properties | 4 +- gradlew | 15 +- gradlew.bat | 86 ++++--- settings.gradle.kts | 31 +++ 26 files changed, 367 insertions(+), 312 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c278ff2bc..28905fb30 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,8 +1,8 @@ import com.guru.composecookbook.build.configurations.ProjectConfigs +import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { id("com.android.application") - id("kotlin-android") id("com.google.devtools.ksp") id("org.jetbrains.kotlin.plugin.compose") } @@ -31,16 +31,15 @@ android { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } - kotlinOptions { - jvmTarget = "1.8" - // useIR = true - freeCompilerArgs = freeCompilerArgs + "-opt-in=kotlin.RequiresOptIn" - } buildFeatures { compose = true } lint { abortOnError = false } testOptions { unitTests.all { it.useJUnitPlatform() } } } +// AGP 9.0 ships built-in Kotlin (replacing the kotlin-android plugin), so the +// JVM target is configured through the Kotlin compiler options. +kotlin { compilerOptions { jvmTarget.set(JvmTarget.JVM_1_8) } } + dependencies { implementation(project(":data")) implementation(project(":theme")) diff --git a/app/src/main/java/com/guru/composecookbook/ui/animation/AnimatableSuspendingAnimations.kt b/app/src/main/java/com/guru/composecookbook/ui/animation/AnimatableSuspendingAnimations.kt index cc3db233e..47bfdf180 100644 --- a/app/src/main/java/com/guru/composecookbook/ui/animation/AnimatableSuspendingAnimations.kt +++ b/app/src/main/java/com/guru/composecookbook/ui/animation/AnimatableSuspendingAnimations.kt @@ -115,7 +115,9 @@ fun DraggableCardWithAnimatable() { Material3Card( backgroundColor = green200, modifier = - modifier.size(100.dp).offset(x = pointerAnimatableX.value.dp, y = pointerAnimatableX.value.dp), + modifier + .size(100.dp) + .offset(x = pointerAnimatableX.value.dp, y = pointerAnimatableX.value.dp), ) {} Spacer(modifier = Modifier.height(100.dp)) } diff --git a/app/src/main/java/com/guru/composecookbook/ui/animation/AnimateAsStateAnimations.kt b/app/src/main/java/com/guru/composecookbook/ui/animation/AnimateAsStateAnimations.kt index 462083c3f..1249f4532 100644 --- a/app/src/main/java/com/guru/composecookbook/ui/animation/AnimateAsStateAnimations.kt +++ b/app/src/main/java/com/guru/composecookbook/ui/animation/AnimateAsStateAnimations.kt @@ -173,7 +173,8 @@ fun SimpleAnimateCustomStateClass() { Button( onClick = { enabled = !enabled }, - modifier = Modifier.padding(16.dp).width(animatedUiState.width).rotate(animatedUiState.rotation), + modifier = + Modifier.padding(16.dp).width(animatedUiState.width).rotate(animatedUiState.rotation), ) { Text("Custom State Animation") } diff --git a/app/src/main/java/com/guru/composecookbook/ui/home/contrast/ContrastThemeActivity.kt b/app/src/main/java/com/guru/composecookbook/ui/home/contrast/ContrastThemeActivity.kt index f18002668..397a1959a 100644 --- a/app/src/main/java/com/guru/composecookbook/ui/home/contrast/ContrastThemeActivity.kt +++ b/app/src/main/java/com/guru/composecookbook/ui/home/contrast/ContrastThemeActivity.kt @@ -139,7 +139,10 @@ fun ContrastThemeDemo(dark: Boolean) { selected = level == value, onClick = { level = value }, shape = - SegmentedButtonDefaults.itemShape(index = index, count = ContrastLevel.entries.size), + SegmentedButtonDefaults.itemShape( + index = index, + count = ContrastLevel.entries.size, + ), ) { Text(value.label) } diff --git a/app/src/main/java/com/guru/composecookbook/ui/learnwidgets/Layouts.kt b/app/src/main/java/com/guru/composecookbook/ui/learnwidgets/Layouts.kt index f2f67ceba..35628c0d8 100644 --- a/app/src/main/java/com/guru/composecookbook/ui/learnwidgets/Layouts.kt +++ b/app/src/main/java/com/guru/composecookbook/ui/learnwidgets/Layouts.kt @@ -70,7 +70,8 @@ fun TypesOfRows() { ) Row( horizontalArrangement = Arrangement.SpaceAround, - modifier = Modifier.padding(8.dp).fillMaxWidth().testTag(TestTags.HOME_LAYOUTS_ROW_SPACE_AROUND), + modifier = + Modifier.padding(8.dp).fillMaxWidth().testTag(TestTags.HOME_LAYOUTS_ROW_SPACE_AROUND), ) { MultipleTexts() } @@ -93,7 +94,8 @@ fun TypesOfRows() { ) Row( horizontalArrangement = Arrangement.SpaceEvenly, - modifier = Modifier.padding(8.dp).fillMaxWidth().testTag(TestTags.HOME_LAYOUTS_ROW_SPACE_EVENLY), + modifier = + Modifier.padding(8.dp).fillMaxWidth().testTag(TestTags.HOME_LAYOUTS_ROW_SPACE_EVENLY), ) { MultipleTexts() } diff --git a/app/src/main/java/com/guru/composecookbook/ui/learnwidgets/SegmentedButtons.kt b/app/src/main/java/com/guru/composecookbook/ui/learnwidgets/SegmentedButtons.kt index 2fa24a569..1e5ec177f 100644 --- a/app/src/main/java/com/guru/composecookbook/ui/learnwidgets/SegmentedButtons.kt +++ b/app/src/main/java/com/guru/composecookbook/ui/learnwidgets/SegmentedButtons.kt @@ -54,7 +54,10 @@ fun SegmentedButtons() { selected = selected == option, onClick = { selected = option }, shape = - SegmentedButtonDefaults.itemShape(index = options.indexOf(option), count = options.size), + SegmentedButtonDefaults.itemShape( + index = options.indexOf(option), + count = options.size, + ), ) { Text(option) } diff --git a/build.gradle.kts b/build.gradle.kts index 639ddad40..68e957afc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,22 +3,22 @@ // build classpath through buildSrc's dependencies (also catalog-driven), so // only ktfmt needs to be declared here. plugins { - alias(libs.plugins.ktfmt) apply false - alias(libs.plugins.roborazzi) apply false + alias(libs.plugins.ktfmt) apply false + alias(libs.plugins.roborazzi) apply false } allprojects { - repositories { - mavenCentral() - google() - maven(url = "https://jitpack.io") - } + repositories { + mavenCentral() + google() + maven(url = "https://jitpack.io") + } - // Apply ktfmt to all projects - apply(plugin = "com.ncorti.ktfmt.gradle") + // Apply ktfmt to all projects + apply(plugin = "com.ncorti.ktfmt.gradle") - configure { - googleStyle() - maxWidth.set(100) - } + configure { + googleStyle() + maxWidth.set(100) + } } diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 994df7979..63e9fafd1 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -17,7 +17,7 @@ repositories { } dependencies { - // in order to be able to use "kotlin-android" in the common script + // for the Kotlin Gradle plugin DSL (kotlin { compilerOptions }, JvmTarget) in the common scripts implementation(libs.kotlin.gradle.plugin) // in order to be able to apply "org.jetbrains.kotlin.plugin.compose" in the common scripts @@ -27,7 +27,7 @@ dependencies { implementation(libs.kotlin.serialization.plugin) // in order to be able to apply "com.google.devtools.ksp" in the common scripts - // (the KSP version in the catalog must match the Kotlin version) + // (KSP 2.3.x is versioned independently of Kotlin since Kotlin 2.2) implementation(libs.ksp.gradle.plugin) // in order to recognize the "plugins" block in the common script diff --git a/buildSrc/src/main/kotlin/common-compose-module-configs-script-plugin.gradle.kts b/buildSrc/src/main/kotlin/common-compose-module-configs-script-plugin.gradle.kts index f2389f7c2..e3b9aec5a 100644 --- a/buildSrc/src/main/kotlin/common-compose-module-configs-script-plugin.gradle.kts +++ b/buildSrc/src/main/kotlin/common-compose-module-configs-script-plugin.gradle.kts @@ -1,8 +1,8 @@ import com.guru.composecookbook.build.configurations.ProjectConfigs +import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { id("com.android.library") - id("kotlin-android") id("org.jetbrains.kotlin.plugin.compose") } @@ -11,7 +11,6 @@ android { defaultConfig { minSdk = ProjectConfigs.minSdkVersion - targetSdk = ProjectConfigs.targetSdkVersion testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } @@ -19,13 +18,17 @@ android { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = "17" - freeCompilerArgs = freeCompilerArgs + "-opt-in=kotlin.RequiresOptIn" - } buildFeatures { compose = true } } +// AGP 9.0 ships built-in Kotlin (replacing the kotlin-android plugin), so the +// JVM target is configured through the Kotlin compiler options. +kotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_17) + } +} + // Namespace will be set by individual module diff --git a/buildSrc/src/main/kotlin/common-kotlin-module-configs-script-plugin.gradle.kts b/buildSrc/src/main/kotlin/common-kotlin-module-configs-script-plugin.gradle.kts index 77b352c22..4711b72e8 100644 --- a/buildSrc/src/main/kotlin/common-kotlin-module-configs-script-plugin.gradle.kts +++ b/buildSrc/src/main/kotlin/common-kotlin-module-configs-script-plugin.gradle.kts @@ -1,31 +1,35 @@ import com.guru.composecookbook.build.configurations.ProjectConfigs +import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { id("com.android.library") - id("kotlin-android") id("com.google.devtools.ksp") id("org.jetbrains.kotlin.plugin.compose") } android { compileSdk = ProjectConfigs.compileSdkVersion - + defaultConfig { minSdk = ProjectConfigs.minSdkVersion - targetSdk = ProjectConfigs.targetSdkVersion } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = "17" - } - + buildFeatures { compose = true } } +// AGP 9.0 ships built-in Kotlin (replacing the kotlin-android plugin), so the +// JVM target is configured through the Kotlin compiler options. +kotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_17) + } +} + // Namespace will be set by individual module diff --git a/components/verticalgrid/src/main/java/com/guru/composecookbook/verticalgrid/StaggeredVerticalGrid.kt b/components/verticalgrid/src/main/java/com/guru/composecookbook/verticalgrid/StaggeredVerticalGrid.kt index 4b0cda210..63fad2b85 100644 --- a/components/verticalgrid/src/main/java/com/guru/composecookbook/verticalgrid/StaggeredVerticalGrid.kt +++ b/components/verticalgrid/src/main/java/com/guru/composecookbook/verticalgrid/StaggeredVerticalGrid.kt @@ -37,14 +37,13 @@ fun StaggeredVerticalGrid( val columnWidth = constraints.maxWidth / columns val itemConstraints = constraints.copy(maxWidth = columnWidth) val colHeights = IntArray(columns) { 0 } // track each column's height - val placeables = - measurables.map { measurable -> - val column = shortestColumn(colHeights) - val placeable = measurable.measure(itemConstraints) - placeableXY[placeable] = Pair(columnWidth * column, colHeights[column]) - colHeights[column] += placeable.height - placeable - } + val placeables = measurables.map { measurable -> + val column = shortestColumn(colHeights) + val placeable = measurable.measure(itemConstraints) + placeableXY[placeable] = Pair(columnWidth * column, colHeights[column]) + colHeights[column] += placeable.height + placeable + } val height = colHeights.maxOrNull()?.coerceIn(constraints.minHeight, constraints.maxHeight) diff --git a/demos/cryptoapp/app/build.gradle.kts b/demos/cryptoapp/app/build.gradle.kts index 7d2f1282e..513527ab5 100644 --- a/demos/cryptoapp/app/build.gradle.kts +++ b/demos/cryptoapp/app/build.gradle.kts @@ -1,7 +1,6 @@ plugins { /** See [common-compose-module-configs-script-plugin.gradle.kts] file */ id("common-compose-module-configs-script-plugin") - id("org.jetbrains.kotlin.android") } android { namespace = "com.guru.composecookbook.cryptoapp" } diff --git a/demos/cryptoapp/data/src/main/java/com/guru/composecookbook/cryptoapp/data/repositories/CryptoRepositoryImpl.kt b/demos/cryptoapp/data/src/main/java/com/guru/composecookbook/cryptoapp/data/repositories/CryptoRepositoryImpl.kt index b3d8f8565..af347738c 100644 --- a/demos/cryptoapp/data/src/main/java/com/guru/composecookbook/cryptoapp/data/repositories/CryptoRepositoryImpl.kt +++ b/demos/cryptoapp/data/src/main/java/com/guru/composecookbook/cryptoapp/data/repositories/CryptoRepositoryImpl.kt @@ -18,8 +18,9 @@ class CryptoRepositoryImpl( val response = cryptoApi.getAllCrypto(page) return if (response.isSuccessful && !response.body().isNullOrEmpty()) { val cryptoApiResponseList = response.body() - val cryptoList = - cryptoApiResponseList?.map { cryptoApiResponse -> cryptoApiMapper.map(cryptoApiResponse) } + val cryptoList = cryptoApiResponseList?.map { cryptoApiResponse -> + cryptoApiMapper.map(cryptoApiResponse) + } cryptoList ?: emptyList() } else { emptyList() diff --git a/demos/datingapp/src/main/java/com/guru/composecookbook/datingapp/components/home/DatingHomeScreen.kt b/demos/datingapp/src/main/java/com/guru/composecookbook/datingapp/components/home/DatingHomeScreen.kt index 8e191c13b..da058d750 100644 --- a/demos/datingapp/src/main/java/com/guru/composecookbook/datingapp/components/home/DatingHomeScreen.kt +++ b/demos/datingapp/src/main/java/com/guru/composecookbook/datingapp/components/home/DatingHomeScreen.kt @@ -92,9 +92,7 @@ fun DatingHomeScreen() { .alpha(animateFloatAsState(if (listEmpty.value) 0f else 1f).value), ) { IconButton( - onClick = { - /* TODO Hook to swipe event */ - }, + onClick = { /* TODO Hook to swipe event */ }, modifier = Modifier.padding(horizontal = 16.dp) .size(60.dp) @@ -109,9 +107,7 @@ fun DatingHomeScreen() { ) } IconButton( - onClick = { - /* TODO Hook to swipe event */ - }, + onClick = { /* TODO Hook to swipe event */ }, modifier = Modifier.padding(horizontal = 16.dp) .size(60.dp) diff --git a/demos/gmail/src/main/java/com/guru/composecookbook/gmail/data/SampleData.kt b/demos/gmail/src/main/java/com/guru/composecookbook/gmail/data/SampleData.kt index e118c4201..f93ea7a94 100644 --- a/demos/gmail/src/main/java/com/guru/composecookbook/gmail/data/SampleData.kt +++ b/demos/gmail/src/main/java/com/guru/composecookbook/gmail/data/SampleData.kt @@ -2,119 +2,119 @@ package com.guru.composecookbook.gmail.data var sampleMessage = """ - - - - - Demystifying Email Design - - + + + + Demystifying Email Design + - - - - - + +
+ - - - - - - - - - - -
- Creating Email Magic. -
- - - - - - - - - - -
-

Lorem ipsum dolor sit amet!

-
-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. In tempus adipiscing felis, sit amet blandit ipsum volutpat sed. Morbi porttitor, eget accumsan dictum, nisi libero ultricies ipsum, in posuere mauris neque at erat.

-
- - - - - - -
- - - - - - - -
- -
-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. In tempus adipiscing felis, sit amet blandit ipsum volutpat sed. Morbi porttitor, eget accumsan dictum, nisi libero ultricies ipsum, in posuere mauris neque at erat.

-
-
  - - - - - - - -
- -
-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. In tempus adipiscing felis, sit amet blandit ipsum volutpat sed. Morbi porttitor, eget accumsan dictum, nisi libero ultricies ipsum, in posuere mauris neque at erat.

-
-
-
-
- - - - - -
-

® Someone, somewhere 2025
- Unsubscribe to this newsletter instantly

-
- - - - - - -
- - Twitter. - -   - - Facebook. - -
-
-
+ + + + + - -
-
- - - - -""" + + + + + + + + + + +
+ Creating Email Magic. +
+ + + + + + + + + + +
+

Lorem ipsum dolor sit amet!

+
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. In tempus adipiscing felis, sit amet blandit ipsum volutpat sed. Morbi porttitor, eget accumsan dictum, nisi libero ultricies ipsum, in posuere mauris neque at erat.

+
+ + + + + + +
+ + + + + + + +
+ +
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. In tempus adipiscing felis, sit amet blandit ipsum volutpat sed. Morbi porttitor, eget accumsan dictum, nisi libero ultricies ipsum, in posuere mauris neque at erat.

+
+
  + + + + + + + +
+ +
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. In tempus adipiscing felis, sit amet blandit ipsum volutpat sed. Morbi porttitor, eget accumsan dictum, nisi libero ultricies ipsum, in posuere mauris neque at erat.

+
+
+
+
+ + + + + +
+

® Someone, somewhere 2025
+ Unsubscribe to this newsletter instantly

+
+ + + + + + +
+ + Twitter. + +   + + Facebook. + +
+
+
+ +
+ + + + + """ .trimIndent() diff --git a/demos/moviesapp/app/src/main/java/com/guru/composecookbook/moviesapp/ui/home/MoviesHomeActivity.kt b/demos/moviesapp/app/src/main/java/com/guru/composecookbook/moviesapp/ui/home/MoviesHomeActivity.kt index 93efedf02..fde70dc68 100644 --- a/demos/moviesapp/app/src/main/java/com/guru/composecookbook/moviesapp/ui/home/MoviesHomeActivity.kt +++ b/demos/moviesapp/app/src/main/java/com/guru/composecookbook/moviesapp/ui/home/MoviesHomeActivity.kt @@ -36,8 +36,7 @@ import com.guru.composecookbook.theme.ComposeCookBookTheme import com.guru.composecookbook.theme.graySurface sealed class MoviesHomeInteractionEvents { - data class OpenMovieDetail(val movie: Movie, val imageId: Int = 0) : - MoviesHomeInteractionEvents() + data class OpenMovieDetail(val movie: Movie, val imageId: Int = 0) : MoviesHomeInteractionEvents() data class AddToMyWatchlist(val movie: Movie) : MoviesHomeInteractionEvents() diff --git a/demos/moviesapp/data/src/main/java/com/guru/composecookbook/moviesapp/data/repositories/MovieRepositoryImpl.kt b/demos/moviesapp/data/src/main/java/com/guru/composecookbook/moviesapp/data/repositories/MovieRepositoryImpl.kt index 01098aa8b..4a548112e 100644 --- a/demos/moviesapp/data/src/main/java/com/guru/composecookbook/moviesapp/data/repositories/MovieRepositoryImpl.kt +++ b/demos/moviesapp/data/src/main/java/com/guru/composecookbook/moviesapp/data/repositories/MovieRepositoryImpl.kt @@ -18,29 +18,27 @@ class MovieRepositoryImpl( private val genreDao: GenreDao, ) : MovieRepository { - override suspend fun getNowShowing(): Flow> = - flow { - val response = movieApi.getMovies(1) - if (response.isSuccessful) { - emit(response.body()?.movies ?: emptyList()) - } else { - emit(emptyList()) - } - } - .catch { e -> emit(emptyList()) } - .flowOn(Dispatchers.IO) + override suspend fun getNowShowing(): Flow> = flow { + val response = movieApi.getMovies(1) + if (response.isSuccessful) { + emit(response.body()?.movies ?: emptyList()) + } else { + emit(emptyList()) + } + } + .catch { e -> emit(emptyList()) } + .flowOn(Dispatchers.IO) - override suspend fun getSimilarMovies(movieId: String): Flow> = - flow { - val response = movieApi.getSimilarMovies(movieId) - if (response.isSuccessful) { - emit(response.body()?.movies ?: emptyList()) - } else { - emit(emptyList()) - } - } - .catch { emit(emptyList()) } - .flowOn(Dispatchers.IO) + override suspend fun getSimilarMovies(movieId: String): Flow> = flow { + val response = movieApi.getSimilarMovies(movieId) + if (response.isSuccessful) { + emit(response.body()?.movies ?: emptyList()) + } else { + emit(emptyList()) + } + } + .catch { emit(emptyList()) } + .flowOn(Dispatchers.IO) override suspend fun getMyWatchlist(): LiveData> { return moviesDao.getMyWatchlist() @@ -56,19 +54,18 @@ class MovieRepositoryImpl( override suspend fun getGenres(): LiveData> = genreDao.getAllGenres() - override suspend fun fetchAndSaveGenresToDatabase(): Flow> = - flow { - val response = movieApi.getGenres() - if (response.isSuccessful) { - response.body()?.let { - if (it.genres.isNotEmpty()) { - genreDao.insertAllGenres(it.genres) - } - } - } else { - emit(emptyList()) + override suspend fun fetchAndSaveGenresToDatabase(): Flow> = flow { + val response = movieApi.getGenres() + if (response.isSuccessful) { + response.body()?.let { + if (it.genres.isNotEmpty()) { + genreDao.insertAllGenres(it.genres) } } - .catch { emit(emptyList()) } - .flowOn(Dispatchers.IO) + } else { + emit(emptyList()) + } + } + .catch { emit(emptyList()) } + .flowOn(Dispatchers.IO) } diff --git a/demos/moviesapp/data/src/main/java/com/guru/composecookbook/moviesapp/data/repositories/MoviesLaneRepositoryImpl.kt b/demos/moviesapp/data/src/main/java/com/guru/composecookbook/moviesapp/data/repositories/MoviesLaneRepositoryImpl.kt index 03d52f13b..32de9dd58 100644 --- a/demos/moviesapp/data/src/main/java/com/guru/composecookbook/moviesapp/data/repositories/MoviesLaneRepositoryImpl.kt +++ b/demos/moviesapp/data/src/main/java/com/guru/composecookbook/moviesapp/data/repositories/MoviesLaneRepositoryImpl.kt @@ -10,63 +10,58 @@ import kotlinx.coroutines.flow.flowOn class MoviesLaneRepositoryImpl(private val movieApi: MovieApi) : MoviesLanesRepository { - override suspend fun getTrendingMovies(): Flow> = - flow { - val response = movieApi.getTrendingMovies() - if (response.isSuccessful) { - emit(response.body()?.movies ?: emptyList()) - } else { - emit(emptyList()) - } - } - .catch { emit(emptyList()) } - .flowOn(Dispatchers.Default) + override suspend fun getTrendingMovies(): Flow> = flow { + val response = movieApi.getTrendingMovies() + if (response.isSuccessful) { + emit(response.body()?.movies ?: emptyList()) + } else { + emit(emptyList()) + } + } + .catch { emit(emptyList()) } + .flowOn(Dispatchers.Default) - override suspend fun getTrendingTVShows(): Flow> = - flow { - val response = movieApi.getTrendingTVShows() - if (response.isSuccessful) { - emit(response.body()?.movies ?: emptyList()) - } else { - emit(emptyList()) - } - } - .catch { emit(emptyList()) } - .flowOn(Dispatchers.Default) + override suspend fun getTrendingTVShows(): Flow> = flow { + val response = movieApi.getTrendingTVShows() + if (response.isSuccessful) { + emit(response.body()?.movies ?: emptyList()) + } else { + emit(emptyList()) + } + } + .catch { emit(emptyList()) } + .flowOn(Dispatchers.Default) - override suspend fun getPopularMovies(): Flow> = - flow { - val response = movieApi.getPopularMovies() - if (response.isSuccessful) { - emit(response.body()?.movies ?: emptyList()) - } else { - emit(emptyList()) - } - } - .catch { emit(emptyList()) } - .flowOn(Dispatchers.Default) + override suspend fun getPopularMovies(): Flow> = flow { + val response = movieApi.getPopularMovies() + if (response.isSuccessful) { + emit(response.body()?.movies ?: emptyList()) + } else { + emit(emptyList()) + } + } + .catch { emit(emptyList()) } + .flowOn(Dispatchers.Default) - override suspend fun getTopRatedMovies(): Flow> = - flow { - val response = movieApi.getTopRatedMovies() - if (response.isSuccessful) { - emit(response.body()?.movies ?: emptyList()) - } else { - emit(emptyList()) - } - } - .catch { emit(emptyList()) } - .flowOn(Dispatchers.Default) + override suspend fun getTopRatedMovies(): Flow> = flow { + val response = movieApi.getTopRatedMovies() + if (response.isSuccessful) { + emit(response.body()?.movies ?: emptyList()) + } else { + emit(emptyList()) + } + } + .catch { emit(emptyList()) } + .flowOn(Dispatchers.Default) - override suspend fun getTopRatedTVShwos(): Flow> = - flow { - val response = movieApi.getTopRatedTvShows() - if (response.isSuccessful) { - emit(response.body()?.movies ?: emptyList()) - } else { - emit(emptyList()) - } - } - .catch { emit(emptyList()) } - .flowOn(Dispatchers.Default) + override suspend fun getTopRatedTVShwos(): Flow> = flow { + val response = movieApi.getTopRatedTvShows() + if (response.isSuccessful) { + emit(response.body()?.movies ?: emptyList()) + } else { + emit(emptyList()) + } + } + .catch { emit(emptyList()) } + .flowOn(Dispatchers.Default) } diff --git a/demos/spotify/src/main/java/com/guru/composecookbook/spotify/ui/home/components/SpotifyHome.kt b/demos/spotify/src/main/java/com/guru/composecookbook/spotify/ui/home/components/SpotifyHome.kt index 5a4fa260f..11d6d5a4a 100644 --- a/demos/spotify/src/main/java/com/guru/composecookbook/spotify/ui/home/components/SpotifyHome.kt +++ b/demos/spotify/src/main/java/com/guru/composecookbook/spotify/ui/home/components/SpotifyHome.kt @@ -76,7 +76,9 @@ fun SpotifyTitle(text: String, modifier: Modifier = Modifier) { text = text, style = typography.h5.copy(fontWeight = FontWeight.ExtraBold), modifier = - modifier.padding(start = 8.dp, end = 4.dp, bottom = 8.dp, top = 24.dp).semantics { heading() }, + modifier.padding(start = 8.dp, end = 4.dp, bottom = 8.dp, top = 24.dp).semantics { + heading() + }, ) } diff --git a/demos/tiktok/src/main/java/com/guru/composecookbook/tiktok/components/home/HomeScreen.kt b/demos/tiktok/src/main/java/com/guru/composecookbook/tiktok/components/home/HomeScreen.kt index 4a125edec..198acfb05 100644 --- a/demos/tiktok/src/main/java/com/guru/composecookbook/tiktok/components/home/HomeScreen.kt +++ b/demos/tiktok/src/main/java/com/guru/composecookbook/tiktok/components/home/HomeScreen.kt @@ -210,7 +210,10 @@ fun ProfileImageWithFollow(modifier: Modifier, showFollow: Boolean, imageId: Int imageVector = Icons.Filled.Add, contentDescription = null, modifier = - Modifier.size(20.dp).clip(CircleShape).background(tiktokRed).align(Alignment.BottomCenter), + Modifier.size(20.dp) + .clip(CircleShape) + .background(tiktokRed) + .align(Alignment.BottomCenter), ) } } else { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 649ebdaf1..01fab64e3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,9 +1,9 @@ [versions] -agp = "8.7.3" -kotlin = "2.1.20" -ksp = "2.1.20-1.0.31" -ktfmt = "0.22.0" -roborazzi = "1.46.1" +agp = "9.5.0" +kotlin = "2.4.21" +ksp = "2.3.13" +ktfmt = "0.27.0" +roborazzi = "1.66.0" robolectric = "4.14.1" activity-compose = "1.10.1" @@ -179,7 +179,6 @@ screenshot-test = ["roborazzi", "roborazzi-compose", "robolectric"] [plugins] android-application = { id = "com.android.application", version.ref = "agp" } android-library = { id = "com.android.library", version.ref = "agp" } -kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index a4b76b9530d66f5e68d973ea569d8e19de379189..9fa7f288283f81eec4952784c271abd7e0938dee 100644 GIT binary patch delta 40515 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

5$lZtI^UN?%P;RD$b+lK?@zGO+687| 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 delta 35554 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 09523c0e5..91c4fc64a 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,9 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.8.2-bin.zip networkTimeout=10000 +retries=0 +retryBackOffMs=500 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index f3b75f3b0..249efbb03 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -20,7 +20,7 @@ ############################################################################## # -# Gradle start up script for POSIX generated by Gradle. +# gradlew start up script for POSIX generated by Gradle. # # Important for running: # @@ -29,7 +29,7 @@ # bash, then to run this script, type that shell name before the whole # command line, like: # -# ksh Gradle +# ksh gradlew # # Busybox and similar reduced shells will NOT work, because this script # requires all of these POSIX shell features: @@ -57,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -114,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -172,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -205,15 +203,14 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 9b42019c7..03754c4c3 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -19,12 +19,39 @@ @if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem -@rem Gradle startup script for Windows +@rem gradlew startup script for Windows @rem @rem ########################################################################## -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal +@rem Set local scope for the variables, and ensure extensions are enabled +setlocal EnableExtensions + +@rem Catch executions from older scripts and ensure they exit cleanly. +@rem This can be removed once we can be reasonably confident that few people +@rem will be migrating directly to this new wrapper. +goto afterSafetyNet +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +goto exitWithErrorLevel +:afterSafetyNet set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. @@ -45,13 +72,14 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 +1>&2 echo. +1>&2 echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +1>&2 echo. +1>&2 echo Please set the JAVA_HOME variable in your environment to match the +1>&2 echo location of your Java installation. -goto fail +"%COMSPEC%" /c exit 1 +goto exitWithErrorLevel :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% @@ -59,36 +87,26 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 +1>&2 echo. +1>&2 echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +1>&2 echo. +1>&2 echo Please set the JAVA_HOME variable in your environment to match the +1>&2 echo location of your Java installation. -goto fail +"%COMSPEC%" /c exit 1 +goto exitWithErrorLevel :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +@rem Execute gradlew +@rem endlocal doesn't take effect until after the line is parsed and variables are expanded +@rem which allows us to clear the local environment before executing the java command +endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel & goto exitWithErrorLevel -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem This label must not be changed. We rely on old scripts being able to jump to this point. +:exitWithErrorLevel +@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts +"%COMSPEC%" /c exit %ERRORLEVEL% diff --git a/settings.gradle.kts b/settings.gradle.kts index 7aadc5f2a..703a2bf6f 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,32 +1,63 @@ rootProject.name = "ComposeCookBook" + include(":app") + include(":demos:instagram") + include(":data") + include(":theme") + include(":demos:cryptoapp:app") + include(":demos:cryptoapp:data") + include(":demos:moviesapp:app") + include(":demos:moviesapp:data") + include(":components:charts") + include(":components:tags") + include(":components:carousel") + include(":components:verticalgrid") + include(":demos:spotify") + include(":demos:twitter") + include(":demos:youtube") + include(":demos:gmail") + include(":components:fab") + include(":demos:paint") + include(":components:colorpicker") + include(":demos:tiktok") + include(":demos:datingapp") + include(":animations:lottie") + include(":animations:canvas") + include(":components:comingsoon") + include(":templates:onboarding") + include(":templates:paymentcard") + include(":templates:profile") + include(":templates:login") + include(":templates:pinlock") + include(":templates:cascademenu") + include(":demos:meditation")