From 580984b31668a05b51919cbbeba305bdfdac05ed Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Mon, 17 Apr 2023 17:16:30 +0200 Subject: [PATCH] Copy calculator result to clipboard on long press Close #300 --- .../search/calculator/CalculatorItem.kt | 46 +++++++++++++------ 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/calculator/CalculatorItem.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/calculator/CalculatorItem.kt index 01bbd819..7a286812 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/calculator/CalculatorItem.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/calculator/CalculatorItem.kt @@ -1,15 +1,21 @@ 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.fillMaxWidth import androidx.compose.foundation.layout.padding -import androidx.compose.material.ContentAlpha -import androidx.compose.material.LocalContentAlpha -import androidx.compose.material3.* +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment 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.unit.dp import de.mm20.launcher2.search.data.Calculator @@ -18,40 +24,50 @@ import de.mm20.launcher2.search.data.Calculator fun CalculatorItem( calculator: Calculator ) { + val clipboardManager = LocalClipboardManager.current + val hapticFeedback = LocalHapticFeedback.current Column( modifier = Modifier .padding(16.dp) .fillMaxWidth() ) { - CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) { - Text( - text = calculator.getBeatifiedTerm(), - style = MaterialTheme.typography.labelLarge, - color = MaterialTheme.colorScheme.secondary - ) - } + Text( + text = calculator.getBeatifiedTerm(), + style = MaterialTheme.typography.labelLarge, + color = MaterialTheme.colorScheme.secondary + ) Text( text = "= ${calculator.formattedString}", 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]+"))) { Text( calculator.formattedBinaryString, - style = MaterialTheme.typography.bodyMedium.copy(fontFamily = FontFamily.Monospace), + style = MaterialTheme.typography.bodyMedium.copy(fontFamily = FontFamily.Monospace), modifier = Modifier .align(Alignment.End) .padding(top = 8.dp), ) Text( calculator.formattedHexString, - style = MaterialTheme.typography.bodyMedium.copy(fontFamily = FontFamily.Monospace), + style = MaterialTheme.typography.bodyMedium.copy(fontFamily = FontFamily.Monospace), modifier = Modifier.align(Alignment.End), ) Text( calculator.formattedOctString, - style = MaterialTheme.typography.bodyMedium.copy(fontFamily = FontFamily.Monospace), + style = MaterialTheme.typography.bodyMedium.copy(fontFamily = FontFamily.Monospace), modifier = Modifier.align(Alignment.End), ) }