From df44a33415f163b53fdbd1f3fb4c03a07569952f Mon Sep 17 00:00:00 2001 From: Sad Ellie Date: Sat, 25 Feb 2023 23:34:34 +0400 Subject: [PATCH] Copy to clipboard without formatting --- .../calculator/components/InputTextField.kt | 15 ++++++++++++++- .../calculator/components/UnittoTextToolbar.kt | 9 +++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/components/InputTextField.kt b/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/components/InputTextField.kt index 81512956..f65af301 100644 --- a/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/components/InputTextField.kt +++ b/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/components/InputTextField.kt @@ -30,6 +30,7 @@ import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalTextInputService import androidx.compose.ui.platform.LocalTextToolbar import androidx.compose.ui.platform.LocalView +import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.style.TextAlign import com.sadellie.unitto.core.ui.Formatter @@ -56,12 +57,24 @@ internal fun InputTextField( } } + fun copyToClipboard() = clipboardManager.setText( + AnnotatedString( + formattedInput.text + .replace(Formatter.grouping, "") + .replace(Formatter.fractional, ".") + ) + ) + CompositionLocalProvider( LocalTextInputService provides null, LocalTextToolbar provides UnittoTextToolbar( view = LocalView.current, pasteCallback = { pasteCallback(clipboardManager.getText()?.text ?: "") }, - cutCallback = cutCallback + cutCallback = { + copyToClipboard() + cutCallback() + }, + copyCallback = ::copyToClipboard ) ) { BasicTextField( diff --git a/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/components/UnittoTextToolbar.kt b/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/components/UnittoTextToolbar.kt index 83c7aa85..9aa2779f 100644 --- a/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/components/UnittoTextToolbar.kt +++ b/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/components/UnittoTextToolbar.kt @@ -28,7 +28,8 @@ import androidx.compose.ui.platform.TextToolbarStatus internal class UnittoTextToolbar( private val view: View, private val pasteCallback: () -> Unit, - private val cutCallback: () -> Unit + private val cutCallback: () -> Unit, + private val copyCallback: () -> Unit ) : TextToolbar { private var actionMode: ActionMode? = null @@ -44,9 +45,9 @@ internal class UnittoTextToolbar( onSelectAllRequested: (() -> Unit)? ) { textActionModeCallback.rect = rect - textActionModeCallback.onCopyRequested = onCopyRequested - textActionModeCallback.onCutRequested = { cutCallback(); onCutRequested?.invoke() } - textActionModeCallback.onPasteRequested = { pasteCallback(); onPasteRequested?.invoke() } + textActionModeCallback.onCopyRequested = copyCallback + textActionModeCallback.onCutRequested = cutCallback + textActionModeCallback.onPasteRequested = pasteCallback textActionModeCallback.onSelectAllRequested = onSelectAllRequested if (actionMode == null) { status = TextToolbarStatus.Shown