From 0da42cdb4750b856c32beddc48f47d17ca5918bf Mon Sep 17 00:00:00 2001 From: Dale Hawkins <107309+dkhawk@users.noreply.github.com> Date: Wed, 27 May 2026 19:10:40 +0000 Subject: [PATCH] chore(maintenance): upgrade dependencies, migrate to Material 3, and resolve lint issues - Upgraded outdated dependencies in gradle/libs.versions.toml: - compose-bom: 2026.03.00 -> 2026.05.01 - material: 1.13.0 -> 1.14.0 - kotlinxCoroutines: 1.10.2 -> 1.11.0 - screenshot & validation-api: 0.0.1-alpha14 -> 0.0.1-alpha15 - Refactored root build.gradle.kts to declare the Dokka plugin via its catalog alias (libs.plugins.dokka). - Enabled project-wide parallel builds (org.gradle.parallel=true) in gradle.properties. - Migrated 8 demo activities and fragments in maps-app from Material 2 to Material 3, resolving 24 UsingMaterialAndMaterial3Libraries lint warnings. - Fully qualified AnimatedVisibility call in MapsInLazyColumnActivity.kt to resolve ColumnScope resolution conflict inside the Material 3 Card. - Resolved ConfigurationScreenWidthHeight warning in MarkerClusteringActivity.kt by calculating screen dimensions in pixels using LocalWindowInfo containerSize instead of legacy LocalConfiguration screen Dp. - Resolved HardcodedText warning in activity_fragment_demo.xml by defining and using a string resource (swipe_to_switch). --- build.gradle.kts | 4 ++-- gradle.properties | 2 +- gradle/libs.versions.toml | 8 ++++---- .../android/compose/CustomControlsActivity.kt | 18 +++++++++--------- .../compose/GoogleMapComposeFragment.kt | 4 ++-- .../compose/LocationTrackingActivity.kt | 6 +++--- .../android/compose/MapInColumnActivity.kt | 12 ++++++------ .../compose/MapsInLazyColumnActivity.kt | 15 +++++++-------- .../android/compose/RecompositionActivity.kt | 4 ++-- .../maps/android/compose/ScaleBarActivity.kt | 8 ++++---- .../maps/android/compose/StreetViewActivity.kt | 4 ++-- .../markerexamples/MarkerClusteringActivity.kt | 12 ++++++------ .../main/res/layout/activity_fragment_demo.xml | 2 +- maps-app/src/main/res/values/strings.xml | 1 + 14 files changed, 50 insertions(+), 50 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index c5745351..2582bc01 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -30,12 +30,12 @@ buildscript { } plugins { - id("org.jetbrains.dokka") version "2.1.0" + alias(libs.plugins.dokka) alias(libs.plugins.compose.compiler) apply false id("com.autonomousapps.dependency-analysis") version "3.4.1" alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.android) apply false - + id("com.github.ben-manes.versions") version "0.54.0" } val projectArtifactId by extra { project: Project -> diff --git a/gradle.properties b/gradle.properties index b927edd1..b6f9884a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ org.gradle.jvmargs=-Xmx4g -Dfile.encoding=UTF-8 # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true +org.gradle.parallel=true # AndroidX package structure to make it clearer which packages are bundled with the # Android operating system, and which are packaged with your app"s APK # https://developer.android.com/topic/libraries/support-library/androidx-rn diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 56953cfe..9d32ac6f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,17 +11,17 @@ agp = "9.2.1" dokka = "2.2.0" gradleMavenPublishPlugin = "0.36.0" kotlin = "2.3.21" -kotlinxCoroutines = "1.10.2" +kotlinxCoroutines = "1.11.0" # Android activitycompose = "1.13.0" androidx-core = "1.18.0" androidx-startup = "1.2.0" -compose-bom = "2026.03.00" +compose-bom = "2026.05.01" constraintlayout = "2.2.1" # Material -material = "1.13.0" +material = "1.14.0" material3 = "1.4.0" materialIconsExtendedAndroid = "1.7.8" @@ -40,7 +40,7 @@ mockk = "1.14.9" org-jacoco-core = "0.8.14" jacoco-plugin = "0.2.1" robolectric = "4.16.1" -screenshot = "0.0.1-alpha14" +screenshot = "0.0.1-alpha15" truth = "1.4.5" [libraries] diff --git a/maps-app/src/main/java/com/google/maps/android/compose/CustomControlsActivity.kt b/maps-app/src/main/java/com/google/maps/android/compose/CustomControlsActivity.kt index fdb204e3..ea1d679f 100644 --- a/maps-app/src/main/java/com/google/maps/android/compose/CustomControlsActivity.kt +++ b/maps-app/src/main/java/com/google/maps/android/compose/CustomControlsActivity.kt @@ -30,11 +30,11 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.foundation.layout.wrapContentSize -import androidx.compose.material.Button -import androidx.compose.material.ButtonDefaults -import androidx.compose.material.CircularProgressIndicator -import androidx.compose.material.MaterialTheme -import androidx.compose.material.Text +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -93,7 +93,7 @@ class CustomControlsActivity : ComponentActivity() { ) { CircularProgressIndicator( modifier = Modifier - .background(MaterialTheme.colors.background) + .background(MaterialTheme.colorScheme.background) .wrapContentSize() ) } @@ -134,12 +134,12 @@ class CustomControlsActivity : ComponentActivity() { Button( modifier = modifier.padding(4.dp), colors = ButtonDefaults.buttonColors( - backgroundColor = MaterialTheme.colors.onPrimary, - contentColor = MaterialTheme.colors.primary + containerColor = MaterialTheme.colorScheme.onPrimary, + contentColor = MaterialTheme.colorScheme.primary ), onClick = onClick ) { - Text(text = text, style = MaterialTheme.typography.body1) + Text(text = text, style = MaterialTheme.typography.bodyLarge) } } diff --git a/maps-app/src/main/java/com/google/maps/android/compose/GoogleMapComposeFragment.kt b/maps-app/src/main/java/com/google/maps/android/compose/GoogleMapComposeFragment.kt index 19c5248b..992c1963 100644 --- a/maps-app/src/main/java/com/google/maps/android/compose/GoogleMapComposeFragment.kt +++ b/maps-app/src/main/java/com/google/maps/android/compose/GoogleMapComposeFragment.kt @@ -20,8 +20,8 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.compose.material.MaterialTheme -import androidx.compose.material.Text +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.geometry.Offset // For MarkerComposable anchor import androidx.compose.ui.platform.ComposeView diff --git a/maps-app/src/main/java/com/google/maps/android/compose/LocationTrackingActivity.kt b/maps-app/src/main/java/com/google/maps/android/compose/LocationTrackingActivity.kt index abb76ed6..c7f73e0c 100644 --- a/maps-app/src/main/java/com/google/maps/android/compose/LocationTrackingActivity.kt +++ b/maps-app/src/main/java/com/google/maps/android/compose/LocationTrackingActivity.kt @@ -28,8 +28,8 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.foundation.layout.wrapContentSize -import androidx.compose.material.CircularProgressIndicator -import androidx.compose.material.MaterialTheme +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.lifecycle.lifecycleScope @@ -137,7 +137,7 @@ class LocationTrackingActivity : ComponentActivity() { ) { CircularProgressIndicator( modifier = Modifier - .background(MaterialTheme.colors.background) + .background(MaterialTheme.colorScheme.background) .wrapContentSize() ) } diff --git a/maps-app/src/main/java/com/google/maps/android/compose/MapInColumnActivity.kt b/maps-app/src/main/java/com/google/maps/android/compose/MapInColumnActivity.kt index 0e17eaef..84425af1 100644 --- a/maps-app/src/main/java/com/google/maps/android/compose/MapInColumnActivity.kt +++ b/maps-app/src/main/java/com/google/maps/android/compose/MapInColumnActivity.kt @@ -26,10 +26,10 @@ import androidx.compose.foundation.background import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import androidx.compose.material.CircularProgressIndicator -import androidx.compose.material.MaterialTheme -import androidx.compose.material.Surface -import androidx.compose.material.Text +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.ExperimentalComposeUiApi @@ -93,7 +93,7 @@ fun MapInColumn( ) { Surface( modifier = modifier, - color = MaterialTheme.colors.background + color = MaterialTheme.colorScheme.background ) { var isMapLoaded by remember { mutableStateOf(false) } @@ -159,7 +159,7 @@ fun MapInColumn( ) { CircularProgressIndicator( modifier = Modifier - .background(MaterialTheme.colors.background) + .background(MaterialTheme.colorScheme.background) .wrapContentSize() ) } diff --git a/maps-app/src/main/java/com/google/maps/android/compose/MapsInLazyColumnActivity.kt b/maps-app/src/main/java/com/google/maps/android/compose/MapsInLazyColumnActivity.kt index 07f5381f..d6874728 100644 --- a/maps-app/src/main/java/com/google/maps/android/compose/MapsInLazyColumnActivity.kt +++ b/maps-app/src/main/java/com/google/maps/android/compose/MapsInLazyColumnActivity.kt @@ -40,12 +40,11 @@ import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.rememberScrollState -import androidx.compose.material.Card -import androidx.compose.material.CircularProgressIndicator -import androidx.compose.material.LocalTextStyle -import androidx.compose.material.ProvideTextStyle -import androidx.compose.material.Text -import androidx.compose.material.TextButton +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue @@ -215,7 +214,7 @@ private fun MapCard( ) { Card( Modifier.padding(16.dp), - elevation = 4.dp + elevation = CardDefaults.cardElevation(defaultElevation = 4.dp) ) { var mapLoaded by remember { mutableStateOf(false) } var buildingFocused: Boolean? by remember { mutableStateOf(null) } @@ -270,7 +269,7 @@ private fun MapCard( } } - AnimatedVisibility(!mapLoaded, enter = fadeIn(), exit = fadeOut()) { + androidx.compose.animation.AnimatedVisibility(!mapLoaded, enter = fadeIn(), exit = fadeOut()) { Box( Modifier.fillMaxSize(), contentAlignment = Alignment.Center diff --git a/maps-app/src/main/java/com/google/maps/android/compose/RecompositionActivity.kt b/maps-app/src/main/java/com/google/maps/android/compose/RecompositionActivity.kt index 1de9dc2a..5a7eaa89 100644 --- a/maps-app/src/main/java/com/google/maps/android/compose/RecompositionActivity.kt +++ b/maps-app/src/main/java/com/google/maps/android/compose/RecompositionActivity.kt @@ -23,8 +23,8 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.systemBarsPadding -import androidx.compose.material.Button -import androidx.compose.material.Text +import androidx.compose.material3.Button +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf diff --git a/maps-app/src/main/java/com/google/maps/android/compose/ScaleBarActivity.kt b/maps-app/src/main/java/com/google/maps/android/compose/ScaleBarActivity.kt index 2f35fb7d..c1dee50e 100644 --- a/maps-app/src/main/java/com/google/maps/android/compose/ScaleBarActivity.kt +++ b/maps-app/src/main/java/com/google/maps/android/compose/ScaleBarActivity.kt @@ -29,8 +29,8 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.foundation.layout.wrapContentSize -import androidx.compose.material.CircularProgressIndicator -import androidx.compose.material.MaterialTheme +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -59,7 +59,7 @@ class ScaleBarActivity : ComponentActivity() { position = defaultCameraPosition } - val scaleBackground = MaterialTheme.colors.background.copy(alpha = 0.4f) + val scaleBackground = MaterialTheme.colorScheme.background.copy(alpha = 0.4f) val scaleBorderStroke = BorderStroke(width = 1.dp, DarkGray.copy(alpha = 0.2f)) Box( @@ -122,7 +122,7 @@ class ScaleBarActivity : ComponentActivity() { ) { CircularProgressIndicator( modifier = Modifier - .background(MaterialTheme.colors.background) + .background(MaterialTheme.colorScheme.background) .wrapContentSize() ) } diff --git a/maps-app/src/main/java/com/google/maps/android/compose/StreetViewActivity.kt b/maps-app/src/main/java/com/google/maps/android/compose/StreetViewActivity.kt index 1ca54a9b..6260bb75 100644 --- a/maps-app/src/main/java/com/google/maps/android/compose/StreetViewActivity.kt +++ b/maps-app/src/main/java/com/google/maps/android/compose/StreetViewActivity.kt @@ -28,8 +28,8 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.systemBarsPadding -import androidx.compose.material.Switch -import androidx.compose.material.Text +import androidx.compose.material3.Switch +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue diff --git a/maps-app/src/main/java/com/google/maps/android/compose/markerexamples/MarkerClusteringActivity.kt b/maps-app/src/main/java/com/google/maps/android/compose/markerexamples/MarkerClusteringActivity.kt index 039aae58..6ae59919 100644 --- a/maps-app/src/main/java/com/google/maps/android/compose/markerexamples/MarkerClusteringActivity.kt +++ b/maps-app/src/main/java/com/google/maps/android/compose/markerexamples/MarkerClusteringActivity.kt @@ -51,7 +51,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.geometry.Offset import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.platform.LocalWindowInfo import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp @@ -235,17 +235,17 @@ private fun CustomUiClustering(items: List) { @OptIn(MapsComposeExperimentalApi::class) @Composable fun CustomRendererClustering(items: List) { - val configuration = LocalConfiguration.current - val screenHeight = configuration.screenHeightDp.dp - val screenWidth = configuration.screenWidthDp.dp + val windowInfo = LocalWindowInfo.current + val screenWidth = windowInfo.containerSize.width + val screenHeight = windowInfo.containerSize.height val clusterManager = rememberClusterManager() // Here the clusterManager is being customized with a NonHierarchicalViewBasedAlgorithm. // This speeds up by a factor the rendering of items on the screen. clusterManager?.setAlgorithm( NonHierarchicalViewBasedAlgorithm( - screenWidth.value.toInt(), - screenHeight.value.toInt() + screenWidth, + screenHeight ) ) val renderer = rememberClusterRenderer( diff --git a/maps-app/src/main/res/layout/activity_fragment_demo.xml b/maps-app/src/main/res/layout/activity_fragment_demo.xml index 36cbe1d0..72cb216c 100644 --- a/maps-app/src/main/res/layout/activity_fragment_demo.xml +++ b/maps-app/src/main/res/layout/activity_fragment_demo.xml @@ -38,7 +38,7 @@ android:layout_margin="16dp" android:background="#80000000" android:padding="16dp" - android:text="Swipe to switch between views" + android:text="@string/swipe_to_switch" android:textColor="@android:color/white" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/maps-app/src/main/res/values/strings.xml b/maps-app/src/main/res/values/strings.xml index 1147de14..bed44c2e 100644 --- a/maps-app/src/main/res/values/strings.xml +++ b/maps-app/src/main/res/values/strings.xml @@ -87,4 +87,5 @@ Markers UI Integration Performance + Swipe to switch between views