From 2e24d3ea5518ee2ab614e66c6394d865c6539e56 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Thu, 4 Dec 2025 13:59:25 -0800 Subject: [PATCH 1/3] Update project dependencies --- app/build.gradle.kts | 1 + .../java/AndroidLibraryConventionPlugin.kt | 1 + gradle/libs.versions.toml | 47 ++++++++++--------- .../sampleslib/components/DropDownMenuBox.kt | 4 +- .../AddFeaturesWithContingentValuesScreen.kt | 4 +- .../AnimateImagesWithImageOverlayScreen.kt | 4 +- .../ApplyHillshadeRendererToRasterScreen.kt | 4 +- .../BrowseOGCAPIFeatureServiceScreen.kt | 4 +- .../configureclusters/screens/MainScreen.kt | 6 +-- .../createandsavemap/screens/MainScreen.kt | 8 ++-- .../screens/CreateKMLMultiTrackScreen.kt | 4 +- .../components/ShowPopupViewModel.kt | 19 ++++---- .../showpopup/screens/ShowPopupScreen.kt | 10 ++-- .../screens/TraceUtilityNetworkScreen.kt | 4 +- 14 files changed, 65 insertions(+), 55 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 81230c1a3..b52903651 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -86,6 +86,7 @@ dependencies { implementation(libs.androidx.room.ktx) implementation(libs.coil.compose) implementation(libs.coil.network.http) + implementation(libs.androidx.compose.material.icons.extended) annotationProcessor(libs.androidx.room.compiler) ksp(libs.androidx.room.compiler) } diff --git a/build-logic/convention/src/main/java/AndroidLibraryConventionPlugin.kt b/build-logic/convention/src/main/java/AndroidLibraryConventionPlugin.kt index d661944fc..f370d3f0c 100644 --- a/build-logic/convention/src/main/java/AndroidLibraryConventionPlugin.kt +++ b/build-logic/convention/src/main/java/AndroidLibraryConventionPlugin.kt @@ -52,6 +52,7 @@ class AndroidLibraryConventionPlugin : Plugin { implementation(libs.findLibrary("androidx-constraintlayout").get()) implementation(libs.findLibrary("androidx-appcompat").get()) implementation(libs.findLibrary("android-material").get()) + implementation(libs.findLibrary("androidx-compose-material-icons-extended").get()) } } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5ed6a3671..724c1b5ba 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,32 +1,33 @@ [versions] # ArcGIS Maps SDK for Kotlin version -arcgisMapsKotlinVersion = "300.0.0-4757" +arcgisMapsKotlinVersion = "300.0.0-4802" ### Android versions -androidGradlePlugin = "8.12.1" -lifecycle = "2.9.2" -androidTools = "31.12.1" +androidGradlePlugin = "8.13.1" +lifecycle = "2.10.0" +androidTools = "31.13.1" appcompat = "1.7.1" constraintLayoutVersion = "2.2.1" kotlinxSerializationJson = "1.9.0" accompanistSystemuicontroller = "0.36.0" -workVersion = "2.10.3" -datastorePreferences = "1.1.7" -roomVersion = "2.7.2" +workVersion = "2.11.0" +datastorePreferences = "1.2.0" +roomVersion = "2.8.4" ### Kotlin versions -kotlinVersion = "2.2.10" +kotlinVersion = "2.2.21" coreKtx = "1.17.0" -ksp = "2.2.10-2.0.2" -kotlinReflection = "2.2.20" -commonsIoVersion = "2.20.0" +ksp = "2.3.3" +kotlinReflection = "2.2.21" +commonsIoVersion = "2.21.0" ### Compose versions -composeBom = "2025.08.00" -activityCompose = "1.10.1" -material = "1.12.0" -navigationCompose = "2.9.3" +composeBom = "2025.12.00" +activityCompose = "1.12.1" +material = "1.13.0" +navigationCompose = "2.9.6" +materialIconsExt = "1.7.8" ### Testing versions junit = "4.13.2" @@ -34,16 +35,17 @@ junitVersion = "1.3.0" espressoCore = "3.7.0" ### Application Verions -versionCode = "2008000" -versionName = "200.8.0" +versionCode = "3000000" +versionName = "300.0.0" minSdk = "28" targetSdk = "36" ### Third party libraries -arcore = "1.50.0" +arcore = "1.51.0" playServicesLocation = "21.3.0" -navigationFragmentKtx = "2.9.3" -navigationUiKtx = "2.9.3" +navigationFragmentKtx = "2.9.6" +navigationUiKtx = "2.9.6" +coil = "3.3.0" [libraries] @@ -76,6 +78,7 @@ androidx-compose-ui-test-manifest = { group = "androidx.compose.ui", name = "ui- androidx-compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" } androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" } +androidx-compose-material-icons-extended = { group = "androidx.compose.material", name = "material-icons-extended", version.ref = "materialIconsExt"} ### ArcGIS Maps SDK for Kotlin libs arcgis-maps-kotlin = { group = "com.esri", name = "arcgis-maps-kotlin", version.ref = "arcgisMapsKotlinVersion" } @@ -88,8 +91,8 @@ arcgis-maps-kotlin-toolkit-popup = { group = "com.esri", name = "arcgis-maps-kot arcgis-maps-kotlin-toolkit-scalebar = { group = "com.esri", name = "arcgis-maps-kotlin-toolkit-scalebar" } ### Third party libraries -coil-compose = { group = "io.coil-kt.coil3", name = "coil-compose", version = "3.0.0-rc01" } -coil-network-http = { group = "io.coil-kt.coil3", name = "coil-network-okhttp", version = "3.0.0-rc01" } +coil-compose = { group = "io.coil-kt.coil3", name = "coil-compose", version.ref = "coil" } +coil-network-http = { group = "io.coil-kt.coil3", name = "coil-network-okhttp", version.ref = "coil" } ar-core = { group = "com.google.ar", name = "core", version.ref = "arcore" } play-services-location = { group = "com.google.android.gms", name = "play-services-location", version.ref = "playServicesLocation" } diff --git a/samples-lib/src/main/java/com/esri/arcgismaps/sample/sampleslib/components/DropDownMenuBox.kt b/samples-lib/src/main/java/com/esri/arcgismaps/sample/sampleslib/components/DropDownMenuBox.kt index 0ac6d09c5..9e01c4a1d 100644 --- a/samples-lib/src/main/java/com/esri/arcgismaps/sample/sampleslib/components/DropDownMenuBox.kt +++ b/samples-lib/src/main/java/com/esri/arcgismaps/sample/sampleslib/components/DropDownMenuBox.kt @@ -21,10 +21,10 @@ package com.esri.arcgismaps.sample.sampleslib.components import android.content.res.Configuration import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExposedDropdownMenuAnchorType import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.ExposedDropdownMenuDefaults import androidx.compose.material3.HorizontalDivider -import androidx.compose.material3.MenuAnchorType import androidx.compose.material3.Text import androidx.compose.material3.TextField import androidx.compose.runtime.Composable @@ -59,7 +59,7 @@ fun DropDownMenuBox( onValueChange = {}, readOnly = true, trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded) }, - modifier = Modifier.menuAnchor(type = MenuAnchorType.PrimaryNotEditable) + modifier = Modifier.menuAnchor(type = ExposedDropdownMenuAnchorType.PrimaryNotEditable) ) ExposedDropdownMenu( expanded = expanded, diff --git a/samples/add-features-with-contingent-values/src/main/java/com/esri/arcgismaps/sample/addfeatureswithcontingentvalues/screens/AddFeaturesWithContingentValuesScreen.kt b/samples/add-features-with-contingent-values/src/main/java/com/esri/arcgismaps/sample/addfeatureswithcontingentvalues/screens/AddFeaturesWithContingentValuesScreen.kt index d46ca167c..1a5fe92d3 100644 --- a/samples/add-features-with-contingent-values/src/main/java/com/esri/arcgismaps/sample/addfeatureswithcontingentvalues/screens/AddFeaturesWithContingentValuesScreen.kt +++ b/samples/add-features-with-contingent-values/src/main/java/com/esri/arcgismaps/sample/addfeatureswithcontingentvalues/screens/AddFeaturesWithContingentValuesScreen.kt @@ -32,10 +32,10 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Button import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExposedDropdownMenuAnchorType import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.MenuAnchorType import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Scaffold @@ -269,7 +269,7 @@ fun AttributeDropdown( enabled = availableValues.isNotEmpty(), modifier = Modifier .fillMaxWidth() - .menuAnchor(type = MenuAnchorType.PrimaryNotEditable), + .menuAnchor(type = ExposedDropdownMenuAnchorType.PrimaryNotEditable), value = textValue ?: "", onValueChange = {}, label = { Text(attributeName) }, diff --git a/samples/animate-images-with-image-overlay/src/main/java/com/esri/arcgismaps/sample/animateimageswithimageoverlay/screens/AnimateImagesWithImageOverlayScreen.kt b/samples/animate-images-with-image-overlay/src/main/java/com/esri/arcgismaps/sample/animateimageswithimageoverlay/screens/AnimateImagesWithImageOverlayScreen.kt index b565c8f01..7db163d20 100644 --- a/samples/animate-images-with-image-overlay/src/main/java/com/esri/arcgismaps/sample/animateimageswithimageoverlay/screens/AnimateImagesWithImageOverlayScreen.kt +++ b/samples/animate-images-with-image-overlay/src/main/java/com/esri/arcgismaps/sample/animateimageswithimageoverlay/screens/AnimateImagesWithImageOverlayScreen.kt @@ -30,13 +30,13 @@ import androidx.compose.material.icons.filled.Settings import androidx.compose.material3.Button import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExposedDropdownMenuAnchorType import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.ExposedDropdownMenuDefaults import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.MenuAnchorType import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.Scaffold import androidx.compose.material3.Slider @@ -200,7 +200,7 @@ private fun ImageOverlayMenu( onValueChange = {}, readOnly = true, trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded) }, - modifier = Modifier.menuAnchor(type = MenuAnchorType.PrimaryNotEditable) + modifier = Modifier.menuAnchor(type = ExposedDropdownMenuAnchorType.PrimaryNotEditable) ) ExposedDropdownMenu( expanded = expanded, diff --git a/samples/apply-hillshade-renderer-to-raster/src/main/java/com/esri/arcgismaps/sample/applyhillshaderenderertoraster/screens/ApplyHillshadeRendererToRasterScreen.kt b/samples/apply-hillshade-renderer-to-raster/src/main/java/com/esri/arcgismaps/sample/applyhillshaderenderertoraster/screens/ApplyHillshadeRendererToRasterScreen.kt index 555ca2959..b7b1ee854 100644 --- a/samples/apply-hillshade-renderer-to-raster/src/main/java/com/esri/arcgismaps/sample/applyhillshaderenderertoraster/screens/ApplyHillshadeRendererToRasterScreen.kt +++ b/samples/apply-hillshade-renderer-to-raster/src/main/java/com/esri/arcgismaps/sample/applyhillshaderenderertoraster/screens/ApplyHillshadeRendererToRasterScreen.kt @@ -30,13 +30,13 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Settings import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExposedDropdownMenuAnchorType import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.ExposedDropdownMenuDefaults import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.MenuAnchorType import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.Scaffold import androidx.compose.material3.Slider @@ -207,7 +207,7 @@ fun HillshadeRendererOptions( trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded) }, modifier = Modifier .fillMaxWidth() - .menuAnchor(type = MenuAnchorType.PrimaryNotEditable) + .menuAnchor(type = ExposedDropdownMenuAnchorType.PrimaryNotEditable) ) ExposedDropdownMenu( expanded = expanded, diff --git a/samples/browse-ogc-api-feature-service/src/main/java/com/esri/arcgismaps/sample/browseogcapifeatureservice/screens/BrowseOGCAPIFeatureServiceScreen.kt b/samples/browse-ogc-api-feature-service/src/main/java/com/esri/arcgismaps/sample/browseogcapifeatureservice/screens/BrowseOGCAPIFeatureServiceScreen.kt index 9a1577684..843902e7f 100644 --- a/samples/browse-ogc-api-feature-service/src/main/java/com/esri/arcgismaps/sample/browseogcapifeatureservice/screens/BrowseOGCAPIFeatureServiceScreen.kt +++ b/samples/browse-ogc-api-feature-service/src/main/java/com/esri/arcgismaps/sample/browseogcapifeatureservice/screens/BrowseOGCAPIFeatureServiceScreen.kt @@ -28,10 +28,10 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExposedDropdownMenuAnchorType import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.ExposedDropdownMenuDefaults import androidx.compose.material3.HorizontalDivider -import androidx.compose.material3.MenuAnchorType import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface @@ -146,7 +146,7 @@ private fun LayerPickerBar( label = { Text("Layers") }, trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded) }, modifier = Modifier - .menuAnchor(MenuAnchorType.PrimaryNotEditable) + .menuAnchor(ExposedDropdownMenuAnchorType.PrimaryNotEditable) .fillMaxWidth() ) ExposedDropdownMenu( diff --git a/samples/configure-clusters/src/main/java/com/esri/arcgismaps/sample/configureclusters/screens/MainScreen.kt b/samples/configure-clusters/src/main/java/com/esri/arcgismaps/sample/configureclusters/screens/MainScreen.kt index e5b516c22..02f2a2333 100644 --- a/samples/configure-clusters/src/main/java/com/esri/arcgismaps/sample/configureclusters/screens/MainScreen.kt +++ b/samples/configure-clusters/src/main/java/com/esri/arcgismaps/sample/configureclusters/screens/MainScreen.kt @@ -34,6 +34,7 @@ import androidx.compose.material.icons.filled.Settings import androidx.compose.material.icons.rounded.Close import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExposedDropdownMenuAnchorType import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.ExposedDropdownMenuDefaults import androidx.compose.material3.FloatingActionButton @@ -41,7 +42,6 @@ import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.MenuAnchorType import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.Scaffold import androidx.compose.material3.SheetState @@ -268,7 +268,7 @@ private fun ClusterRadiusControls( onValueChange = {}, readOnly = true, trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded) }, - modifier = Modifier.menuAnchor(type = MenuAnchorType.PrimaryNotEditable) + modifier = Modifier.menuAnchor(type = ExposedDropdownMenuAnchorType.PrimaryNotEditable) ) ExposedDropdownMenu( expanded = expanded, @@ -322,7 +322,7 @@ private fun ClusterMaxScaleControls( onValueChange = {}, readOnly = true, trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded) }, - modifier = Modifier.menuAnchor(type = MenuAnchorType.PrimaryNotEditable) + modifier = Modifier.menuAnchor(type = ExposedDropdownMenuAnchorType.PrimaryNotEditable) ) ExposedDropdownMenu( expanded = expanded, diff --git a/samples/create-and-save-map/src/main/java/com/esri/arcgismaps/sample/createandsavemap/screens/MainScreen.kt b/samples/create-and-save-map/src/main/java/com/esri/arcgismaps/sample/createandsavemap/screens/MainScreen.kt index 35bd75098..1f2637084 100644 --- a/samples/create-and-save-map/src/main/java/com/esri/arcgismaps/sample/createandsavemap/screens/MainScreen.kt +++ b/samples/create-and-save-map/src/main/java/com/esri/arcgismaps/sample/createandsavemap/screens/MainScreen.kt @@ -37,13 +37,13 @@ import androidx.compose.material3.Button import androidx.compose.material3.Checkbox import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExposedDropdownMenuAnchorType import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.ExposedDropdownMenuDefaults import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.MenuAnchorType import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarHost @@ -275,7 +275,7 @@ fun FolderDropdown( OutlinedTextField( modifier = Modifier .fillMaxWidth() - .menuAnchor(type = MenuAnchorType.PrimaryNotEditable), + .menuAnchor(type = ExposedDropdownMenuAnchorType.PrimaryNotEditable), value = label, onValueChange = { newDescription -> label = newDescription }, label = { Text(text = "Folder:") }, @@ -340,7 +340,7 @@ fun BasemapDropdown( OutlinedTextField( modifier = Modifier .fillMaxWidth() - .menuAnchor(type = MenuAnchorType.PrimaryNotEditable), + .menuAnchor(type = ExposedDropdownMenuAnchorType.PrimaryNotEditable), value = basemapStyle, onValueChange = {}, label = { Text(text = "Basemap Style:") }, @@ -391,7 +391,7 @@ fun LayersDropdown( OutlinedTextField( modifier = Modifier .fillMaxWidth() - .menuAnchor(type = MenuAnchorType.PrimaryNotEditable), + .menuAnchor(type = ExposedDropdownMenuAnchorType.PrimaryNotEditable), value = "Select...", onValueChange = {}, label = { Text(text = "Operational Layers:") }, diff --git a/samples/create-kml-multi-track/src/main/java/com/esri/arcgismaps/sample/createkmlmultitrack/screens/CreateKMLMultiTrackScreen.kt b/samples/create-kml-multi-track/src/main/java/com/esri/arcgismaps/sample/createkmlmultitrack/screens/CreateKMLMultiTrackScreen.kt index 278edbb31..792bccc5f 100644 --- a/samples/create-kml-multi-track/src/main/java/com/esri/arcgismaps/sample/createkmlmultitrack/screens/CreateKMLMultiTrackScreen.kt +++ b/samples/create-kml-multi-track/src/main/java/com/esri/arcgismaps/sample/createkmlmultitrack/screens/CreateKMLMultiTrackScreen.kt @@ -32,13 +32,13 @@ import androidx.compose.material.icons.filled.Refresh import androidx.compose.material3.Button import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExposedDropdownMenuAnchorType import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.ExposedDropdownMenuDefaults import androidx.compose.material3.FilledTonalIconButton import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.MenuAnchorType import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface import androidx.compose.material3.Text @@ -285,7 +285,7 @@ fun TrackBrowseOptions( onValueChange = {}, readOnly = true, trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded) }, - modifier = Modifier.menuAnchor(type = MenuAnchorType.PrimaryNotEditable) + modifier = Modifier.menuAnchor(type = ExposedDropdownMenuAnchorType.PrimaryNotEditable) ) ExposedDropdownMenu( expanded = expanded, diff --git a/samples/show-popup/src/main/java/com/esri/arcgismaps/sample/showpopup/components/ShowPopupViewModel.kt b/samples/show-popup/src/main/java/com/esri/arcgismaps/sample/showpopup/components/ShowPopupViewModel.kt index 30ff475f5..b75c98cf9 100644 --- a/samples/show-popup/src/main/java/com/esri/arcgismaps/sample/showpopup/components/ShowPopupViewModel.kt +++ b/samples/show-popup/src/main/java/com/esri/arcgismaps/sample/showpopup/components/ShowPopupViewModel.kt @@ -17,9 +17,6 @@ package com.esri.arcgismaps.sample.showpopup.components import android.app.Application -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.setValue import androidx.compose.ui.unit.dp import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.viewModelScope @@ -28,11 +25,13 @@ import com.arcgismaps.geometry.GeometryType import com.arcgismaps.mapping.ArcGISMap import com.arcgismaps.mapping.PortalItem import com.arcgismaps.mapping.layers.FeatureLayer -import com.arcgismaps.mapping.popup.Popup import com.arcgismaps.mapping.view.SingleTapConfirmedEvent import com.arcgismaps.portal.Portal import com.arcgismaps.toolkit.geoviewcompose.MapViewProxy +import com.arcgismaps.toolkit.popup.PopupState import com.esri.arcgismaps.sample.sampleslib.components.MessageDialogViewModel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch class ShowPopupViewModel(application: Application) : AndroidViewModel(application) { @@ -55,9 +54,10 @@ class ShowPopupViewModel(application: Application) : AndroidViewModel(applicatio } } - // Popup that gets passed to the main screen composable - var popup: Popup? by mutableStateOf(null) - private set + // PopupState flow that gets passed to the main screen composable + private var _popupState = MutableStateFlow(null) + val popupState = _popupState.asStateFlow() + // Keep track of the identified feature private var identifiedFeature: Feature? = null @@ -87,11 +87,12 @@ class ShowPopupViewModel(application: Application) : AndroidViewModel(applicatio tolerance = 12.dp, returnPopupsOnly = true ).onSuccess { result -> - popup = result.popups.first().also { popup -> + val popup = result.popups.first().also { popup -> identifiedFeature = (popup.geoElement as Feature).also { identifiedFeature -> featureLayer.selectFeature(identifiedFeature) } } + _popupState.value = PopupState(popup,viewModelScope) }.onFailure { error -> messageDialogVM.showMessageDialog( title = "Failed to identify: ${error.message}", @@ -105,7 +106,7 @@ class ShowPopupViewModel(application: Application) : AndroidViewModel(applicatio * Dismiss the popup and unselect the identified feature. */ fun onDismissRequest() { - popup = null + _popupState.value = null identifiedFeature?.let { featureLayer.unselectFeature(it) } } } diff --git a/samples/show-popup/src/main/java/com/esri/arcgismaps/sample/showpopup/screens/ShowPopupScreen.kt b/samples/show-popup/src/main/java/com/esri/arcgismaps/sample/showpopup/screens/ShowPopupScreen.kt index 93ad3726f..a004a5881 100644 --- a/samples/show-popup/src/main/java/com/esri/arcgismaps/sample/showpopup/screens/ShowPopupScreen.kt +++ b/samples/show-popup/src/main/java/com/esri/arcgismaps/sample/showpopup/screens/ShowPopupScreen.kt @@ -25,7 +25,9 @@ import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.Scaffold import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier +import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewmodel.compose.viewModel import com.arcgismaps.toolkit.geoviewcompose.MapView import com.arcgismaps.toolkit.popup.Popup @@ -42,6 +44,7 @@ fun ShowPopupScreen(sampleName: String) { val mapViewModel: ShowPopupViewModel = viewModel() val sheetState = rememberModalBottomSheetState() + val popupState by mapViewModel.popupState.collectAsStateWithLifecycle() Scaffold( topBar = { SampleTopAppBar(title = sampleName) }, @@ -59,14 +62,15 @@ fun ShowPopupScreen(sampleName: String) { mapViewProxy = mapViewModel.mapViewProxy, onSingleTapConfirmed = mapViewModel::identifyForPopup ) - mapViewModel.popup?.let { popup -> + popupState?.let { popupState -> ModalBottomSheet( modifier = Modifier.wrapContentSize(), - onDismissRequest = { mapViewModel.onDismissRequest() }, + onDismissRequest = mapViewModel::onDismissRequest, sheetState = sheetState ) { Popup( - popup = popup, + popupState = popupState, + onDismiss = mapViewModel::onDismissRequest, modifier = Modifier.fillMaxSize() ) } diff --git a/samples/trace-utility-network/src/main/java/com/esri/arcgismaps/sample/traceutilitynetwork/screens/TraceUtilityNetworkScreen.kt b/samples/trace-utility-network/src/main/java/com/esri/arcgismaps/sample/traceutilitynetwork/screens/TraceUtilityNetworkScreen.kt index 4b3798936..b703f86fd 100644 --- a/samples/trace-utility-network/src/main/java/com/esri/arcgismaps/sample/traceutilitynetwork/screens/TraceUtilityNetworkScreen.kt +++ b/samples/trace-utility-network/src/main/java/com/esri/arcgismaps/sample/traceutilitynetwork/screens/TraceUtilityNetworkScreen.kt @@ -37,13 +37,13 @@ import androidx.compose.material3.BasicAlertDialog import androidx.compose.material3.Button import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExposedDropdownMenuAnchorType import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.ExposedDropdownMenuDefaults import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.MenuAnchorType import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Scaffold import androidx.compose.material3.SegmentedButton @@ -318,7 +318,7 @@ fun ExposedDropdownMenuBoxWithTraceTypes( ) { TextField( modifier = Modifier - .menuAnchor(MenuAnchorType.PrimaryNotEditable) + .menuAnchor(ExposedDropdownMenuAnchorType.PrimaryNotEditable) .fillMaxWidth(), label = { Text("Trace Type") }, value = selectedTraceName, From c2488f820cee3a4249d682dfea37a6bb42de08c8 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Fri, 12 Dec 2025 12:59:00 -0800 Subject: [PATCH 2/3] Use newer dependency versions --- gradle/libs.versions.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 724c1b5ba..955da147e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,12 +1,12 @@ [versions] # ArcGIS Maps SDK for Kotlin version -arcgisMapsKotlinVersion = "300.0.0-4802" +arcgisMapsKotlinVersion = "300.0.0-4810" ### Android versions -androidGradlePlugin = "8.13.1" +androidGradlePlugin = "8.13.2" lifecycle = "2.10.0" -androidTools = "31.13.1" +androidTools = "31.13.2" appcompat = "1.7.1" constraintLayoutVersion = "2.2.1" kotlinxSerializationJson = "1.9.0" From 9209a7a7d6d5b6c08160ddae5cbee7e20568d6a4 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Wed, 17 Dec 2025 15:45:09 -0800 Subject: [PATCH 3/3] Test with build 4816 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 955da147e..062b9051b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] # ArcGIS Maps SDK for Kotlin version -arcgisMapsKotlinVersion = "300.0.0-4810" +arcgisMapsKotlinVersion = "300.0.0-4816" ### Android versions androidGradlePlugin = "8.13.2"