Copy to clipboard without formatting

This commit is contained in:
Sad Ellie 2023-02-25 23:34:34 +04:00
parent 74cc7336fb
commit df44a33415
2 changed files with 19 additions and 5 deletions

View File

@ -30,6 +30,7 @@ import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalTextInputService import androidx.compose.ui.platform.LocalTextInputService
import androidx.compose.ui.platform.LocalTextToolbar import androidx.compose.ui.platform.LocalTextToolbar
import androidx.compose.ui.platform.LocalView import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import com.sadellie.unitto.core.ui.Formatter 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( CompositionLocalProvider(
LocalTextInputService provides null, LocalTextInputService provides null,
LocalTextToolbar provides UnittoTextToolbar( LocalTextToolbar provides UnittoTextToolbar(
view = LocalView.current, view = LocalView.current,
pasteCallback = { pasteCallback(clipboardManager.getText()?.text ?: "") }, pasteCallback = { pasteCallback(clipboardManager.getText()?.text ?: "") },
cutCallback = cutCallback cutCallback = {
copyToClipboard()
cutCallback()
},
copyCallback = ::copyToClipboard
) )
) { ) {
BasicTextField( BasicTextField(

View File

@ -28,7 +28,8 @@ import androidx.compose.ui.platform.TextToolbarStatus
internal class UnittoTextToolbar( internal class UnittoTextToolbar(
private val view: View, private val view: View,
private val pasteCallback: () -> Unit, private val pasteCallback: () -> Unit,
private val cutCallback: () -> Unit private val cutCallback: () -> Unit,
private val copyCallback: () -> Unit
) : TextToolbar { ) : TextToolbar {
private var actionMode: ActionMode? = null private var actionMode: ActionMode? = null
@ -44,9 +45,9 @@ internal class UnittoTextToolbar(
onSelectAllRequested: (() -> Unit)? onSelectAllRequested: (() -> Unit)?
) { ) {
textActionModeCallback.rect = rect textActionModeCallback.rect = rect
textActionModeCallback.onCopyRequested = onCopyRequested textActionModeCallback.onCopyRequested = copyCallback
textActionModeCallback.onCutRequested = { cutCallback(); onCutRequested?.invoke() } textActionModeCallback.onCutRequested = cutCallback
textActionModeCallback.onPasteRequested = { pasteCallback(); onPasteRequested?.invoke() } textActionModeCallback.onPasteRequested = pasteCallback
textActionModeCallback.onSelectAllRequested = onSelectAllRequested textActionModeCallback.onSelectAllRequested = onSelectAllRequested
if (actionMode == null) { if (actionMode == null) {
status = TextToolbarStatus.Shown status = TextToolbarStatus.Shown