diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/ModalView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/ModalView.kt index f417fb3d93..f73cab9b22 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/ModalView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/ModalView.kt @@ -37,6 +37,10 @@ class ModalManager { showCustomModal { close -> ModalView(close, content = content) } } + fun showModalCloseable(content: @Composable (close: () -> Unit) -> Unit) { + showCustomModal { close -> ModalView(close, content = { content(close) }) } + } + fun showCustomModal(modal: @Composable (close: () -> Unit) -> Unit) { Log.d(TAG, "ModalManager.showModal") modalViews.add(modal) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/newchat/ConnectViaLinkView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/newchat/ConnectViaLinkView.kt index 892ff5672f..590340ef3f 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/newchat/ConnectViaLinkView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/newchat/ConnectViaLinkView.kt @@ -19,7 +19,7 @@ enum class ConnectViaLinkTab { } @Composable -fun ConnectViaLinkView(m: ChatModel) { +fun ConnectViaLinkView(m: ChatModel, close: () -> Unit) { val selection = remember { mutableStateOf( runCatching { ConnectViaLinkTab.valueOf(m.controller.appPrefs.connectViaLinkTab.get()!!) }.getOrDefault(ConnectViaLinkTab.SCAN) @@ -38,10 +38,10 @@ fun ConnectViaLinkView(m: ChatModel) { Column(Modifier.weight(1f)) { when (selection.value) { ConnectViaLinkTab.SCAN -> { - ScanToConnectView(m) + ScanToConnectView(m, close) } ConnectViaLinkTab.PASTE -> { - PasteToConnectView(m) + PasteToConnectView(m, close) } } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/newchat/NewChatSheet.kt b/apps/android/app/src/main/java/chat/simplex/app/views/newchat/NewChatSheet.kt index 62cec2073c..813b2c66a0 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/newchat/NewChatSheet.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/newchat/NewChatSheet.kt @@ -33,7 +33,7 @@ fun NewChatSheet(chatModel: ChatModel, newChatCtrl: ScaffoldController) { }, connectViaLink = { newChatCtrl.collapse() - ModalManager.shared.showModal { ConnectViaLinkView(chatModel) } + ModalManager.shared.showModalCloseable { close -> ConnectViaLinkView(chatModel, close) } }, createGroup = { newChatCtrl.collapse() diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/newchat/PasteToConnect.kt b/apps/android/app/src/main/java/chat/simplex/app/views/newchat/PasteToConnect.kt index 2b0f8bd0b7..7a599fd37e 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/newchat/PasteToConnect.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/newchat/PasteToConnect.kt @@ -24,7 +24,7 @@ import chat.simplex.app.ui.theme.SimpleXTheme import chat.simplex.app.views.helpers.* @Composable -fun PasteToConnectView(chatModel: ChatModel) { +fun PasteToConnectView(chatModel: ChatModel, close: () -> Unit) { val connectionLink = remember { mutableStateOf("") } val context = LocalContext.current val clipboard = getSystemService(context, ClipboardManager::class.java) @@ -38,7 +38,9 @@ fun PasteToConnectView(chatModel: ChatModel) { try { val uri = Uri.parse(connReqUri) withUriAction(uri) { action -> - connectViaUri(chatModel, action, uri) + if (connectViaUri(chatModel, action, uri)) { + close() + } } } catch (e: RuntimeException) { AlertManager.shared.showAlertMsg( diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/newchat/ScanToConnectView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/newchat/ScanToConnectView.kt index 98b487dc81..5416006a88 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/newchat/ScanToConnectView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/newchat/ScanToConnectView.kt @@ -20,7 +20,7 @@ import chat.simplex.app.views.helpers.* import com.google.accompanist.permissions.rememberPermissionState @Composable -fun ScanToConnectView(chatModel: ChatModel) { +fun ScanToConnectView(chatModel: ChatModel, close: () -> Unit) { val cameraPermissionState = rememberPermissionState(permission = Manifest.permission.CAMERA) LaunchedEffect(Unit) { cameraPermissionState.launchPermissionRequest() @@ -32,7 +32,9 @@ fun ScanToConnectView(chatModel: ChatModel) { try { val uri = Uri.parse(connReqUri) withUriAction(uri) { action -> - connectViaUri(chatModel, action, uri) + if (connectViaUri(chatModel, action, uri)) { + close() + } } } catch (e: RuntimeException) { AlertManager.shared.showAlertMsg( @@ -57,7 +59,7 @@ fun withUriAction(uri: Uri, run: suspend (String) -> Unit) { } } -suspend fun connectViaUri(chatModel: ChatModel, action: String, uri: Uri) { +suspend fun connectViaUri(chatModel: ChatModel, action: String, uri: Uri): Boolean { val r = chatModel.controller.apiConnect(uri.toString()) if (r) { AlertManager.shared.showAlertMsg( @@ -67,6 +69,7 @@ suspend fun connectViaUri(chatModel: ChatModel, action: String, uri: Uri) { else generalGetString(R.string.you_will_be_connected_when_your_contacts_device_is_online) ) } + return r } @Composable