diff --git a/authenticate-with-oauth/src/main/java/com/esri/arcgismaps/sample/authenticatewithoauth/MainActivity.kt b/authenticate-with-oauth/src/main/java/com/esri/arcgismaps/sample/authenticatewithoauth/MainActivity.kt index 784fceabb..016416721 100644 --- a/authenticate-with-oauth/src/main/java/com/esri/arcgismaps/sample/authenticatewithoauth/MainActivity.kt +++ b/authenticate-with-oauth/src/main/java/com/esri/arcgismaps/sample/authenticatewithoauth/MainActivity.kt @@ -22,17 +22,31 @@ import androidx.activity.compose.setContent import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.Composable +import androidx.lifecycle.lifecycleScope import androidx.lifecycle.viewmodel.compose.viewModel +import com.arcgismaps.ArcGISEnvironment import com.arcgismaps.toolkit.authentication.DialogAuthenticator +import com.arcgismaps.toolkit.authentication.signOut import com.esri.arcgismaps.sample.authenticatewithoauth.components.MapViewModel import com.esri.arcgismaps.sample.authenticatewithoauth.screens.MainScreen import com.esri.arcgismaps.sample.sampleslib.theme.SampleAppTheme +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + // Remove any API key already set + // The concurrent use of an API key and user authentication is not supported + ArcGISEnvironment.apiKey = null + + // Sign out of any portals which are already authenticated + lifecycleScope.launch(Dispatchers.Main) { + ArcGISEnvironment.authenticationManager.signOut() + } + setContent { SampleAppTheme { AuthenticateWithOAuthApp() diff --git a/create-and-save-map/src/main/java/com/esri/arcgismaps/sample/createandsavemap/MainActivity.kt b/create-and-save-map/src/main/java/com/esri/arcgismaps/sample/createandsavemap/MainActivity.kt index de0800b9e..0deda02e2 100644 --- a/create-and-save-map/src/main/java/com/esri/arcgismaps/sample/createandsavemap/MainActivity.kt +++ b/create-and-save-map/src/main/java/com/esri/arcgismaps/sample/createandsavemap/MainActivity.kt @@ -22,6 +22,7 @@ import androidx.activity.compose.setContent import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.Composable +import androidx.lifecycle.lifecycleScope import androidx.lifecycle.viewmodel.compose.viewModel import com.arcgismaps.ArcGISEnvironment import com.esri.arcgismaps.sample.sampleslib.theme.SampleAppTheme @@ -29,7 +30,8 @@ import com.esri.arcgismaps.sample.createandsavemap.screens.MainScreen import com.arcgismaps.toolkit.authentication.DialogAuthenticator import com.arcgismaps.toolkit.authentication.signOut import com.esri.arcgismaps.sample.createandsavemap.components.MapViewModel -import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch class MainActivity : ComponentActivity() { @@ -40,18 +42,19 @@ class MainActivity : ComponentActivity() { ArcGISEnvironment.apiKey = null // Sign out of any portals which are already authenticated - runBlocking { + lifecycleScope.launch(Dispatchers.Main) { ArcGISEnvironment.authenticationManager.signOut() - } - setContent { - SampleAppTheme { - SampleApp() + + setContent { + SampleAppTheme { + CreateAndSaveMapApp() + } } } } @Composable - private fun SampleApp() { + private fun CreateAndSaveMapApp() { val mapViewModel: MapViewModel = viewModel() Surface( color = MaterialTheme.colorScheme.background @@ -59,9 +62,9 @@ class MainActivity : ComponentActivity() { MainScreen( sampleName = getString(R.string.app_name) ) - } - // authenticator at bottom can draw over the top of the sample - DialogAuthenticator(authenticatorState = mapViewModel.authenticatorState) + // authenticator at bottom can draw over the top of the sample + DialogAuthenticator(authenticatorState = mapViewModel.authenticatorState) + } } } diff --git a/create-and-save-map/src/main/java/com/esri/arcgismaps/sample/createandsavemap/screens/MainScreen.kt b/create-and-save-map/src/main/java/com/esri/arcgismaps/sample/createandsavemap/screens/MainScreen.kt index c11593f59..d01a0bb4f 100644 --- a/create-and-save-map/src/main/java/com/esri/arcgismaps/sample/createandsavemap/screens/MainScreen.kt +++ b/create-and-save-map/src/main/java/com/esri/arcgismaps/sample/createandsavemap/screens/MainScreen.kt @@ -43,8 +43,10 @@ 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.SheetValue import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Text @@ -87,9 +89,10 @@ fun MainScreen(sampleName: String) { val composableScope = rememberCoroutineScope() val snackbarHostState = remember { SnackbarHostState() } val controlsBottomSheetState = rememberBottomSheetScaffoldState( - bottomSheetState = rememberStandardBottomSheetState(skipHiddenState = false).apply { - composableScope.launch { hide() } - } + bottomSheetState = rememberStandardBottomSheetState( + initialValue = SheetValue.Hidden, + skipHiddenState = false + ) ) Scaffold( @@ -274,7 +277,7 @@ fun FolderDropdown( OutlinedTextField( modifier = Modifier .fillMaxWidth() - .menuAnchor(), + .menuAnchor(MenuAnchorType.PrimaryNotEditable), value = label, onValueChange = { newDescription -> label = newDescription }, label = { Text(text = "Folder:") }, @@ -339,7 +342,7 @@ fun BasemapDropdown( OutlinedTextField( modifier = Modifier .fillMaxWidth() - .menuAnchor(), + .menuAnchor(MenuAnchorType.PrimaryNotEditable), value = basemapStyle, onValueChange = {}, label = { Text(text = "Basemap Style:") }, @@ -390,7 +393,7 @@ fun LayersDropdown( OutlinedTextField( modifier = Modifier .fillMaxWidth() - .menuAnchor(), + .menuAnchor(MenuAnchorType.PrimaryNotEditable), value = "Select...", onValueChange = {}, label = { Text(text = "Operational Layers:") }, diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b7e311268..7001feead 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -16,7 +16,7 @@ ktxAndroidCore = "1.13.0" kotlinCompilerExt = "1.5.12" # Compose versions composeActivityVersion = "1.9.0" -composeBOM = "2024.04.01" +composeBOM = "2024.09.03" # Library versions appcompatVersion = "1.6.1" commonsIoVersion = "2.15.1" diff --git a/show-portal-user-info/src/main/java/com/esri/arcgismaps/sample/showportaluserinfo/MainActivity.kt b/show-portal-user-info/src/main/java/com/esri/arcgismaps/sample/showportaluserinfo/MainActivity.kt index 10fecc3c7..9515c2e53 100644 --- a/show-portal-user-info/src/main/java/com/esri/arcgismaps/sample/showportaluserinfo/MainActivity.kt +++ b/show-portal-user-info/src/main/java/com/esri/arcgismaps/sample/showportaluserinfo/MainActivity.kt @@ -22,18 +22,23 @@ import androidx.activity.compose.setContent import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.Composable -import com.arcgismaps.ApiKey +import androidx.lifecycle.lifecycleScope import com.arcgismaps.ArcGISEnvironment +import com.arcgismaps.toolkit.authentication.signOut import com.esri.arcgismaps.sample.sampleslib.theme.SampleAppTheme import com.esri.arcgismaps.sample.showportaluserinfo.screens.MainScreen +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - // authentication with an API key or named user is - // required to access basemaps and other location services - ArcGISEnvironment.apiKey = ApiKey.create(BuildConfig.API_KEY) + + // Sign out of any portals which are already authenticated + lifecycleScope.launch(Dispatchers.Main) { + ArcGISEnvironment.authenticationManager.signOut() + } setContent { SampleAppTheme {