diff --git a/README.md b/README.md index 0a4c1de3..edfc1c66 100644 --- a/README.md +++ b/README.md @@ -18,8 +18,8 @@ - - + + diff --git a/app/src/main/java/com/guru/composecookbook/ui/animation/AnimationScreen.kt b/app/src/main/java/com/guru/composecookbook/ui/animation/AnimationScreen.kt index 97becc74..32c7d92d 100644 --- a/app/src/main/java/com/guru/composecookbook/ui/animation/AnimationScreen.kt +++ b/app/src/main/java/com/guru/composecookbook/ui/animation/AnimationScreen.kt @@ -10,8 +10,8 @@ import androidx.compose.material3.Divider import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.IconButton import androidx.compose.material3.Scaffold -import androidx.compose.material3.SmallTopAppBar import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -39,7 +39,7 @@ fun AnimationScreen() { Scaffold( modifier = Modifier.testTag(TestTags.ANIM_SCREEN_ROOT), topBar = { - SmallTopAppBar( + TopAppBar( title = { Text(text = "Animations") }, navigationIcon = { IconButton(onClick = { animateIcon = !animateIcon }) { diff --git a/app/src/main/java/com/guru/composecookbook/ui/home/advancelists/AdvanceListsActivity.kt b/app/src/main/java/com/guru/composecookbook/ui/home/advancelists/AdvanceListsActivity.kt index b89d5438..ffd0c8b7 100644 --- a/app/src/main/java/com/guru/composecookbook/ui/home/advancelists/AdvanceListsActivity.kt +++ b/app/src/main/java/com/guru/composecookbook/ui/home/advancelists/AdvanceListsActivity.kt @@ -16,8 +16,8 @@ import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold -import androidx.compose.material3.SmallTopAppBar import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -49,7 +49,7 @@ class AdvanceListsActivity : ComponentActivity() { // A surface container using the 'background' color from the theme Scaffold( topBar = { - SmallTopAppBar( + TopAppBar( title = { Text(text = "Advance Lists(In Progress)") }, navigationIcon = { IconButton(onClick = { onBackPressed() }) { diff --git a/app/src/main/java/com/guru/composecookbook/ui/home/customfling/FlingListActivity.kt b/app/src/main/java/com/guru/composecookbook/ui/home/customfling/FlingListActivity.kt index 88adf82e..cb7e5f7f 100644 --- a/app/src/main/java/com/guru/composecookbook/ui/home/customfling/FlingListActivity.kt +++ b/app/src/main/java/com/guru/composecookbook/ui/home/customfling/FlingListActivity.kt @@ -18,8 +18,8 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.Scaffold -import androidx.compose.material3.SmallTopAppBar import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.runtime.livedata.observeAsState @@ -139,7 +139,7 @@ fun ListViewContent( */ Scaffold( topBar = { - SmallTopAppBar( + TopAppBar( title = { Column(modifier = Modifier.padding(4.dp)) { /* diff --git a/app/src/main/java/com/guru/composecookbook/ui/home/dialogs/DialogsActivity.kt b/app/src/main/java/com/guru/composecookbook/ui/home/dialogs/DialogsActivity.kt index e53afdc9..10eb1bd6 100644 --- a/app/src/main/java/com/guru/composecookbook/ui/home/dialogs/DialogsActivity.kt +++ b/app/src/main/java/com/guru/composecookbook/ui/home/dialogs/DialogsActivity.kt @@ -24,9 +24,9 @@ import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Scaffold -import androidx.compose.material3.SmallTopAppBar import androidx.compose.material3.Text import androidx.compose.material3.TextButton +import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -77,7 +77,7 @@ class DialogsActivity : AppCompatActivity() { fun DialogScreen(onBack: () -> Unit) { Scaffold( topBar = { - SmallTopAppBar( + TopAppBar( title = { Text(text = "Dialogs") }, navigationIcon = { IconButton(onClick = onBack) { diff --git a/app/src/main/java/com/guru/composecookbook/ui/home/dynamic/DynamicUIActivity.kt b/app/src/main/java/com/guru/composecookbook/ui/home/dynamic/DynamicUIActivity.kt index fcc3f87b..44ef743f 100644 --- a/app/src/main/java/com/guru/composecookbook/ui/home/dynamic/DynamicUIActivity.kt +++ b/app/src/main/java/com/guru/composecookbook/ui/home/dynamic/DynamicUIActivity.kt @@ -13,8 +13,8 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.Scaffold -import androidx.compose.material3.SmallTopAppBar import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource @@ -64,7 +64,7 @@ class DynamicUIActivity : ComponentActivity() { fun DynamicUiWrapper(uiType: String, onback: () -> Unit) { Scaffold( topBar = { - SmallTopAppBar( + TopAppBar( title = { Text(text = uiType) }, navigationIcon = { IconButton(onClick = onback) { diff --git a/app/src/main/java/com/guru/composecookbook/ui/home/lists/ListViewActivity.kt b/app/src/main/java/com/guru/composecookbook/ui/home/lists/ListViewActivity.kt index 45c1f9f2..59022f45 100644 --- a/app/src/main/java/com/guru/composecookbook/ui/home/lists/ListViewActivity.kt +++ b/app/src/main/java/com/guru/composecookbook/ui/home/lists/ListViewActivity.kt @@ -21,8 +21,8 @@ import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold -import androidx.compose.material3.SmallTopAppBar import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier @@ -73,7 +73,7 @@ fun BaseView(isDarkTheme: Boolean, content: @Composable () -> Unit) { fun ListViewContent(listType: String, onBack: () -> Unit) { Scaffold( topBar = { - SmallTopAppBar( + TopAppBar( title = { Column(modifier = Modifier.padding(4.dp)) { Text(text = "ListView") diff --git a/app/src/main/java/com/guru/composecookbook/ui/learnwidgets/AppBars.kt b/app/src/main/java/com/guru/composecookbook/ui/learnwidgets/AppBars.kt index ef1e7752..cb496194 100644 --- a/app/src/main/java/com/guru/composecookbook/ui/learnwidgets/AppBars.kt +++ b/app/src/main/java/com/guru/composecookbook/ui/learnwidgets/AppBars.kt @@ -25,8 +25,8 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.SmallTopAppBar import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar as Material3TopAppBar import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -57,7 +57,7 @@ fun AppBars() { fun TopAppBarsDemo() { SubtitleText(subtitle = "Top App bar") - SmallTopAppBar( + Material3TopAppBar( title = { Text(text = "Home") }, navigationIcon = { IconButton(onClick = {}) { diff --git a/buildSrc/src/main/kotlin/com/guru/composecookbook/build/dependencies/Dependencies.kt b/buildSrc/src/main/kotlin/com/guru/composecookbook/build/dependencies/Dependencies.kt index c2c63dd6..8028a45b 100644 --- a/buildSrc/src/main/kotlin/com/guru/composecookbook/build/dependencies/Dependencies.kt +++ b/buildSrc/src/main/kotlin/com/guru/composecookbook/build/dependencies/Dependencies.kt @@ -17,19 +17,19 @@ object Dependencies { // Removed googleMaps = "com.google.android.libraries.maps:maps" as it's not publicly available const val playServicesMaps = "com.google.android.gms:play-services-maps:${Versions.playServicesMaps}" - const val composeUi = "androidx.compose.ui:ui:${Versions.compose}" - const val composeUiTooling = "androidx.compose.ui:ui-tooling:${Versions.compose}" + // Compose BOM keeps all androidx.compose artifacts below at compatible versions + const val composeBom = "androidx.compose:compose-bom:${Versions.composeBom}" + const val composeUi = "androidx.compose.ui:ui" + const val composeUiTooling = "androidx.compose.ui:ui-tooling" // Material Design 1 and 3 dependencies - const val composeMaterial = "androidx.compose.material:material:${Versions.compose}" - const val composeMaterial3 = "androidx.compose.material3:material3:${Versions.material3}" - const val composeMaterial3WindowSizeClass = "androidx.compose.material3:material3-window-size-class:${Versions.material3}" - const val composeMaterialIconsExtended = - "androidx.compose.material:material-icons-extended:${Versions.compose}" - + const val composeMaterial = "androidx.compose.material:material" + const val composeMaterial3 = "androidx.compose.material3:material3" + const val composeMaterial3WindowSizeClass = "androidx.compose.material3:material3-window-size-class" + const val composeMaterialIconsExtended = "androidx.compose.material:material-icons-extended" + // Runtime and State Management - const val composeRuntime = "androidx.compose.runtime:runtime:${Versions.compose}" - const val composeRuntimeLivedata = - "androidx.compose.runtime:runtime-livedata:${Versions.compose}" + const val composeRuntime = "androidx.compose.runtime:runtime" + const val composeRuntimeLivedata = "androidx.compose.runtime:runtime-livedata" // Layout and Navigation const val composeConstraintLayout = @@ -41,8 +41,8 @@ object Dependencies { const val composeLottie = "com.airbnb.android:lottie-compose:${Versions.lottie}" const val composeNavigation = "androidx.navigation:navigation-compose:${Versions.navCompose}" - const val composeUiTestJunit4 = "androidx.compose.ui:ui-test-junit4:${Versions.compose}" - const val composeUiTestManifest = "androidx.compose.ui:ui-test-manifest:${Versions.compose}" + const val composeUiTestJunit4 = "androidx.compose.ui:ui-test-junit4" + const val composeUiTestManifest = "androidx.compose.ui:ui-test-manifest" /** * Custom fling behaviour diff --git a/buildSrc/src/main/kotlin/com/guru/composecookbook/build/dependencies/DependencyHandlerExtensions.kt b/buildSrc/src/main/kotlin/com/guru/composecookbook/build/dependencies/DependencyHandlerExtensions.kt index 54a15de4..d5f3ff9d 100644 --- a/buildSrc/src/main/kotlin/com/guru/composecookbook/build/dependencies/DependencyHandlerExtensions.kt +++ b/buildSrc/src/main/kotlin/com/guru/composecookbook/build/dependencies/DependencyHandlerExtensions.kt @@ -2,7 +2,13 @@ package com.guru.composecookbook.build.dependencies import org.gradle.api.artifacts.dsl.DependencyHandler +/** Imports the Compose BOM so the unversioned Compose artifacts resolve consistently. */ +private fun DependencyHandler.addComposeBom(configurationName: String) { + add(configurationName, platform(Dependencies.composeBom)) +} + fun DependencyHandler.addComposeOfficialDependencies() { + addComposeBom("implementation") composeOfficialDependencies.forEach { add("implementation", it) } @@ -15,6 +21,7 @@ fun DependencyHandler.addComposeThirdPartyDependencies() { } fun DependencyHandler.addComposeDebugDependencies() { + addComposeBom("debugImplementation") composeDebugDependencies.forEach { add("debugImplementation", it) } @@ -33,6 +40,7 @@ fun DependencyHandler.addKotlinTestDependencies() { } fun DependencyHandler.addDataDependencies() { + addComposeBom("implementation") add("ksp", Dependencies.roomCompiler) dataDependencies.forEach { add("implementation", it) @@ -76,6 +84,7 @@ fun DependencyHandler.addThirdPartyUnitTestsDependencies() { } fun DependencyHandler.addAndroidInstrumentationTestsDependencies() { + addComposeBom("androidTestImplementation") androidInstrumentationTestsDependencies.forEach { add("androidTestImplementation", it) } diff --git a/buildSrc/src/main/kotlin/com/guru/composecookbook/build/dependencies/Versions.kt b/buildSrc/src/main/kotlin/com/guru/composecookbook/build/dependencies/Versions.kt index 270f8411..46711afc 100644 --- a/buildSrc/src/main/kotlin/com/guru/composecookbook/build/dependencies/Versions.kt +++ b/buildSrc/src/main/kotlin/com/guru/composecookbook/build/dependencies/Versions.kt @@ -1,7 +1,7 @@ package com.guru.composecookbook.build.dependencies internal object Versions { - const val compose = "1.6.1" // Latest stable Compose UI version + const val composeBom = "2024.12.01" // Compose BOM maps ui/material/runtime etc. versions const val activityCompose = "1.8.2" // Latest stable const val pagingCompose = "3.2.1" // Latest stable const val navCompose = "2.7.7" // Latest stable navigation @@ -10,7 +10,7 @@ internal object Versions { const val coilCompose = "2.5.0" // Latest stable const val kotlin = "2.1.20" // Kotlin 2.x with the K2 compiler const val coroutines = "1.7.3" // Latest stable - const val androidLifecycleGrouped = "2.7.0" // Latest stable + const val androidLifecycleGrouped = "2.8.7" // Latest stable 2.8.x const val flinger = "1.0.5" // Keeping as is since it's a third-party lib const val paging = "3.2.1" // Latest stable const val lottie = "6.3.0" // Latest stable @@ -19,7 +19,6 @@ internal object Versions { const val appcompat = "1.6.1" // Latest stable const val paletteKtx = "1.0.0" // Latest stable const val material = "1.11.0" // Latest stable Material Design 1 - const val material3 = "1.2.1" // Latest stable Material 3 const val playServicesAds = "22.5.0" // Latest stable const val googleMaps = "2.0.1" // Latest Google Maps version const val playServicesMaps = "18.2.0" // Latest stable diff --git a/data/build.gradle.kts b/data/build.gradle.kts index 4e206914..98e33820 100644 --- a/data/build.gradle.kts +++ b/data/build.gradle.kts @@ -6,5 +6,6 @@ plugins { android { namespace = "com.guru.composecookbook.data" } dependencies { + implementation(platform(com.guru.composecookbook.build.dependencies.Dependencies.composeBom)) implementation(com.guru.composecookbook.build.dependencies.Dependencies.composeRuntime) } diff --git a/demos/datingapp/src/main/java/com/guru/composecookbook/datingapp/DatingHomeActivity.kt b/demos/datingapp/src/main/java/com/guru/composecookbook/datingapp/DatingHomeActivity.kt index e37eb3d8..659b7501 100644 --- a/demos/datingapp/src/main/java/com/guru/composecookbook/datingapp/DatingHomeActivity.kt +++ b/demos/datingapp/src/main/java/com/guru/composecookbook/datingapp/DatingHomeActivity.kt @@ -21,8 +21,8 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.NavigationBar import androidx.compose.material3.NavigationBarItem import androidx.compose.material3.Scaffold -import androidx.compose.material3.SmallTopAppBar import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar import androidx.compose.material3.contentColorFor import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState @@ -115,7 +115,7 @@ fun DatingHomeAppbar(navType: MutableState) { DatingNavType.CHATS -> "Chats" DatingNavType.PROFILE -> "My Profile" } - SmallTopAppBar( + TopAppBar( title = { Text(title, style = typography.h6) }, actions = { IconButton(onClick = {}) { Icons.Default.MyLocation } }, ) diff --git a/demos/instagram/src/main/java/com/guru/composecookbook/instagram/components/stories/StoryItem.kt b/demos/instagram/src/main/java/com/guru/composecookbook/instagram/components/stories/StoryItem.kt index 3ee365fa..01e0e3d3 100644 --- a/demos/instagram/src/main/java/com/guru/composecookbook/instagram/components/stories/StoryItem.kt +++ b/demos/instagram/src/main/java/com/guru/composecookbook/instagram/components/stories/StoryItem.kt @@ -8,8 +8,8 @@ import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Column import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.MaterialTheme -import androidx.compose.material.ripple.rememberRipple import androidx.compose.material3.Text +import androidx.compose.material3.ripple import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment @@ -59,7 +59,7 @@ fun StoryItem( ) .clickable( interactionSource = interactionSource, - indication = rememberRipple(bounded = false, radius = ProfileSizes.large / 2), + indication = ripple(bounded = false, radius = ProfileSizes.large / 2), enabled = true, onClickLabel = null, onClick = onClick,