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