diff --git a/core/crash/src/main/java/ru/tech/imageresizershrinker/core/crash/CrashActivity.kt b/core/crash/src/main/java/ru/tech/imageresizershrinker/core/crash/CrashActivity.kt index eb3392bb91..a656b67c19 100644 --- a/core/crash/src/main/java/ru/tech/imageresizershrinker/core/crash/CrashActivity.kt +++ b/core/crash/src/main/java/ru/tech/imageresizershrinker/core/crash/CrashActivity.kt @@ -51,7 +51,6 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.getValue import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalUriHandler @@ -64,7 +63,6 @@ import androidx.exifinterface.media.ExifInterface import com.t8rin.dynamic.theme.ColorTuple import com.t8rin.dynamic.theme.extractPrimaryColor import dagger.hilt.android.AndroidEntryPoint -import kotlinx.coroutines.launch import ru.tech.imageresizershrinker.core.crash.components.CrashHandler import ru.tech.imageresizershrinker.core.domain.ISSUE_TRACKER import ru.tech.imageresizershrinker.core.domain.TELEGRAM_GROUP_LINK @@ -83,14 +81,13 @@ import ru.tech.imageresizershrinker.core.ui.theme.ImageToolboxThemeSurface import ru.tech.imageresizershrinker.core.ui.theme.White import ru.tech.imageresizershrinker.core.ui.theme.outlineVariant import ru.tech.imageresizershrinker.core.ui.utils.helper.AppActivityClass -import ru.tech.imageresizershrinker.core.ui.utils.helper.ContextUtils.copyToClipboard import ru.tech.imageresizershrinker.core.ui.utils.provider.ImageToolboxCompositionLocals import ru.tech.imageresizershrinker.core.ui.utils.provider.LocalScreenSize +import ru.tech.imageresizershrinker.core.ui.utils.provider.rememberLocalEssentials import ru.tech.imageresizershrinker.core.ui.utils.provider.setContentWithWindowSizeClass import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedFloatingActionButton import ru.tech.imageresizershrinker.core.ui.widget.other.ExpandableItem -import ru.tech.imageresizershrinker.core.ui.widget.other.LocalToastHostState import ru.tech.imageresizershrinker.core.ui.widget.other.ToastHost import ru.tech.imageresizershrinker.core.ui.widget.text.AutoSizeText import javax.inject.Inject @@ -118,20 +115,13 @@ class CrashActivity : CrashHandler() { onGetEmojiColorTuple = ::getColorTupleFromEmoji ) ) { - val toastHostState = LocalToastHostState.current - val scope = rememberCoroutineScope() - + val essentials = rememberLocalEssentials() val createClip: (String) -> Unit = { - copyToClipboard( - label = getString(R.string.exception), - value = it + essentials.copyToClipboard(it) + essentials.showToast( + icon = Icons.Rounded.ContentCopy, + message = getString(R.string.copied), ) - scope.launch { - toastHostState.showToast( - icon = Icons.Rounded.ContentCopy, - message = getString(R.string.copied), - ) - } } val linkHandler = LocalUriHandler.current diff --git a/core/domain/src/main/kotlin/ru/tech/imageresizershrinker/core/domain/utils/KotlinUtils.kt b/core/domain/src/main/kotlin/ru/tech/imageresizershrinker/core/domain/utils/KotlinUtils.kt index 353ceedbe8..3dba3fc1ea 100644 --- a/core/domain/src/main/kotlin/ru/tech/imageresizershrinker/core/domain/utils/KotlinUtils.kt +++ b/core/domain/src/main/kotlin/ru/tech/imageresizershrinker/core/domain/utils/KotlinUtils.kt @@ -24,9 +24,9 @@ inline fun T?.notNullAnd( ): Boolean = if (this != null) predicate(this) else false -fun String.isBase64() = isNotEmpty() && BASE64_PATTERN.matches(this) +fun CharSequence.isBase64() = isNotEmpty() && BASE64_PATTERN.matches(this) -fun String.trimToBase64() = filter { !it.isWhitespace() }.substringAfter(",") +fun CharSequence.trimToBase64() = toString().filter { !it.isWhitespace() }.substringAfter(",") private val BASE64_PATTERN = Regex( "^(?=(.{4})*\$)[A-Za-z0-9+/]*={0,2}\$" diff --git a/core/filters/src/main/java/ru/tech/imageresizershrinker/core/filters/presentation/widget/addFilters/OtherContent.kt b/core/filters/src/main/java/ru/tech/imageresizershrinker/core/filters/presentation/widget/addFilters/OtherContent.kt index 73bfaa65db..4d6c94672b 100644 --- a/core/filters/src/main/java/ru/tech/imageresizershrinker/core/filters/presentation/widget/addFilters/OtherContent.kt +++ b/core/filters/src/main/java/ru/tech/imageresizershrinker/core/filters/presentation/widget/addFilters/OtherContent.kt @@ -225,7 +225,7 @@ internal fun OtherContent( }, onCopy = { manager -> component.cacheNeutralLut { uri -> - manager.setClip( + manager.copyToClipboard( uri.asClip(context) ) showConfetti() diff --git a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/utils/helper/ClipboardUtils.kt b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/utils/helper/ClipboardUtils.kt index 3f7d2c5995..2f8f6e37ce 100644 --- a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/utils/helper/ClipboardUtils.kt +++ b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/utils/helper/ClipboardUtils.kt @@ -145,6 +145,10 @@ fun List.toClipData( } } +fun CharSequence.toClipData( + label: String = "plain text" +): ClipData = ClipData.newPlainText(label, this) + fun Uri.asClip( context: Context, label: String = "Image" diff --git a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/utils/helper/ContextUtils.kt b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/utils/helper/ContextUtils.kt index ee2db73c9f..a7dac6ae83 100644 --- a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/utils/helper/ContextUtils.kt +++ b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/utils/helper/ContextUtils.kt @@ -366,11 +366,10 @@ object ContextUtils { /** Save a text into the clipboard. */ fun Context.copyToClipboard( - label: String, value: String, ) { val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager - val clip = ClipData.newPlainText(label, value) + val clip = ClipData.newPlainText("plain text", value) clipboard.setPrimaryClip(clip) } diff --git a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/utils/provider/LocalEssentials.kt b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/utils/provider/LocalEssentials.kt index fe31268e11..ccf3c8c6c0 100644 --- a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/utils/provider/LocalEssentials.kt +++ b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/utils/provider/LocalEssentials.kt @@ -17,6 +17,8 @@ package ru.tech.imageresizershrinker.core.ui.utils.provider +import android.content.ClipData +import android.os.Build import androidx.activity.ComponentActivity import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.FolderOff @@ -27,6 +29,9 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.ClipEntry +import androidx.compose.ui.platform.Clipboard +import androidx.compose.ui.platform.LocalClipboard import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import ru.tech.imageresizershrinker.core.domain.saving.model.SaveResult @@ -37,6 +42,7 @@ import ru.tech.imageresizershrinker.core.ui.utils.helper.ContextUtils.createScre import ru.tech.imageresizershrinker.core.ui.utils.helper.parseFileSaveResult import ru.tech.imageresizershrinker.core.ui.utils.helper.parseSaveResult import ru.tech.imageresizershrinker.core.ui.utils.helper.parseSaveResults +import ru.tech.imageresizershrinker.core.ui.utils.helper.toClipData import ru.tech.imageresizershrinker.core.ui.utils.navigation.Screen import ru.tech.imageresizershrinker.core.ui.widget.other.LocalToastHostState import ru.tech.imageresizershrinker.core.ui.widget.other.ToastDuration @@ -49,22 +55,26 @@ fun rememberLocalEssentials(): LocalEssentials { val confettiHostState = LocalConfettiHostState.current val context = LocalComponentActivity.current val coroutineScope = rememberCoroutineScope() + val clipboard = LocalClipboard.current return remember( toastHostState, coroutineScope, confettiHostState, - context + context, + clipboard ) { LocalEssentials( toastHostState = toastHostState, confettiHostState = confettiHostState, coroutineScope = coroutineScope, - context = context + context = context, + clipboard = clipboard ) } } +@ConsistentCopyVisibility @Stable @Immutable data class LocalEssentials internal constructor( @@ -72,6 +82,7 @@ data class LocalEssentials internal constructor( val confettiHostState: ConfettiHostState, val coroutineScope: CoroutineScope, val context: ComponentActivity, + val clipboard: Clipboard ) { fun showToast( message: String, @@ -147,4 +158,46 @@ data class LocalEssentials internal constructor( ) } } + + fun copyToClipboard(clipEntry: ClipEntry?) { + coroutineScope.launch { + clipboard.setClipEntry(clipEntry) + } + } + + fun copyToClipboard(text: CharSequence) { + copyToClipboard(ClipEntry(text.toClipData())) + } + + fun getTextFromClipboard( + onSuccess: (CharSequence) -> Unit + ) { + coroutineScope.launch { + clipboard.getClipEntry() + ?.clipData?.let { primaryClip -> + if (primaryClip.itemCount > 0) { + primaryClip.getItemAt(0)?.text + } else { + null + } + }?.takeIf { it.isNotEmpty() }?.let(onSuccess) + } + } + + fun clearClipboard() { + val clipboardManager = clipboard.nativeClipboard + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + runCatching { + clipboardManager.clearPrimaryClip() + }.onFailure { + clipboardManager.setPrimaryClip( + ClipData.newPlainText(null, "") + ) + } + } else { + clipboardManager.setPrimaryClip( + ClipData.newPlainText(null, "") + ) + } + } } \ No newline at end of file diff --git a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/buttons/ShareButton.kt b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/buttons/ShareButton.kt index ca4b3ab7a1..f8f09f54be 100644 --- a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/buttons/ShareButton.kt +++ b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/buttons/ShareButton.kt @@ -37,12 +37,12 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.ClipboardManager -import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import ru.tech.imageresizershrinker.core.resources.R import ru.tech.imageresizershrinker.core.resources.icons.MiniEdit +import ru.tech.imageresizershrinker.core.ui.utils.provider.LocalEssentials +import ru.tech.imageresizershrinker.core.ui.utils.provider.rememberLocalEssentials import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedAlertDialog import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton @@ -56,7 +56,7 @@ fun ShareButton( enabled: Boolean = true, onShare: () -> Unit, onEdit: (() -> Unit)? = null, - onCopy: ((ClipboardManager) -> Unit)? = null + onCopy: ((LocalEssentials) -> Unit)? = null ) { var showSelectionDialog by rememberSaveable { mutableStateOf(false) @@ -99,7 +99,7 @@ fun ShareButton( ) }, text = { - val clipboardManager = LocalClipboardManager.current + val essentials = rememberLocalEssentials() val scrollState = rememberScrollState() Column( @@ -131,7 +131,7 @@ fun ShareButton( startIcon = Icons.Rounded.ContentCopy, onClick = { showSelectionDialog = false - onCopy(clipboardManager) + onCopy(essentials) }, titleFontStyle = PreferenceItemDefaults.TitleFontStyleCentered ) diff --git a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/color_picker/ColorInfo.kt b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/color_picker/ColorInfo.kt index 64359bd332..ebbfa97ff6 100644 --- a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/color_picker/ColorInfo.kt +++ b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/color_picker/ColorInfo.kt @@ -98,10 +98,7 @@ fun ColorInfo( val context = LocalContext.current val colorPasteError = rememberSaveable { mutableStateOf(null) } val onCopyCustomColor = { - context.copyToClipboard( - label = context.getString(R.string.color), - value = getFormattedColor(color) - ) + context.copyToClipboard(getFormattedColor(color)) } val onPasteCustomColor = { context.pasteColorFromClipboard( diff --git a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/other/LinkPreviewCard.kt b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/other/LinkPreviewCard.kt index 77e2cdb38c..a22afbdea2 100644 --- a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/other/LinkPreviewCard.kt +++ b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/other/LinkPreviewCard.kt @@ -17,8 +17,6 @@ package ru.tech.imageresizershrinker.core.ui.widget.other -import android.content.ClipData -import android.content.Intent import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -38,7 +36,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -48,20 +45,18 @@ import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.compositeOver import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.onSizeChanged -import androidx.compose.ui.platform.LocalClipboardManager -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import androidx.core.net.toUri -import kotlinx.coroutines.launch import ru.tech.imageresizershrinker.core.resources.R import ru.tech.imageresizershrinker.core.ui.shapes.MaterialStarShape import ru.tech.imageresizershrinker.core.ui.utils.helper.LinkPreview +import ru.tech.imageresizershrinker.core.ui.utils.provider.rememberLocalEssentials import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsCombinedClickable import ru.tech.imageresizershrinker.core.ui.widget.image.Picture import ru.tech.imageresizershrinker.core.ui.widget.modifier.container @@ -71,12 +66,9 @@ fun LinkPreviewCard( linkPreview: LinkPreview, shape: Shape ) { - val clipboardManager = LocalClipboardManager.current.nativeClipboard - val coroutineScope = rememberCoroutineScope() + val essentials = rememberLocalEssentials() val onLinkCopiedText = stringResource(R.string.copied) - val linkTextLabel = stringResource(R.string.image_link) - val context = LocalContext.current - val toastHostState = LocalToastHostState.current + val linkHandler = LocalUriHandler.current Row( modifier = Modifier @@ -88,28 +80,14 @@ fun LinkPreviewCard( ) .hapticsCombinedClickable( onClick = { - linkPreview.link?.let { - context.startActivity( - Intent( - Intent.ACTION_VIEW, - it.toUri() - ) - ) - } + linkPreview.link?.let(linkHandler::openUri) }, onLongClick = { - clipboardManager.setPrimaryClip( - ClipData.newPlainText( - linkTextLabel, - linkPreview.link - ) + linkPreview.link?.let(essentials::copyToClipboard) + essentials.showToast( + message = onLinkCopiedText, + icon = Icons.Default.Link ) - coroutineScope.launch { - toastHostState.showToast( - message = onLinkCopiedText, - icon = Icons.Default.Link - ) - } }, ), verticalAlignment = Alignment.CenterVertically diff --git a/feature/base64-tools/src/main/java/ru/tech/imageresizershrinker/feature/base64_tools/presentation/Base64ToolsContent.kt b/feature/base64-tools/src/main/java/ru/tech/imageresizershrinker/feature/base64_tools/presentation/Base64ToolsContent.kt index d14a5ccb63..cf4c292353 100644 --- a/feature/base64-tools/src/main/java/ru/tech/imageresizershrinker/feature/base64_tools/presentation/Base64ToolsContent.kt +++ b/feature/base64-tools/src/main/java/ru/tech/imageresizershrinker/feature/base64_tools/presentation/Base64ToolsContent.kt @@ -128,7 +128,7 @@ fun Base64ToolsContent( }, onCopy = { manager -> component.cacheCurrentImage { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } }, diff --git a/feature/base64-tools/src/main/java/ru/tech/imageresizershrinker/feature/base64_tools/presentation/components/Base64ToolsTiles.kt b/feature/base64-tools/src/main/java/ru/tech/imageresizershrinker/feature/base64_tools/presentation/components/Base64ToolsTiles.kt index 354dcb1b7f..3665858f07 100644 --- a/feature/base64-tools/src/main/java/ru/tech/imageresizershrinker/feature/base64_tools/presentation/components/Base64ToolsTiles.kt +++ b/feature/base64-tools/src/main/java/ru/tech/imageresizershrinker/feature/base64_tools/presentation/components/Base64ToolsTiles.kt @@ -51,7 +51,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.buildAnnotatedString @@ -72,19 +71,21 @@ import ru.tech.imageresizershrinker.feature.base64_tools.presentation.screenLogi internal fun Base64ToolsTiles(component: Base64ToolsComponent) { val essentials = rememberLocalEssentials() val context = LocalContext.current - val clipboardManager = LocalClipboardManager.current val pasteTile: @Composable RowScope.(shape: Shape) -> Unit = { shape -> Tile( onClick = { - val text = clipboardManager.getText()?.text?.trimToBase64() ?: "" - if (text.isBase64()) { - component.setBase64(text) - } else { - essentials.showToast( - message = context.getString(R.string.not_a_valid_base_64), - icon = Icons.Rounded.Base64 - ) + essentials.getTextFromClipboard { text -> + val text = text.trimToBase64() + + if (text.isBase64()) { + component.setBase64(text) + } else { + essentials.showToast( + message = context.getString(R.string.not_a_valid_base_64), + icon = Icons.Rounded.Base64 + ) + } } }, shape = shape, @@ -181,7 +182,7 @@ internal fun Base64ToolsTiles(component: Base64ToolsComponent) { append(component.base64String) } if (component.base64String.isBase64()) { - clipboardManager.setText(text) + essentials.copyToClipboard(text) essentials.showToast( message = context.getString(R.string.copied), icon = Icons.Rounded.CopyAll diff --git a/feature/checksum-tools/src/main/java/ru/tech/imageresizershrinker/feature/checksum_tools/presentation/ChecksumToolsContent.kt b/feature/checksum-tools/src/main/java/ru/tech/imageresizershrinker/feature/checksum_tools/presentation/ChecksumToolsContent.kt index 38d309bcfd..31ec3437af 100644 --- a/feature/checksum-tools/src/main/java/ru/tech/imageresizershrinker/feature/checksum_tools/presentation/ChecksumToolsContent.kt +++ b/feature/checksum-tools/src/main/java/ru/tech/imageresizershrinker/feature/checksum_tools/presentation/ChecksumToolsContent.kt @@ -73,11 +73,9 @@ import androidx.compose.ui.draw.drawWithContent import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color import androidx.compose.ui.hapticfeedback.HapticFeedbackType -import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import kotlinx.coroutines.launch @@ -297,14 +295,8 @@ fun ChecksumToolsContent( 0.5f ) ) - val clipboardManager = LocalClipboardManager.current - val onCopyText: (String) -> Unit = { text -> - clipboardManager.setText( - buildAnnotatedString { - append(text) - } - ) - } + + val onCopyText: (String) -> Unit = essentials::copyToClipboard when (pageIndex) { ChecksumPage.CalculateFromUri.INDEX -> { diff --git a/feature/colllage-maker/src/main/java/ru/tech/imageresizershrinker/colllage_maker/presentation/CollageMakerContent.kt b/feature/colllage-maker/src/main/java/ru/tech/imageresizershrinker/colllage_maker/presentation/CollageMakerContent.kt index dcf5570d59..8bb56cd8fd 100644 --- a/feature/colllage-maker/src/main/java/ru/tech/imageresizershrinker/colllage_maker/presentation/CollageMakerContent.kt +++ b/feature/colllage-maker/src/main/java/ru/tech/imageresizershrinker/colllage_maker/presentation/CollageMakerContent.kt @@ -212,7 +212,7 @@ fun CollageMakerContent( }, onCopy = { manager -> component.cacheImage { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } }, diff --git a/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorHarmonies.kt b/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorHarmonies.kt index bd7533a4eb..d3e5b9eb58 100644 --- a/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorHarmonies.kt +++ b/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorHarmonies.kt @@ -149,10 +149,7 @@ internal fun ColorHarmonies( .transparencyChecker() .background(boxColor) .hapticsClickable { - context.copyToClipboard( - label = context.getString(R.string.color), - value = getFormattedColor(color) - ) + context.copyToClipboard(getFormattedColor(color)) scope.launch { toastHostState.showToast( icon = Icons.Rounded.ContentPaste, diff --git a/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorInfo.kt b/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorInfo.kt index 966307ff00..870ed908e5 100644 --- a/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorInfo.kt +++ b/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorInfo.kt @@ -105,10 +105,7 @@ internal fun ColorInfo( .transparencyChecker() .background(boxColor) .hapticsClickable { - context.copyToClipboard( - label = context.getString(R.string.color), - value = getFormattedColor(selectedColor) - ) + context.copyToClipboard(getFormattedColor(selectedColor)) scope.launch { toastHostState.showToast( icon = Icons.Rounded.ContentPaste, @@ -179,10 +176,7 @@ internal fun ColorInfo( onColorChange(it ?: selectedColor) }, onCopy = { - context.copyToClipboard( - label = context.getString(R.string.color), - value = it - ) + context.copyToClipboard(it) scope.launch { toastHostState.showToast( icon = Icons.Rounded.ContentPaste, diff --git a/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorMixing.kt b/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorMixing.kt index 03c7942974..a8d074e4ce 100644 --- a/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorMixing.kt +++ b/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorMixing.kt @@ -166,10 +166,7 @@ internal fun ColorMixing( .transparencyChecker() .background(boxColor) .hapticsClickable { - context.copyToClipboard( - label = context.getString(R.string.color), - value = getFormattedColor(color) - ) + context.copyToClipboard(getFormattedColor(color)) scope.launch { toastHostState.showToast( icon = Icons.Rounded.ContentPaste, diff --git a/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorShading.kt b/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorShading.kt index 791f8aaed1..571eb91f1b 100644 --- a/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorShading.kt +++ b/feature/color-tools/src/main/java/ru/tech/imageresizershrinker/color_tools/presentation/components/ColorShading.kt @@ -168,10 +168,7 @@ internal fun ColorShading( .transparencyChecker() .background(boxColor) .hapticsClickable { - context.copyToClipboard( - label = context.getString(R.string.color), - value = getFormattedColor(color) - ) + context.copyToClipboard(getFormattedColor(color)) scope.launch { toastHostState.showToast( icon = Icons.Rounded.ContentPaste, diff --git a/feature/compare/src/main/java/ru/tech/imageresizershrinker/feature/compare/presentation/CompareContent.kt b/feature/compare/src/main/java/ru/tech/imageresizershrinker/feature/compare/presentation/CompareContent.kt index 6c719e375e..780039ec1d 100644 --- a/feature/compare/src/main/java/ru/tech/imageresizershrinker/feature/compare/presentation/CompareContent.kt +++ b/feature/compare/src/main/java/ru/tech/imageresizershrinker/feature/compare/presentation/CompareContent.kt @@ -238,7 +238,7 @@ fun CompareContent( percent = compareProgress, imageFormat = imageFormat ) { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } }, diff --git a/feature/compare/src/main/java/ru/tech/imageresizershrinker/feature/compare/presentation/components/CompareShareSheet.kt b/feature/compare/src/main/java/ru/tech/imageresizershrinker/feature/compare/presentation/components/CompareShareSheet.kt index e41362d0b9..349fcf287f 100644 --- a/feature/compare/src/main/java/ru/tech/imageresizershrinker/feature/compare/presentation/components/CompareShareSheet.kt +++ b/feature/compare/src/main/java/ru/tech/imageresizershrinker/feature/compare/presentation/components/CompareShareSheet.kt @@ -43,12 +43,12 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.RectangleShape -import androidx.compose.ui.platform.ClipboardManager -import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import ru.tech.imageresizershrinker.core.domain.image.model.ImageFormat import ru.tech.imageresizershrinker.core.resources.R +import ru.tech.imageresizershrinker.core.ui.utils.provider.LocalEssentials +import ru.tech.imageresizershrinker.core.ui.utils.provider.rememberLocalEssentials import ru.tech.imageresizershrinker.core.ui.widget.controls.selection.ImageFormatSelector import ru.tech.imageresizershrinker.core.ui.widget.dialogs.OneTimeSaveLocationSelectionDialog import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton @@ -69,10 +69,10 @@ internal fun CompareShareSheet( onVisibleChange: (Boolean) -> Unit, onSaveBitmap: (ImageFormat, String?) -> Unit, onShare: (ImageFormat) -> Unit, - onCopy: (ImageFormat, ClipboardManager) -> Unit, + onCopy: (ImageFormat, LocalEssentials) -> Unit, previewBitmap: Bitmap? ) { - val clipboardManager = LocalClipboardManager.current + val essentials = rememberLocalEssentials() EnhancedModalBottomSheet( sheetContent = { @@ -147,7 +147,7 @@ internal fun CompareShareSheet( .padding(horizontal = 16.dp), shape = centerShape, onClick = { - onCopy(imageFormat, clipboardManager) + onCopy(imageFormat, essentials) }, color = MaterialTheme.colorScheme.secondaryContainer, endIcon = Icons.Rounded.ContentCopy diff --git a/feature/crop/src/main/java/ru/tech/imageresizershrinker/feature/crop/presentation/CropContent.kt b/feature/crop/src/main/java/ru/tech/imageresizershrinker/feature/crop/presentation/CropContent.kt index 34ff30c23e..91096d8ea7 100644 --- a/feature/crop/src/main/java/ru/tech/imageresizershrinker/feature/crop/presentation/CropContent.kt +++ b/feature/crop/src/main/java/ru/tech/imageresizershrinker/feature/crop/presentation/CropContent.kt @@ -215,7 +215,7 @@ fun CropContent( }, onCopy = { manager -> component.cacheCurrentImage { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } } diff --git a/feature/delete-exif/src/main/java/ru/tech/imageresizershrinker/feature/delete_exif/presentation/DeleteExifContent.kt b/feature/delete-exif/src/main/java/ru/tech/imageresizershrinker/feature/delete_exif/presentation/DeleteExifContent.kt index 1921d91c57..7b78555d05 100644 --- a/feature/delete-exif/src/main/java/ru/tech/imageresizershrinker/feature/delete_exif/presentation/DeleteExifContent.kt +++ b/feature/delete-exif/src/main/java/ru/tech/imageresizershrinker/feature/delete_exif/presentation/DeleteExifContent.kt @@ -142,7 +142,7 @@ fun DeleteExifContent( }, onCopy = { manager -> component.cacheCurrentImage { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } }, diff --git a/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/presentation/DrawContent.kt b/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/presentation/DrawContent.kt index 57be5299f6..948a2c6da3 100644 --- a/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/presentation/DrawContent.kt +++ b/feature/draw/src/main/java/ru/tech/imageresizershrinker/feature/draw/presentation/DrawContent.kt @@ -243,7 +243,7 @@ fun DrawContent( }, onCopy = { manager -> component.cacheCurrentImage { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } }, diff --git a/feature/edit-exif/src/main/java/ru/tech/imageresizershrinker/feature/edit_exif/presentation/EditExifContent.kt b/feature/edit-exif/src/main/java/ru/tech/imageresizershrinker/feature/edit_exif/presentation/EditExifContent.kt index ae2dc0cc5e..6381731e90 100644 --- a/feature/edit-exif/src/main/java/ru/tech/imageresizershrinker/feature/edit_exif/presentation/EditExifContent.kt +++ b/feature/edit-exif/src/main/java/ru/tech/imageresizershrinker/feature/edit_exif/presentation/EditExifContent.kt @@ -151,7 +151,7 @@ fun EditExifContent( }, onCopy = { manager -> component.cacheCurrentImage { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } }, diff --git a/feature/erase-background/src/main/java/ru/tech/imageresizershrinker/feature/erase_background/presentation/EraseBackgroundContent.kt b/feature/erase-background/src/main/java/ru/tech/imageresizershrinker/feature/erase_background/presentation/EraseBackgroundContent.kt index 65078a1160..1acee11566 100644 --- a/feature/erase-background/src/main/java/ru/tech/imageresizershrinker/feature/erase_background/presentation/EraseBackgroundContent.kt +++ b/feature/erase-background/src/main/java/ru/tech/imageresizershrinker/feature/erase_background/presentation/EraseBackgroundContent.kt @@ -264,7 +264,7 @@ fun EraseBackgroundContent( }, onCopy = { manager -> component.cacheCurrentImage { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } }, diff --git a/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/presentation/FiltersContent.kt b/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/presentation/FiltersContent.kt index c65bb4e93a..1137562969 100644 --- a/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/presentation/FiltersContent.kt +++ b/feature/filters/src/main/java/ru/tech/imageresizershrinker/feature/filters/presentation/FiltersContent.kt @@ -117,7 +117,7 @@ fun FiltersContent( }, onCopy = { manager -> component.cacheCurrentImage { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } }, diff --git a/feature/format-conversion/src/main/java/ru/tech/imageresizershrinker/feature/format_conversion/presentation/FormatConversionContent.kt b/feature/format-conversion/src/main/java/ru/tech/imageresizershrinker/feature/format_conversion/presentation/FormatConversionContent.kt index 8ec1d6594a..44dfa9ec9a 100644 --- a/feature/format-conversion/src/main/java/ru/tech/imageresizershrinker/feature/format_conversion/presentation/FormatConversionContent.kt +++ b/feature/format-conversion/src/main/java/ru/tech/imageresizershrinker/feature/format_conversion/presentation/FormatConversionContent.kt @@ -157,7 +157,7 @@ fun FormatConversionContent( }, onCopy = { manager -> component.cacheCurrentImage { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } }, diff --git a/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/components/GeneratePaletteScreenControls.kt b/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/components/GeneratePaletteScreenControls.kt index cf154cbe6a..d44423fb58 100644 --- a/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/components/GeneratePaletteScreenControls.kt +++ b/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/components/GeneratePaletteScreenControls.kt @@ -360,10 +360,7 @@ internal fun GeneratePaletteScreenControls( }, maximumColorCount = count, onColorChange = { - context.copyToClipboard( - context.getString(R.string.color), - it.color.toHex() - ) + context.copyToClipboard(it.color.toHex()) scope.launch { toastHostState.showToast( icon = Icons.Rounded.ContentPaste, diff --git a/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/components/MaterialYouPalette.kt b/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/components/MaterialYouPalette.kt index 19b835ecfe..88348e552c 100644 --- a/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/components/MaterialYouPalette.kt +++ b/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/components/MaterialYouPalette.kt @@ -88,10 +88,7 @@ internal fun MaterialYouPalette( MaterialYouPaletteGroup( colorScheme = colorScheme, onCopy = { color -> - context.copyToClipboard( - context.getString(R.string.color), - color.toHex() - ) + context.copyToClipboard(color.toHex()) scope.launch { toastHostState.showToast( icon = Icons.Rounded.ContentPaste, @@ -125,10 +122,7 @@ internal fun MaterialYouPalette( isInvertColors = isInvertColors ).asCodeString(true) - context.copyToClipboard( - context.getString(R.string.color_scheme), - light + "\n\n" + dark - ) + context.copyToClipboard(light + "\n\n" + dark) scope.launch { toastHostState.showToast( icon = Icons.Rounded.ContentPaste, diff --git a/feature/gradient-maker/src/main/java/ru/tech/imageresizershrinker/feature/gradient_maker/presentation/GradientMakerContent.kt b/feature/gradient-maker/src/main/java/ru/tech/imageresizershrinker/feature/gradient_maker/presentation/GradientMakerContent.kt index 2d04aafbf6..351ac73367 100644 --- a/feature/gradient-maker/src/main/java/ru/tech/imageresizershrinker/feature/gradient_maker/presentation/GradientMakerContent.kt +++ b/feature/gradient-maker/src/main/java/ru/tech/imageresizershrinker/feature/gradient_maker/presentation/GradientMakerContent.kt @@ -208,7 +208,7 @@ fun GradientMakerContent( }, onCopy = { manager -> component.cacheCurrentImage { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } }, diff --git a/feature/image-stacking/src/main/java/ru/tech/imageresizershrinker/feature/image_stacking/presentation/ImageStackingContent.kt b/feature/image-stacking/src/main/java/ru/tech/imageresizershrinker/feature/image_stacking/presentation/ImageStackingContent.kt index bb9f31cea9..98a4d7b00f 100644 --- a/feature/image-stacking/src/main/java/ru/tech/imageresizershrinker/feature/image_stacking/presentation/ImageStackingContent.kt +++ b/feature/image-stacking/src/main/java/ru/tech/imageresizershrinker/feature/image_stacking/presentation/ImageStackingContent.kt @@ -148,7 +148,7 @@ fun ImageStackingContent( }, onCopy = { manager -> component.cacheCurrentImage { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } }, diff --git a/feature/image-stitch/src/main/java/ru/tech/imageresizershrinker/feature/image_stitch/presentation/ImageStitchingContent.kt b/feature/image-stitch/src/main/java/ru/tech/imageresizershrinker/feature/image_stitch/presentation/ImageStitchingContent.kt index 069e8938be..b3effa5b74 100644 --- a/feature/image-stitch/src/main/java/ru/tech/imageresizershrinker/feature/image_stitch/presentation/ImageStitchingContent.kt +++ b/feature/image-stitch/src/main/java/ru/tech/imageresizershrinker/feature/image_stitch/presentation/ImageStitchingContent.kt @@ -150,7 +150,7 @@ fun ImageStitchingContent( }, onCopy = { manager -> component.cacheCurrentImage { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } }, diff --git a/feature/limits-resize/src/main/java/ru/tech/imageresizershrinker/feature/limits_resize/presentation/LimitsResizeContent.kt b/feature/limits-resize/src/main/java/ru/tech/imageresizershrinker/feature/limits_resize/presentation/LimitsResizeContent.kt index 264df487ac..430d705083 100644 --- a/feature/limits-resize/src/main/java/ru/tech/imageresizershrinker/feature/limits_resize/presentation/LimitsResizeContent.kt +++ b/feature/limits-resize/src/main/java/ru/tech/imageresizershrinker/feature/limits_resize/presentation/LimitsResizeContent.kt @@ -144,7 +144,7 @@ fun LimitsResizeContent( }, onCopy = { manager -> component.cacheCurrentImage { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } }, diff --git a/feature/load-net-image/src/main/java/ru/tech/imageresizershrinker/feature/load_net_image/presentation/components/LoadNetImageAdaptiveActions.kt b/feature/load-net-image/src/main/java/ru/tech/imageresizershrinker/feature/load_net_image/presentation/components/LoadNetImageAdaptiveActions.kt index 624e1a6d46..11c0fdfca0 100644 --- a/feature/load-net-image/src/main/java/ru/tech/imageresizershrinker/feature/load_net_image/presentation/components/LoadNetImageAdaptiveActions.kt +++ b/feature/load-net-image/src/main/java/ru/tech/imageresizershrinker/feature/load_net_image/presentation/components/LoadNetImageAdaptiveActions.kt @@ -45,7 +45,7 @@ internal fun RowScope.LoadNetImageAdaptiveActions( }, onCopy = { manager -> component.cacheCurrentImage { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) essentials.showConfetti() } } diff --git a/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/MarkupLayersTopAppBarActions.kt b/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/MarkupLayersTopAppBarActions.kt index ea96e340bc..4660bcc60b 100644 --- a/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/MarkupLayersTopAppBarActions.kt +++ b/feature/markup-layers/src/main/java/ru/tech/imageresizershrinker/feature/markup_layers/presentation/components/MarkupLayersTopAppBarActions.kt @@ -82,7 +82,7 @@ internal fun MarkupLayersTopAppBarActions( }, onCopy = { manager -> component.cacheCurrentImage { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } }, diff --git a/feature/noise-generation/src/main/java/ru/tech/imageresizershrinker/noise_generation/presentation/NoiseGenerationContent.kt b/feature/noise-generation/src/main/java/ru/tech/imageresizershrinker/noise_generation/presentation/NoiseGenerationContent.kt index 4c085c1d67..06d4337cf0 100644 --- a/feature/noise-generation/src/main/java/ru/tech/imageresizershrinker/noise_generation/presentation/NoiseGenerationContent.kt +++ b/feature/noise-generation/src/main/java/ru/tech/imageresizershrinker/noise_generation/presentation/NoiseGenerationContent.kt @@ -91,7 +91,7 @@ fun NoiseGenerationContent( }, onCopy = { manager -> component.cacheCurrentNoise { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } }, diff --git a/feature/pick-color/src/main/java/ru/tech/imageresizershrinker/feature/pick_color/presentation/components/PickColorFromImageSheet.kt b/feature/pick-color/src/main/java/ru/tech/imageresizershrinker/feature/pick_color/presentation/components/PickColorFromImageSheet.kt index ee4be71fb7..f0902bb48d 100644 --- a/feature/pick-color/src/main/java/ru/tech/imageresizershrinker/feature/pick_color/presentation/components/PickColorFromImageSheet.kt +++ b/feature/pick-color/src/main/java/ru/tech/imageresizershrinker/feature/pick_color/presentation/components/PickColorFromImageSheet.kt @@ -161,10 +161,7 @@ fun PickColorFromImageSheet( ) .clip(RoundedCornerShape(12.dp)) .hapticsClickable { - context.copyToClipboard( - context.getString(R.string.color), - color.toHex() - ) + context.copyToClipboard(color.toHex()) scope.launch { toastHostState.showToast( icon = Icons.Rounded.ContentPaste, @@ -194,10 +191,7 @@ fun PickColorFromImageSheet( modifier = Modifier .clip(RoundedCornerShape(8.dp)) .hapticsClickable { - context.copyToClipboard( - context.getString(R.string.color), - color.toHex() - ) + context.copyToClipboard(color.toHex()) scope.launch { toastHostState.showToast( icon = Icons.Rounded.ContentPaste, diff --git a/feature/pick-color/src/main/java/ru/tech/imageresizershrinker/feature/pick_color/presentation/components/PickColorFromImageTopAppBar.kt b/feature/pick-color/src/main/java/ru/tech/imageresizershrinker/feature/pick_color/presentation/components/PickColorFromImageTopAppBar.kt index 85be7e8d2c..c27d311187 100644 --- a/feature/pick-color/src/main/java/ru/tech/imageresizershrinker/feature/pick_color/presentation/components/PickColorFromImageTopAppBar.kt +++ b/feature/pick-color/src/main/java/ru/tech/imageresizershrinker/feature/pick_color/presentation/components/PickColorFromImageTopAppBar.kt @@ -169,10 +169,7 @@ internal fun PickColorFromImageTopAppBar( .padding(horizontal = 8.dp) .clip(RoundedCornerShape(8.dp)) .hapticsClickable { - context.copyToClipboard( - context.getString(R.string.color), - color.toHex() - ) + context.copyToClipboard(color.toHex()) essentials.showToast( icon = Icons.Rounded.ContentPaste, message = context.getString(R.string.color_copied) @@ -226,10 +223,7 @@ internal fun PickColorFromImageTopAppBar( ) .clip(RoundedCornerShape(12.dp)) .hapticsClickable { - context.copyToClipboard( - context.getString(R.string.color), - color.toHex() - ) + context.copyToClipboard(color.toHex()) essentials.showToast( icon = Icons.Rounded.ContentPaste, message = context.getString(R.string.color_copied) @@ -264,10 +258,7 @@ internal fun PickColorFromImageTopAppBar( .padding(horizontal = 8.dp) .clip(RoundedCornerShape(8.dp)) .hapticsClickable { - context.copyToClipboard( - context.getString(R.string.color), - color.toHex() - ) + context.copyToClipboard(color.toHex()) essentials.showToast( icon = Icons.Rounded.ContentPaste, message = context.getString(R.string.color_copied) @@ -313,10 +304,7 @@ internal fun PickColorFromImageTopAppBar( ) .clip(RoundedCornerShape(12.dp)) .hapticsClickable { - context.copyToClipboard( - context.getString(R.string.color), - color.toHex() - ) + context.copyToClipboard(color.toHex()) essentials.showToast( icon = Icons.Rounded.ContentPaste, message = context.getString(R.string.color_copied) diff --git a/feature/recognize-text/src/main/java/ru/tech/imageresizershrinker/feature/recognize/text/presentation/RecognizeTextContent.kt b/feature/recognize-text/src/main/java/ru/tech/imageresizershrinker/feature/recognize/text/presentation/RecognizeTextContent.kt index 7fd0d7a8ac..c64faf962b 100644 --- a/feature/recognize-text/src/main/java/ru/tech/imageresizershrinker/feature/recognize/text/presentation/RecognizeTextContent.kt +++ b/feature/recognize-text/src/main/java/ru/tech/imageresizershrinker/feature/recognize/text/presentation/RecognizeTextContent.kt @@ -190,10 +190,7 @@ fun RecognizeTextContent( val copyText: () -> Unit = { editedText?.let { - context.copyToClipboard( - label = context.getString(R.string.recognize_text), - value = it - ) + context.copyToClipboard(it) essentials.showToast( icon = Icons.Rounded.ContentCopy, message = context.getString(R.string.copied), diff --git a/feature/resize-convert/src/main/java/ru/tech/imageresizershrinker/feature/resize_convert/presentation/ResizeAndConvertContent.kt b/feature/resize-convert/src/main/java/ru/tech/imageresizershrinker/feature/resize_convert/presentation/ResizeAndConvertContent.kt index 33b280a40b..08b642a2c3 100644 --- a/feature/resize-convert/src/main/java/ru/tech/imageresizershrinker/feature/resize_convert/presentation/ResizeAndConvertContent.kt +++ b/feature/resize-convert/src/main/java/ru/tech/imageresizershrinker/feature/resize_convert/presentation/ResizeAndConvertContent.kt @@ -177,7 +177,7 @@ fun ResizeAndConvertContent( }, onCopy = { manager -> component.cacheCurrentImage { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } }, diff --git a/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/RootDialogs.kt b/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/RootDialogs.kt index 03a1f9b0f0..29aada892a 100644 --- a/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/RootDialogs.kt +++ b/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/RootDialogs.kt @@ -17,13 +17,11 @@ package ru.tech.imageresizershrinker.feature.root.presentation.components -import android.content.ClipData -import android.os.Build import androidx.compose.runtime.Composable -import androidx.compose.ui.platform.LocalClipboardManager import ru.tech.imageresizershrinker.core.settings.presentation.provider.LocalEditPresetsController import ru.tech.imageresizershrinker.core.ui.utils.helper.ReviewHandler import ru.tech.imageresizershrinker.core.ui.utils.provider.LocalComponentActivity +import ru.tech.imageresizershrinker.core.ui.utils.provider.rememberLocalEssentials import ru.tech.imageresizershrinker.core.ui.widget.UpdateSheet import ru.tech.imageresizershrinker.core.ui.widget.sheets.ProcessImagesPreferenceSheet import ru.tech.imageresizershrinker.feature.root.presentation.components.dialogs.EditPresetsSheet @@ -45,7 +43,7 @@ internal fun RootDialogs(component: RootComponent) { onUpdatePresets = component::setPresets ) - val clipboardManager = LocalClipboardManager.current.nativeClipboard + val essentials = rememberLocalEssentials() ProcessImagesPreferenceSheet( uris = component.uris ?: emptyList(), extraImageType = component.extraImageType, @@ -53,19 +51,7 @@ internal fun RootDialogs(component: RootComponent) { onDismiss = component::hideSelectDialog, onNavigate = { screen -> component.navigateTo(screen) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - runCatching { - clipboardManager.clearPrimaryClip() - }.onFailure { - clipboardManager.setPrimaryClip( - ClipData.newPlainText(null, "") - ) - } - } else { - clipboardManager.setPrimaryClip( - ClipData.newPlainText(null, "") - ) - } + essentials.clearClipboard() } ) diff --git a/feature/scan-qr-code/src/main/java/ru/tech/imageresizershrinker/feature/scan_qr_code/presentation/ScanQrCodeContent.kt b/feature/scan-qr-code/src/main/java/ru/tech/imageresizershrinker/feature/scan_qr_code/presentation/ScanQrCodeContent.kt index 2e84e36fdb..7db4379a24 100644 --- a/feature/scan-qr-code/src/main/java/ru/tech/imageresizershrinker/feature/scan_qr_code/presentation/ScanQrCodeContent.kt +++ b/feature/scan-qr-code/src/main/java/ru/tech/imageresizershrinker/feature/scan_qr_code/presentation/ScanQrCodeContent.kt @@ -172,7 +172,7 @@ fun ScanQrCodeContent( scope.launch { val bitmap = captureController.captureAsync().await().asAndroidBitmap() component.cacheImage(bitmap) { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } } diff --git a/feature/settings/src/main/java/ru/tech/imageresizershrinker/feature/settings/presentation/components/additional/DonateContainerContent.kt b/feature/settings/src/main/java/ru/tech/imageresizershrinker/feature/settings/presentation/components/additional/DonateContainerContent.kt index 13d70a57b9..07481c7ee7 100644 --- a/feature/settings/src/main/java/ru/tech/imageresizershrinker/feature/settings/presentation/components/additional/DonateContainerContent.kt +++ b/feature/settings/src/main/java/ru/tech/imageresizershrinker/feature/settings/presentation/components/additional/DonateContainerContent.kt @@ -97,10 +97,7 @@ fun DonateContainerContent( shape = ContainerShapeDefaults.topShape, onClick = { context.apply { - copyToClipboard( - label = getString(R.string.ton_space), - value = TONSpaceWallet - ) + copyToClipboard(TONSpaceWallet) scope.launch { toastHostState.showToast( icon = Icons.Rounded.ContentCopy, @@ -125,10 +122,7 @@ fun DonateContainerContent( shape = ContainerShapeDefaults.centerShape, onClick = { context.apply { - copyToClipboard( - label = getString(R.string.ton), - value = TONWallet - ) + copyToClipboard(TONWallet) scope.launch { toastHostState.showToast( icon = Icons.Rounded.ContentCopy, @@ -153,10 +147,7 @@ fun DonateContainerContent( shape = ContainerShapeDefaults.centerShape, onClick = { context.apply { - copyToClipboard( - label = getString(R.string.bitcoin), - value = BitcoinWallet - ) + copyToClipboard(BitcoinWallet) scope.launch { toastHostState.showToast( icon = Icons.Rounded.ContentCopy, @@ -181,10 +172,7 @@ fun DonateContainerContent( shape = ContainerShapeDefaults.bottomShape, onClick = { context.apply { - copyToClipboard( - label = getString(R.string.usdt), - value = USDTWallet - ) + copyToClipboard(USDTWallet) scope.launch { toastHostState.showToast( icon = Icons.Rounded.ContentCopy, diff --git a/feature/single-edit/src/main/java/ru/tech/imageresizershrinker/feature/single_edit/presentation/SingleEditContent.kt b/feature/single-edit/src/main/java/ru/tech/imageresizershrinker/feature/single_edit/presentation/SingleEditContent.kt index 0be4770b61..4b75019806 100644 --- a/feature/single-edit/src/main/java/ru/tech/imageresizershrinker/feature/single_edit/presentation/SingleEditContent.kt +++ b/feature/single-edit/src/main/java/ru/tech/imageresizershrinker/feature/single_edit/presentation/SingleEditContent.kt @@ -185,7 +185,7 @@ fun SingleEditContent( }, onCopy = { manager -> component.cacheCurrentImage { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } }, diff --git a/feature/watermarking/src/main/java/ru/tech/imageresizershrinker/feature/watermarking/presentation/WatermarkingContent.kt b/feature/watermarking/src/main/java/ru/tech/imageresizershrinker/feature/watermarking/presentation/WatermarkingContent.kt index a2d4e41737..cb3e6728d7 100644 --- a/feature/watermarking/src/main/java/ru/tech/imageresizershrinker/feature/watermarking/presentation/WatermarkingContent.kt +++ b/feature/watermarking/src/main/java/ru/tech/imageresizershrinker/feature/watermarking/presentation/WatermarkingContent.kt @@ -154,7 +154,7 @@ fun WatermarkingContent( }, onCopy = { manager -> component.cacheCurrentImage { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } }, diff --git a/feature/weight-resize/src/main/java/ru/tech/imageresizershrinker/feature/weight_resize/presentation/WeightResizeContent.kt b/feature/weight-resize/src/main/java/ru/tech/imageresizershrinker/feature/weight_resize/presentation/WeightResizeContent.kt index 3ef0ed0915..240266c54e 100644 --- a/feature/weight-resize/src/main/java/ru/tech/imageresizershrinker/feature/weight_resize/presentation/WeightResizeContent.kt +++ b/feature/weight-resize/src/main/java/ru/tech/imageresizershrinker/feature/weight_resize/presentation/WeightResizeContent.kt @@ -166,7 +166,7 @@ fun WeightResizeContent( }, onCopy = { manager -> component.cacheCurrentImage { uri -> - manager.setClip(uri.asClip(context)) + manager.copyToClipboard(uri.asClip(context)) showConfetti() } },