Copy calculator result to clipboard on long press

Close #300
This commit is contained in:
MM20 2023-04-17 17:16:30 +02:00
parent 5b7a563739
commit 580984b316
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389

View File

@ -1,15 +1,21 @@
package de.mm20.launcher2.ui.launcher.search.calculator package de.mm20.launcher2.ui.launcher.search.calculator
import androidx.compose.foundation.clickable
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.ContentAlpha import androidx.compose.material3.MaterialTheme
import androidx.compose.material.LocalContentAlpha import androidx.compose.material3.Text
import androidx.compose.material3.*
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalHapticFeedback
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import de.mm20.launcher2.search.data.Calculator import de.mm20.launcher2.search.data.Calculator
@ -18,40 +24,50 @@ import de.mm20.launcher2.search.data.Calculator
fun CalculatorItem( fun CalculatorItem(
calculator: Calculator calculator: Calculator
) { ) {
val clipboardManager = LocalClipboardManager.current
val hapticFeedback = LocalHapticFeedback.current
Column( Column(
modifier = Modifier modifier = Modifier
.padding(16.dp) .padding(16.dp)
.fillMaxWidth() .fillMaxWidth()
) { ) {
CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) { Text(
Text( text = calculator.getBeatifiedTerm(),
text = calculator.getBeatifiedTerm(), style = MaterialTheme.typography.labelLarge,
style = MaterialTheme.typography.labelLarge, color = MaterialTheme.colorScheme.secondary
color = MaterialTheme.colorScheme.secondary )
)
}
Text( Text(
text = "= ${calculator.formattedString}", text = "= ${calculator.formattedString}",
style = MaterialTheme.typography.titleLarge, style = MaterialTheme.typography.titleLarge,
modifier = Modifier.align(Alignment.End), modifier = Modifier
.align(Alignment.End)
.combinedClickable(
onClick = {},
onLongClick = {
clipboardManager.setText(AnnotatedString(calculator.solution.toString()))
hapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress)
},
indication = null,
interactionSource = remember { MutableInteractionSource() }
),
) )
if (calculator.term.matches(Regex("(0x|0b)?[0-9]+"))) { if (calculator.term.matches(Regex("(0x|0b)?[0-9]+"))) {
Text( Text(
calculator.formattedBinaryString, calculator.formattedBinaryString,
style = MaterialTheme.typography.bodyMedium.copy(fontFamily = FontFamily.Monospace), style = MaterialTheme.typography.bodyMedium.copy(fontFamily = FontFamily.Monospace),
modifier = Modifier modifier = Modifier
.align(Alignment.End) .align(Alignment.End)
.padding(top = 8.dp), .padding(top = 8.dp),
) )
Text( Text(
calculator.formattedHexString, calculator.formattedHexString,
style = MaterialTheme.typography.bodyMedium.copy(fontFamily = FontFamily.Monospace), style = MaterialTheme.typography.bodyMedium.copy(fontFamily = FontFamily.Monospace),
modifier = Modifier.align(Alignment.End), modifier = Modifier.align(Alignment.End),
) )
Text( Text(
calculator.formattedOctString, calculator.formattedOctString,
style = MaterialTheme.typography.bodyMedium.copy(fontFamily = FontFamily.Monospace), style = MaterialTheme.typography.bodyMedium.copy(fontFamily = FontFamily.Monospace),
modifier = Modifier.align(Alignment.End), modifier = Modifier.align(Alignment.End),
) )
} }