From 35c59754b52acb7642f36338619be0544f5cb76e Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Sat, 5 Aug 2023 15:16:09 +0200 Subject: [PATCH] feat: Add rememberFileSaverDialog --- .../myzel394/locationtest/ui/utils/file.kt | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 app/src/main/java/app/myzel394/locationtest/ui/utils/file.kt diff --git a/app/src/main/java/app/myzel394/locationtest/ui/utils/file.kt b/app/src/main/java/app/myzel394/locationtest/ui/utils/file.kt new file mode 100644 index 0000000..3502e59 --- /dev/null +++ b/app/src/main/java/app/myzel394/locationtest/ui/utils/file.kt @@ -0,0 +1,31 @@ +package app.myzel394.locationtest.ui.utils + +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext +import java.io.File + +@Composable +fun rememberFileSaverDialog(mimeType: String): ((File) -> Unit) { + val context = LocalContext.current + + var file: File? = null + + val launcher = rememberLauncherForActivityResult(contract = ActivityResultContracts.CreateDocument(mimeType)) { + it?.let { + context.contentResolver.openOutputStream(it)?.use { outputStream -> + file!!.inputStream().use { inputStream -> + inputStream.copyTo(outputStream) + } + } + } + + file = null + } + + return { + file = it + launcher.launch(it.name) + } +}