From 2bb71238bc2b36828c047eaf232e9d47c396ec8f Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Wed, 7 Jun 2023 02:37:43 +0530 Subject: [PATCH] fix(android): dismiss existing snackbars when showing a new one --- .../ui/datatransfer/DataTransferScreen.kt | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/datatransfer/DataTransferScreen.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/datatransfer/DataTransferScreen.kt index 572a7768..56320f58 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/datatransfer/DataTransferScreen.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/datatransfer/DataTransferScreen.kt @@ -55,13 +55,13 @@ private fun ImportOption( val importAction = rememberLauncherForActivityResult(GetContent()) { uri -> if (uri == null) { - coroutineScope.launch { snackbarHostState.showSnackbar("No file selected") } + coroutineScope.launch { snackbarHostState.showSnackbarDismissing("No file selected") } return@rememberLauncherForActivityResult } coroutineScope.launch { context.contentResolver.openInputStream(uri)?.use { stream -> dataTransferRepository.importPosts(stream) - snackbarHostState.showSnackbar("Successfully imported posts") + snackbarHostState.showSnackbarDismissing("Successfully imported posts") } } } @@ -84,13 +84,13 @@ private fun ExportOption( val exportAction = rememberLauncherForActivityResult(CreateDocument(MIME_TYPE)) { uri -> if (uri == null) { - coroutineScope.launch { snackbarHostState.showSnackbar("No file selected") } + coroutineScope.launch { snackbarHostState.showSnackbarDismissing("No file selected") } return@rememberLauncherForActivityResult } coroutineScope.launch { context.contentResolver.openOutputStream(uri)?.use { stream -> dataTransferRepository.exportPosts(stream) - snackbarHostState.showSnackbar("Successfully exported posts") + snackbarHostState.showSnackbarDismissing("Successfully exported posts") } } } @@ -126,3 +126,11 @@ private fun SettingsActionItem( modifier = modifier.clickable { onClick?.invoke() }, ) } + +/** Shows a Snackbar but dismisses any existing ones first. */ +private suspend fun SnackbarHostState.showSnackbarDismissing( + text: String, +) { + currentSnackbarData?.dismiss() + showSnackbar(text) +}