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.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(

View File

@ -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