From 51dbb6686be6969f58f1e2b4c49e20f05ba72263 Mon Sep 17 00:00:00 2001 From: soupslurpr <92235850+soupslurpr@users.noreply.github.com> Date: Mon, 16 Oct 2023 01:05:57 -0700 Subject: [PATCH 1/3] Relocate save as parameters to actual place they are in-app --- .../dev/soupslurpr/beautyxt/BeauTyXT.kt | 166 +++++++++--------- 1 file changed, 83 insertions(+), 83 deletions(-) diff --git a/app/src/main/kotlin/dev/soupslurpr/beautyxt/BeauTyXT.kt b/app/src/main/kotlin/dev/soupslurpr/beautyxt/BeauTyXT.kt index fbb4d31..36f88f7 100644 --- a/app/src/main/kotlin/dev/soupslurpr/beautyxt/BeauTyXT.kt +++ b/app/src/main/kotlin/dev/soupslurpr/beautyxt/BeauTyXT.kt @@ -115,13 +115,6 @@ fun BeauTyXTAppBar( onExportDropdownMenuItemClicked: () -> Unit, onExportDropdownMenuDismissRequest: () -> Unit, - saveAsShown: Boolean, - onSaveAsDialogDismissRequest: () -> Unit, - onSaveAsExportDropdownMenuItemClicked: () -> Unit, - saveAsDialogContent: @Composable () -> Unit, - saveAsDialogConfirmButton: @Composable () -> Unit, - saveAsDialogDismissButton: @Composable () -> Unit, - printOptionsDialogShown: Boolean, onPrintOptionsDialogDismissRequest: () -> Unit, onPrintOptionsExportDropdownMenuItemClicked: () -> Unit, @@ -129,6 +122,13 @@ fun BeauTyXTAppBar( printOptionsDialogConfirmButton: @Composable () -> Unit, printOptionsDialogDismissButton: @Composable () -> Unit, + saveAsShown: Boolean, + onSaveAsDialogDismissRequest: () -> Unit, + onSaveAsExportDropdownMenuItemClicked: () -> Unit, + saveAsDialogContent: @Composable () -> Unit, + saveAsDialogConfirmButton: @Composable () -> Unit, + saveAsDialogDismissButton: @Composable () -> Unit, + deleteFileDialogShown: Boolean, onDeleteFileDialogDismissRequest: () -> Unit, onDeleteFileDropdownMenuItemClicked: () -> Unit, @@ -137,7 +137,7 @@ fun BeauTyXTAppBar( deleteFileDialogDismissButton: @Composable () -> Unit, readOnly: Boolean, - mimeType: String?, + mimeType: String, onPreviewMarkdownRenderedToFullscreenButtonClicked: () -> Unit, modifier: Modifier ) { @@ -349,7 +349,7 @@ fun FileInfoDialogItem(info: String, value: String) { } @Composable -fun SaveAsDialogItem( +fun FileTypeSelectionDialogItem( fileTypeText: String, selected: Boolean, onClickRadioButton: () -> Unit @@ -541,80 +541,6 @@ fun BeauTyXTApp( }, onExportDropdownMenuDismissRequest = { exportDropdownMenuShown = false }, - saveAsShown = saveAsShown, - onSaveAsDialogDismissRequest = { saveAsShown = false }, - onSaveAsExportDropdownMenuItemClicked = { - saveAsSelectedFileType = "" - saveAsShown = !saveAsShown - dropDownMenuShown = false - exportDropdownMenuShown = false - }, - saveAsDialogContent = { - Column( - modifier = Modifier - .selectableGroup() - .fillMaxWidth(), - verticalArrangement = Arrangement.spacedBy(24.dp) - ) { - if (fileUiState.mimeType.value == mimeTypeMarkdown) { - SaveAsDialogItem( - fileTypeText = stringResource(R.string.html), - selected = saveAsSelectedFileType == mimeTypeHtml, - onClickRadioButton = { - saveAsSelectedFileType = mimeTypeHtml - } - ) - } - if ((preferencesUiState.experimentalFeatureExportMarkdownToDocx.second.value and - (fileUiState.mimeType.value == mimeTypeMarkdown)) or - (fileUiState.mimeType.value != mimeTypeMarkdown) - ) { - SaveAsDialogItem( - fileTypeText = stringResource(R.string.docx), - selected = saveAsSelectedFileType == mimeTypeDocx, - onClickRadioButton = { - saveAsSelectedFileType = mimeTypeDocx - } - ) - } - } - - }, - saveAsDialogConfirmButton = { - TextButton( - onClick = { - when (saveAsSelectedFileType) { - mimeTypeHtml -> saveAsHtmlFileLauncher.launch( - fileUiState.name.value.substringBeforeLast(".") - ) - - mimeTypeDocx -> saveAsDocxFileLauncher.launch( - fileUiState.name.value.substringBeforeLast(".") - ) - } - saveAsShown = false - }, - enabled = saveAsSelectedFileType != "", - content = { - Text( - text = stringResource(R.string.confirm_) - ) - } - ) - }, - saveAsDialogDismissButton = { - TextButton( - onClick = { - saveAsShown = false - }, - content = { - Text( - text = stringResource(R.string.cancel) - ) - } - ) - }, - printOptionsDialogShown = printOptionsDialogShown, onPrintOptionsDialogDismissRequest = { printOptionsDialogShown = false }, onPrintOptionsExportDropdownMenuItemClicked = { @@ -851,6 +777,80 @@ ${ ) }, + saveAsShown = saveAsShown, + onSaveAsDialogDismissRequest = { saveAsShown = false }, + onSaveAsExportDropdownMenuItemClicked = { + saveAsSelectedFileType = "" + saveAsShown = !saveAsShown + dropDownMenuShown = false + exportDropdownMenuShown = false + }, + saveAsDialogContent = { + Column( + modifier = Modifier + .selectableGroup() + .fillMaxWidth(), + verticalArrangement = Arrangement.spacedBy(24.dp) + ) { + if (fileUiState.mimeType.value == mimeTypeMarkdown) { + FileTypeSelectionDialogItem( + fileTypeText = stringResource(R.string.html), + selected = saveAsSelectedFileType == mimeTypeHtml, + onClickRadioButton = { + saveAsSelectedFileType = mimeTypeHtml + } + ) + } + if ((preferencesUiState.experimentalFeatureExportMarkdownToDocx.second.value and + (fileUiState.mimeType.value == mimeTypeMarkdown)) or + (fileUiState.mimeType.value != mimeTypeMarkdown) + ) { + FileTypeSelectionDialogItem( + fileTypeText = stringResource(R.string.docx), + selected = saveAsSelectedFileType == mimeTypeDocx, + onClickRadioButton = { + saveAsSelectedFileType = mimeTypeDocx + } + ) + } + } + + }, + saveAsDialogConfirmButton = { + TextButton( + onClick = { + when (saveAsSelectedFileType) { + mimeTypeHtml -> saveAsHtmlFileLauncher.launch( + fileUiState.name.value.substringBeforeLast(".") + ) + + mimeTypeDocx -> saveAsDocxFileLauncher.launch( + fileUiState.name.value.substringBeforeLast(".") + ) + } + saveAsShown = false + }, + enabled = saveAsSelectedFileType != "", + content = { + Text( + text = stringResource(R.string.confirm_) + ) + } + ) + }, + saveAsDialogDismissButton = { + TextButton( + onClick = { + saveAsShown = false + }, + content = { + Text( + text = stringResource(R.string.cancel) + ) + } + ) + }, + deleteFileDialogShown = deleteFileDialogShown, onDeleteFileDialogDismissRequest = { deleteFileDialogShown = false }, onDeleteFileDropdownMenuItemClicked = { From 1a3f78662b8d4494bf5ccdc83ef62cc8284b9d73 Mon Sep 17 00:00:00 2001 From: soupslurpr <92235850+soupslurpr@users.noreply.github.com> Date: Mon, 16 Oct 2023 01:09:39 -0700 Subject: [PATCH 2/3] Rename saveAsShown parameter to saveAsDialogShown This fits in with the other parameter names. --- app/src/main/kotlin/dev/soupslurpr/beautyxt/BeauTyXT.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/dev/soupslurpr/beautyxt/BeauTyXT.kt b/app/src/main/kotlin/dev/soupslurpr/beautyxt/BeauTyXT.kt index 36f88f7..55c0ba3 100644 --- a/app/src/main/kotlin/dev/soupslurpr/beautyxt/BeauTyXT.kt +++ b/app/src/main/kotlin/dev/soupslurpr/beautyxt/BeauTyXT.kt @@ -122,7 +122,7 @@ fun BeauTyXTAppBar( printOptionsDialogConfirmButton: @Composable () -> Unit, printOptionsDialogDismissButton: @Composable () -> Unit, - saveAsShown: Boolean, + saveAsDialogShown: Boolean, onSaveAsDialogDismissRequest: () -> Unit, onSaveAsExportDropdownMenuItemClicked: () -> Unit, saveAsDialogContent: @Composable () -> Unit, @@ -268,7 +268,7 @@ fun BeauTyXTAppBar( } ) } - if (saveAsShown) { + if (saveAsDialogShown) { AlertDialog( onDismissRequest = onSaveAsDialogDismissRequest, confirmButton = saveAsDialogConfirmButton, @@ -777,7 +777,7 @@ ${ ) }, - saveAsShown = saveAsShown, + saveAsDialogShown = saveAsShown, onSaveAsDialogDismissRequest = { saveAsShown = false }, onSaveAsExportDropdownMenuItemClicked = { saveAsSelectedFileType = "" From b6f38e9235389ef9143234676e52524add545ee5 Mon Sep 17 00:00:00 2001 From: soupslurpr <92235850+soupslurpr@users.noreply.github.com> Date: Mon, 16 Oct 2023 04:28:51 -0700 Subject: [PATCH 3/3] Add share dropdownmenuitem --- .../dev/soupslurpr/beautyxt/BeauTyXT.kt | 84 +++++++++++++++---- app/src/main/res/values/strings.xml | 1 + 2 files changed, 70 insertions(+), 15 deletions(-) diff --git a/app/src/main/kotlin/dev/soupslurpr/beautyxt/BeauTyXT.kt b/app/src/main/kotlin/dev/soupslurpr/beautyxt/BeauTyXT.kt index 55c0ba3..7b36321 100644 --- a/app/src/main/kotlin/dev/soupslurpr/beautyxt/BeauTyXT.kt +++ b/app/src/main/kotlin/dev/soupslurpr/beautyxt/BeauTyXT.kt @@ -1,6 +1,7 @@ package dev.soupslurpr.beautyxt import android.content.Context +import android.content.Intent import android.os.Build import android.print.PrintAttributes import android.print.PrintManager @@ -29,6 +30,7 @@ import androidx.compose.material.icons.filled.Delete import androidx.compose.material.icons.filled.Info import androidx.compose.material.icons.filled.MoreVert import androidx.compose.material.icons.filled.Settings +import androidx.compose.material.icons.filled.Share import androidx.compose.material3.AlertDialog import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenuItem @@ -58,6 +60,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import androidx.core.app.ActivityOptionsCompat +import androidx.core.content.ContextCompat.startActivity import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.currentBackStackEntryAsState @@ -129,6 +132,8 @@ fun BeauTyXTAppBar( saveAsDialogConfirmButton: @Composable () -> Unit, saveAsDialogDismissButton: @Composable () -> Unit, + onShareExportDropdownMenuItemClicked: () -> Unit, + deleteFileDialogShown: Boolean, onDeleteFileDialogDismissRequest: () -> Unit, onDeleteFileDropdownMenuItemClicked: () -> Unit, @@ -267,21 +272,16 @@ fun BeauTyXTAppBar( Icon(painter = painterResource(R.drawable.baseline_save_as_24), contentDescription = null) } ) - } - if (saveAsDialogShown) { - AlertDialog( - onDismissRequest = onSaveAsDialogDismissRequest, - confirmButton = saveAsDialogConfirmButton, - dismissButton = saveAsDialogDismissButton, - title = { + DropdownMenuItem( + text = { Text( - text = stringResource(R.string.save_as), - style = typography.headlineSmall, - modifier = Modifier.align(Alignment.CenterVertically) + text = stringResource(R.string.share), + style = dropDownMenuItemTextStyle ) }, - text = { - saveAsDialogContent() + onClick = { onShareExportDropdownMenuItemClicked() }, + leadingIcon = { + Icon(imageVector = Icons.Filled.Share, contentDescription = null) } ) } @@ -318,6 +318,23 @@ fun BeauTyXTAppBar( } ) } + if (saveAsDialogShown) { + AlertDialog( + onDismissRequest = onSaveAsDialogDismissRequest, + confirmButton = saveAsDialogConfirmButton, + dismissButton = saveAsDialogDismissButton, + title = { + Text( + text = stringResource(R.string.save_as), + style = typography.headlineSmall, + modifier = Modifier.align(Alignment.CenterVertically) + ) + }, + text = { + saveAsDialogContent() + } + ) + } if (deleteFileDialogShown) { AlertDialog( onDismissRequest = onDeleteFileDialogDismissRequest, @@ -427,10 +444,10 @@ fun BeauTyXTApp( var exportDropdownMenuShown by rememberSaveable { mutableStateOf(false) } - var saveAsShown by rememberSaveable { mutableStateOf(false) } - var printOptionsDialogShown by rememberSaveable { mutableStateOf(false) } + var saveAsShown by rememberSaveable { mutableStateOf(false) } + var deleteFileDialogShown by rememberSaveable { mutableStateOf(false) } val saveAsHtmlFileLauncher = rememberLauncherForActivityResult(contract = CreateDocument(mimeTypeHtml)) { @@ -814,7 +831,6 @@ ${ ) } } - }, saveAsDialogConfirmButton = { TextButton( @@ -851,6 +867,44 @@ ${ ) }, + onShareExportDropdownMenuItemClicked = { + var sendIntent = Intent() + + sendIntent = when (fileUiState.mimeType.value) { + mimeTypePlainText -> { + sendIntent.apply { + action = Intent.ACTION_SEND + putExtra(Intent.EXTRA_TEXT, fileUiState.content.value) + type = mimeTypePlainText + } + } + + mimeTypeMarkdown -> { + sendIntent.apply { + action = Intent.ACTION_SEND + putExtra(Intent.EXTRA_TEXT, fileUiState.content.value) + fileViewModel.setMarkdownToHtml() + putExtra(Intent.EXTRA_HTML_TEXT, fileUiState.contentConvertedToHtml.value) + type = mimeTypeMarkdown + } + } + + else -> { + sendIntent.apply { + action = Intent.ACTION_SEND + putExtra(Intent.EXTRA_TEXT, fileUiState.content.value) + type = fileUiState.mimeType.value + } + } + } + + val shareIntent = Intent.createChooser(sendIntent, null) + startActivity(context, shareIntent, ActivityOptionsCompat.makeBasic().toBundle()) + + dropDownMenuShown = false + exportDropdownMenuShown = false + }, + deleteFileDialogShown = deleteFileDialogShown, onDeleteFileDialogDismissRequest = { deleteFileDialogShown = false }, onDeleteFileDropdownMenuItemClicked = { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fb42dd1..159e661 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -79,4 +79,5 @@ Delete File Are you really sure you want to do this?\nDeleted files are irrecoverable (gone forever!) + Share