mirror of
https://github.com/T8RIN/ImageToolbox.git
synced 2025-08-06 15:49:35 +08:00
Improve haptics
This commit is contained in:
@ -88,7 +88,7 @@ import ru.tech.imageresizershrinker.core.ui.theme.outlineVariant
|
|||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.image.Picture
|
import ru.tech.imageresizershrinker.core.ui.widget.image.Picture
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
|
@ -77,7 +77,7 @@ import ru.tech.imageresizershrinker.core.ui.theme.outlineVariant
|
|||||||
import ru.tech.imageresizershrinker.core.ui.utils.helper.ContextUtils.isNetworkAvailable
|
import ru.tech.imageresizershrinker.core.ui.utils.helper.ContextUtils.isNetworkAvailable
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.helper.toImageModel
|
import ru.tech.imageresizershrinker.core.ui.utils.helper.toImageModel
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.shimmer
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.shimmer
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.transparencyChecker
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.transparencyChecker
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.other.LocalToastHostState
|
import ru.tech.imageresizershrinker.core.ui.widget.other.LocalToastHostState
|
||||||
|
@ -65,7 +65,7 @@ import ru.tech.imageresizershrinker.core.ui.theme.White
|
|||||||
import ru.tech.imageresizershrinker.core.ui.theme.outlineVariant
|
import ru.tech.imageresizershrinker.core.ui.theme.outlineVariant
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.helper.toImageModel
|
import ru.tech.imageresizershrinker.core.ui.utils.helper.toImageModel
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.shimmer
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.shimmer
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.transparencyChecker
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.transparencyChecker
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.preferences.PreferenceItemOverload
|
import ru.tech.imageresizershrinker.core.ui.widget.preferences.PreferenceItemOverload
|
||||||
|
@ -67,7 +67,7 @@ import ru.tech.imageresizershrinker.core.ui.widget.buttons.ShareButton
|
|||||||
import ru.tech.imageresizershrinker.core.ui.widget.controls.selection.ImageSelector
|
import ru.tech.imageresizershrinker.core.ui.widget.controls.selection.ImageSelector
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.dialogs.OneTimeSaveLocationSelectionDialog
|
import ru.tech.imageresizershrinker.core.ui.widget.dialogs.OneTimeSaveLocationSelectionDialog
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.image.Picture
|
import ru.tech.imageresizershrinker.core.ui.widget.image.Picture
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
|
@ -34,7 +34,7 @@ import ru.tech.imageresizershrinker.core.settings.presentation.provider.LocalSim
|
|||||||
import ru.tech.imageresizershrinker.core.settings.presentation.provider.rememberEditPresetsController
|
import ru.tech.imageresizershrinker.core.settings.presentation.provider.rememberEditPresetsController
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.confetti.LocalConfettiHostState
|
import ru.tech.imageresizershrinker.core.ui.utils.confetti.LocalConfettiHostState
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.confetti.rememberConfettiHostState
|
import ru.tech.imageresizershrinker.core.ui.utils.confetti.rememberConfettiHostState
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.rememberCustomHapticFeedback
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.rememberEnhancedHapticFeedback
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.other.LocalToastHostState
|
import ru.tech.imageresizershrinker.core.ui.widget.other.LocalToastHostState
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.other.ToastHostState
|
import ru.tech.imageresizershrinker.core.ui.widget.other.ToastHostState
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.other.rememberToastHostState
|
import ru.tech.imageresizershrinker.core.ui.widget.other.rememberToastHostState
|
||||||
@ -49,7 +49,7 @@ fun ImageToolboxCompositionLocals(
|
|||||||
val editPresetsController = rememberEditPresetsController()
|
val editPresetsController = rememberEditPresetsController()
|
||||||
val confettiHostState = rememberConfettiHostState()
|
val confettiHostState = rememberConfettiHostState()
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val customHapticFeedback = rememberCustomHapticFeedback(settingsState.hapticsStrength)
|
val customHapticFeedback = rememberEnhancedHapticFeedback(settingsState.hapticsStrength)
|
||||||
|
|
||||||
val values = remember(
|
val values = remember(
|
||||||
toastHostState,
|
toastHostState,
|
||||||
|
@ -34,7 +34,7 @@ import androidx.compose.ui.graphics.Color
|
|||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
import androidx.compose.ui.platform.LocalDensity
|
import androidx.compose.ui.platform.LocalDensity
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun SupportingButton(
|
fun SupportingButton(
|
||||||
|
@ -91,7 +91,7 @@ import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
|||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalSheetDragHandle
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalSheetDragHandle
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedSliderItem
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedSliderItem
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.palette_selection.PaletteStyleSelection
|
import ru.tech.imageresizershrinker.core.ui.widget.palette_selection.PaletteStyleSelection
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.preferences.PreferenceRowSwitch
|
import ru.tech.imageresizershrinker.core.ui.widget.preferences.PreferenceRowSwitch
|
||||||
|
@ -76,7 +76,7 @@ import ru.tech.imageresizershrinker.core.ui.utils.helper.ContextUtils.pasteColor
|
|||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedAlertDialog
|
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.EnhancedButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.transparencyChecker
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.transparencyChecker
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.text.AutoSizeText
|
import ru.tech.imageresizershrinker.core.ui.widget.text.AutoSizeText
|
||||||
@ -333,11 +333,3 @@ private fun getFormattedColor(color: Int): String {
|
|||||||
colorToHexAlpha(Color(color))
|
colorToHexAlpha(Color(color))
|
||||||
}.uppercase()
|
}.uppercase()
|
||||||
}
|
}
|
||||||
|
|
||||||
private operator fun String.times(i: Int): String {
|
|
||||||
var s = ""
|
|
||||||
repeat(i) {
|
|
||||||
s += this
|
|
||||||
}
|
|
||||||
return s
|
|
||||||
}
|
|
@ -21,7 +21,6 @@ import androidx.compose.animation.AnimatedVisibility
|
|||||||
import androidx.compose.animation.core.animateFloatAsState
|
import androidx.compose.animation.core.animateFloatAsState
|
||||||
import androidx.compose.animation.core.tween
|
import androidx.compose.animation.core.tween
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.combinedClickable
|
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
@ -80,7 +79,8 @@ import ru.tech.imageresizershrinker.core.ui.theme.inverse
|
|||||||
import ru.tech.imageresizershrinker.core.ui.utils.helper.ContextUtils.pasteColorFromClipboard
|
import ru.tech.imageresizershrinker.core.ui.utils.helper.ContextUtils.pasteColorFromClipboard
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsCombinedClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.animateShape
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.animateShape
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.fadingEdges
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.fadingEdges
|
||||||
@ -167,7 +167,7 @@ fun ColorSelectionRow(
|
|||||||
)
|
)
|
||||||
.transparencyChecker()
|
.transparencyChecker()
|
||||||
.background(background, shape)
|
.background(background, shape)
|
||||||
.combinedClickable(
|
.hapticsCombinedClickable(
|
||||||
onLongClick = {
|
onLongClick = {
|
||||||
context.pasteColorFromClipboard(
|
context.pasteColorFromClipboard(
|
||||||
onPastedColor = {
|
onPastedColor = {
|
||||||
@ -183,10 +183,11 @@ fun ColorSelectionRow(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
},
|
||||||
|
onClick = {
|
||||||
|
showColorPicker = true
|
||||||
}
|
}
|
||||||
) {
|
),
|
||||||
showColorPicker = true
|
|
||||||
},
|
|
||||||
contentAlignment = Alignment.Center
|
contentAlignment = Alignment.Center
|
||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
|
@ -21,7 +21,6 @@ import androidx.compose.animation.AnimatedContent
|
|||||||
import androidx.compose.animation.animateColorAsState
|
import androidx.compose.animation.animateColorAsState
|
||||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.combinedClickable
|
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.BoxWithConstraints
|
import androidx.compose.foundation.layout.BoxWithConstraints
|
||||||
import androidx.compose.foundation.layout.aspectRatio
|
import androidx.compose.foundation.layout.aspectRatio
|
||||||
@ -52,6 +51,7 @@ import ru.tech.imageresizershrinker.core.settings.presentation.provider.LocalSet
|
|||||||
import ru.tech.imageresizershrinker.core.ui.shapes.MaterialStarShape
|
import ru.tech.imageresizershrinker.core.ui.shapes.MaterialStarShape
|
||||||
import ru.tech.imageresizershrinker.core.ui.theme.inverse
|
import ru.tech.imageresizershrinker.core.ui.theme.inverse
|
||||||
import ru.tech.imageresizershrinker.core.ui.theme.outlineVariant
|
import ru.tech.imageresizershrinker.core.ui.theme.outlineVariant
|
||||||
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
|
|
||||||
@OptIn(ExperimentalFoundationApi::class)
|
@OptIn(ExperimentalFoundationApi::class)
|
||||||
@ -90,9 +90,7 @@ fun ColorTuplePreview(
|
|||||||
borderColor = MaterialTheme.colorScheme.outlineVariant(0.2f),
|
borderColor = MaterialTheme.colorScheme.outlineVariant(0.2f),
|
||||||
resultPadding = 0.dp
|
resultPadding = 0.dp
|
||||||
)
|
)
|
||||||
.combinedClickable(
|
.hapticsClickable(onClick = onClick)
|
||||||
onClick = onClick
|
|
||||||
)
|
|
||||||
.padding(3.dp)
|
.padding(3.dp)
|
||||||
.clip(CircleShape),
|
.clip(CircleShape),
|
||||||
backgroundColor = Color.Transparent
|
backgroundColor = Color.Transparent
|
||||||
|
@ -74,7 +74,7 @@ import ru.tech.imageresizershrinker.core.ui.utils.helper.sortedByType
|
|||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.image.Picture
|
import ru.tech.imageresizershrinker.core.ui.widget.image.Picture
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
package ru.tech.imageresizershrinker.core.ui.widget.controls.selection
|
package ru.tech.imageresizershrinker.core.ui.widget.controls.selection
|
||||||
|
|
||||||
import androidx.compose.animation.AnimatedContent
|
import androidx.compose.animation.AnimatedContent
|
||||||
import androidx.compose.foundation.combinedClickable
|
|
||||||
import androidx.compose.foundation.gestures.detectTapGestures
|
import androidx.compose.foundation.gestures.detectTapGestures
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
@ -46,7 +45,6 @@ import androidx.compose.ui.Modifier
|
|||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
|
|
||||||
import androidx.compose.ui.input.pointer.pointerInput
|
import androidx.compose.ui.input.pointer.pointerInput
|
||||||
import androidx.compose.ui.platform.LocalHapticFeedback
|
import androidx.compose.ui.platform.LocalHapticFeedback
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
@ -60,6 +58,7 @@ import ru.tech.imageresizershrinker.core.settings.presentation.provider.LocalSet
|
|||||||
import ru.tech.imageresizershrinker.core.ui.shapes.IconShapeContainer
|
import ru.tech.imageresizershrinker.core.ui.shapes.IconShapeContainer
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.color_picker.ColorSelectionRow
|
import ru.tech.imageresizershrinker.core.ui.widget.color_picker.ColorSelectionRow
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.color_picker.ColorSelectionRowDefaults
|
import ru.tech.imageresizershrinker.core.ui.widget.color_picker.ColorSelectionRowDefaults
|
||||||
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsCombinedClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.other.BoxAnimatedVisibility
|
import ru.tech.imageresizershrinker.core.ui.widget.other.BoxAnimatedVisibility
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.text.TitleItem
|
import ru.tech.imageresizershrinker.core.ui.widget.text.TitleItem
|
||||||
@ -142,7 +141,7 @@ fun ColorRowSelector(
|
|||||||
},
|
},
|
||||||
state = tooltipState,
|
state = tooltipState,
|
||||||
content = {
|
content = {
|
||||||
val haptics = LocalHapticFeedback.current
|
LocalHapticFeedback.current
|
||||||
IconShapeContainer(
|
IconShapeContainer(
|
||||||
enabled = true,
|
enabled = true,
|
||||||
content = {
|
content = {
|
||||||
@ -159,17 +158,11 @@ fun ColorRowSelector(
|
|||||||
LocalSettingsState.current.iconShape?.shape
|
LocalSettingsState.current.iconShape?.shape
|
||||||
?: CircleShape
|
?: CircleShape
|
||||||
)
|
)
|
||||||
.combinedClickable(
|
.hapticsCombinedClickable(
|
||||||
onLongClick = {
|
onLongClick = {
|
||||||
haptics.performHapticFeedback(
|
|
||||||
HapticFeedbackType.TextHandleMove
|
|
||||||
)
|
|
||||||
scope.launch { tooltipState.show() }
|
scope.launch { tooltipState.show() }
|
||||||
},
|
},
|
||||||
onClick = {
|
onClick = {
|
||||||
haptics.performHapticFeedback(
|
|
||||||
HapticFeedbackType.TextHandleMove
|
|
||||||
)
|
|
||||||
scope.launch { tooltipState.show() }
|
scope.launch { tooltipState.show() }
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -57,7 +57,6 @@ import androidx.compose.runtime.saveable.rememberSaveable
|
|||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
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.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.platform.LocalHapticFeedback
|
import androidx.compose.ui.platform.LocalHapticFeedback
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
@ -73,7 +72,7 @@ import ru.tech.imageresizershrinker.core.ui.theme.takeColorFromScheme
|
|||||||
import ru.tech.imageresizershrinker.core.ui.utils.helper.toUiPath
|
import ru.tech.imageresizershrinker.core.ui.utils.helper.toUiPath
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedAlertDialog
|
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.EnhancedButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.fadingEdges
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.fadingEdges
|
||||||
@ -252,7 +251,7 @@ fun OneTimeSaveLocationSelectionDialog(
|
|||||||
},
|
},
|
||||||
directions = setOf(RevealDirection.EndToStart),
|
directions = setOf(RevealDirection.EndToStart),
|
||||||
swipeableContent = {
|
swipeableContent = {
|
||||||
val haptics = LocalHapticFeedback.current
|
LocalHapticFeedback.current
|
||||||
PreferenceItem(
|
PreferenceItem(
|
||||||
title = title,
|
title = title,
|
||||||
subtitle = subtitle,
|
subtitle = subtitle,
|
||||||
@ -266,9 +265,6 @@ fun OneTimeSaveLocationSelectionDialog(
|
|||||||
},
|
},
|
||||||
onLongClick = if (item != null) {
|
onLongClick = if (item != null) {
|
||||||
{
|
{
|
||||||
haptics.performHapticFeedback(
|
|
||||||
HapticFeedbackType.LongPress
|
|
||||||
)
|
|
||||||
scope.launch {
|
scope.launch {
|
||||||
state.animateTo(RevealValue.FullyRevealedStart)
|
state.animateTo(RevealValue.FullyRevealedStart)
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,6 @@ import androidx.compose.ui.unit.Dp
|
|||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import ru.tech.imageresizershrinker.core.ui.theme.outlineVariant
|
import ru.tech.imageresizershrinker.core.ui.theme.outlineVariant
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.provider.LocalContainerShape
|
import ru.tech.imageresizershrinker.core.ui.utils.provider.LocalContainerShape
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* ImageToolbox is an image editor for android
|
* ImageToolbox is an image editor for android
|
||||||
* Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)
|
* Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
@file:Suppress("DEPRECATION")
|
@file:Suppress("DEPRECATION")
|
||||||
|
|
||||||
package ru.tech.imageresizershrinker.core.ui.widget.haptics
|
package ru.tech.imageresizershrinker.core.ui.widget.enhanced
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
@ -28,6 +28,7 @@ import android.view.accessibility.AccessibilityManager
|
|||||||
import androidx.compose.foundation.Indication
|
import androidx.compose.foundation.Indication
|
||||||
import androidx.compose.foundation.LocalIndication
|
import androidx.compose.foundation.LocalIndication
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
|
import androidx.compose.foundation.combinedClickable
|
||||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.derivedStateOf
|
import androidx.compose.runtime.derivedStateOf
|
||||||
@ -64,7 +65,7 @@ private fun Context.isTouchExplorationEnabled(): Boolean {
|
|||||||
return accessibilityManager?.isTouchExplorationEnabled == true
|
return accessibilityManager?.isTouchExplorationEnabled == true
|
||||||
}
|
}
|
||||||
|
|
||||||
internal data class CustomHapticFeedback(
|
internal data class EnhancedHapticFeedback(
|
||||||
val hapticsStrength: Int,
|
val hapticsStrength: Int,
|
||||||
val view: View
|
val view: View
|
||||||
) : HapticFeedback {
|
) : HapticFeedback {
|
||||||
@ -120,13 +121,13 @@ internal data object EmptyHaptics : HapticFeedback {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun rememberCustomHapticFeedback(hapticsStrength: Int): HapticFeedback {
|
fun rememberEnhancedHapticFeedback(hapticsStrength: Int): HapticFeedback {
|
||||||
val view = LocalView.current
|
val view = LocalView.current
|
||||||
|
|
||||||
val haptics by remember(hapticsStrength) {
|
val haptics by remember(hapticsStrength) {
|
||||||
derivedStateOf {
|
derivedStateOf {
|
||||||
if (hapticsStrength == 0) EmptyHaptics
|
if (hapticsStrength == 0) EmptyHaptics
|
||||||
else CustomHapticFeedback(
|
else EnhancedHapticFeedback(
|
||||||
hapticsStrength = hapticsStrength,
|
hapticsStrength = hapticsStrength,
|
||||||
view = view
|
view = view
|
||||||
)
|
)
|
||||||
@ -174,3 +175,66 @@ fun Modifier.hapticsClickable(
|
|||||||
onClick = onClick
|
onClick = onClick
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Modifier.hapticsCombinedClickable(
|
||||||
|
interactionSource: MutableInteractionSource?,
|
||||||
|
indication: Indication?,
|
||||||
|
enabled: Boolean = true,
|
||||||
|
onClickLabel: String? = null,
|
||||||
|
role: Role? = null,
|
||||||
|
onLongClickLabel: String? = null,
|
||||||
|
onLongClick: (() -> Unit)? = null,
|
||||||
|
onDoubleClick: (() -> Unit)? = null,
|
||||||
|
onClick: () -> Unit
|
||||||
|
) = this.composed {
|
||||||
|
val haptics = LocalHapticFeedback.current
|
||||||
|
|
||||||
|
Modifier.combinedClickable(
|
||||||
|
interactionSource = interactionSource,
|
||||||
|
indication = indication,
|
||||||
|
enabled = enabled,
|
||||||
|
onClickLabel = onClickLabel,
|
||||||
|
role = role,
|
||||||
|
onLongClickLabel = onLongClickLabel,
|
||||||
|
onLongClick = if (onLongClick != null) {
|
||||||
|
{
|
||||||
|
haptics.performHapticFeedback(HapticFeedbackType.LongPress)
|
||||||
|
onLongClick()
|
||||||
|
}
|
||||||
|
} else null,
|
||||||
|
onDoubleClick = if (onDoubleClick != null) {
|
||||||
|
{
|
||||||
|
haptics.performHapticFeedback(HapticFeedbackType.TextHandleMove)
|
||||||
|
haptics.performHapticFeedback(HapticFeedbackType.LongPress)
|
||||||
|
onDoubleClick()
|
||||||
|
}
|
||||||
|
} else null,
|
||||||
|
hapticFeedbackEnabled = false,
|
||||||
|
onClick = {
|
||||||
|
haptics.performHapticFeedback(HapticFeedbackType.LongPress)
|
||||||
|
onClick()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Modifier.hapticsCombinedClickable(
|
||||||
|
enabled: Boolean = true,
|
||||||
|
onClickLabel: String? = null,
|
||||||
|
role: Role? = null,
|
||||||
|
onLongClickLabel: String? = null,
|
||||||
|
onLongClick: (() -> Unit)? = null,
|
||||||
|
onDoubleClick: (() -> Unit)? = null,
|
||||||
|
onClick: () -> Unit
|
||||||
|
) = this.composed {
|
||||||
|
hapticsCombinedClickable(
|
||||||
|
interactionSource = null,
|
||||||
|
indication = LocalIndication.current,
|
||||||
|
enabled = enabled,
|
||||||
|
onClickLabel = onClickLabel,
|
||||||
|
role = role,
|
||||||
|
onLongClickLabel = onLongClickLabel,
|
||||||
|
onLongClick = onLongClick,
|
||||||
|
onDoubleClick = onDoubleClick,
|
||||||
|
onClick = onClick
|
||||||
|
)
|
||||||
|
}
|
@ -26,7 +26,6 @@ import androidx.compose.animation.fadeIn
|
|||||||
import androidx.compose.animation.fadeOut
|
import androidx.compose.animation.fadeOut
|
||||||
import androidx.compose.animation.shrinkVertically
|
import androidx.compose.animation.shrinkVertically
|
||||||
import androidx.compose.animation.togetherWith
|
import androidx.compose.animation.togetherWith
|
||||||
import androidx.compose.foundation.combinedClickable
|
|
||||||
import androidx.compose.foundation.gestures.detectTapGestures
|
import androidx.compose.foundation.gestures.detectTapGestures
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
@ -59,7 +58,6 @@ import androidx.compose.ui.draw.clip
|
|||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.Shape
|
import androidx.compose.ui.graphics.Shape
|
||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
|
|
||||||
import androidx.compose.ui.input.pointer.pointerInput
|
import androidx.compose.ui.input.pointer.pointerInput
|
||||||
import androidx.compose.ui.platform.LocalHapticFeedback
|
import androidx.compose.ui.platform.LocalHapticFeedback
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
@ -224,7 +222,7 @@ fun EnhancedSliderItem(
|
|||||||
},
|
},
|
||||||
state = tooltipState,
|
state = tooltipState,
|
||||||
content = {
|
content = {
|
||||||
val haptics = LocalHapticFeedback.current
|
LocalHapticFeedback.current
|
||||||
IconShapeContainer(
|
IconShapeContainer(
|
||||||
enabled = true,
|
enabled = true,
|
||||||
content = {
|
content = {
|
||||||
@ -242,17 +240,11 @@ fun EnhancedSliderItem(
|
|||||||
LocalSettingsState.current.iconShape?.shape
|
LocalSettingsState.current.iconShape?.shape
|
||||||
?: CircleShape
|
?: CircleShape
|
||||||
)
|
)
|
||||||
.combinedClickable(
|
.hapticsCombinedClickable(
|
||||||
onLongClick = {
|
onLongClick = {
|
||||||
haptics.performHapticFeedback(
|
|
||||||
HapticFeedbackType.TextHandleMove
|
|
||||||
)
|
|
||||||
scope.launch { tooltipState.show() }
|
scope.launch { tooltipState.show() }
|
||||||
},
|
},
|
||||||
onClick = {
|
onClick = {
|
||||||
haptics.performHapticFeedback(
|
|
||||||
HapticFeedbackType.TextHandleMove
|
|
||||||
)
|
|
||||||
scope.launch { tooltipState.show() }
|
scope.launch { tooltipState.show() }
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -73,7 +73,7 @@ import ru.tech.imageresizershrinker.core.domain.utils.trimTrailingZero
|
|||||||
import ru.tech.imageresizershrinker.core.resources.R
|
import ru.tech.imageresizershrinker.core.resources.R
|
||||||
import ru.tech.imageresizershrinker.core.ui.theme.outlineVariant
|
import ru.tech.imageresizershrinker.core.ui.theme.outlineVariant
|
||||||
import ru.tech.imageresizershrinker.core.ui.theme.takeColorFromScheme
|
import ru.tech.imageresizershrinker.core.ui.theme.takeColorFromScheme
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.fadingEdges
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.fadingEdges
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.text.RoundedTextField
|
import ru.tech.imageresizershrinker.core.ui.widget.text.RoundedTextField
|
||||||
|
@ -36,7 +36,7 @@ import androidx.compose.ui.text.style.TextAlign
|
|||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import ru.tech.imageresizershrinker.core.resources.R
|
import ru.tech.imageresizershrinker.core.resources.R
|
||||||
import ru.tech.imageresizershrinker.core.ui.shapes.CloverShape
|
import ru.tech.imageresizershrinker.core.ui.shapes.CloverShape
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
@ -53,7 +53,7 @@ import ru.tech.imageresizershrinker.core.resources.R
|
|||||||
import ru.tech.imageresizershrinker.core.ui.utils.content_pickers.rememberImagePicker
|
import ru.tech.imageresizershrinker.core.ui.utils.content_pickers.rememberImagePicker
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.navigation.Screen
|
import ru.tech.imageresizershrinker.core.ui.utils.navigation.Screen
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.provider.LocalImageLoader
|
import ru.tech.imageresizershrinker.core.ui.utils.provider.LocalImageLoader
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.utils.AutoContentBasedColors
|
import ru.tech.imageresizershrinker.core.ui.widget.utils.AutoContentBasedColors
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ import androidx.compose.ui.unit.dp
|
|||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import ru.tech.imageresizershrinker.core.resources.R
|
import ru.tech.imageresizershrinker.core.resources.R
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.helper.ContextUtils.getFilename
|
import ru.tech.imageresizershrinker.core.ui.utils.helper.ContextUtils.getFilename
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.text.AutoSizeText
|
import ru.tech.imageresizershrinker.core.ui.widget.text.AutoSizeText
|
||||||
|
|
||||||
|
@ -26,7 +26,6 @@ import androidx.compose.animation.fadeIn
|
|||||||
import androidx.compose.animation.fadeOut
|
import androidx.compose.animation.fadeOut
|
||||||
import androidx.compose.animation.shrinkVertically
|
import androidx.compose.animation.shrinkVertically
|
||||||
import androidx.compose.foundation.LocalIndication
|
import androidx.compose.foundation.LocalIndication
|
||||||
import androidx.compose.foundation.combinedClickable
|
|
||||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
@ -52,11 +51,11 @@ import androidx.compose.ui.draw.clip
|
|||||||
import androidx.compose.ui.draw.rotate
|
import androidx.compose.ui.draw.rotate
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.Shape
|
import androidx.compose.ui.graphics.Shape
|
||||||
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
|
|
||||||
import androidx.compose.ui.platform.LocalHapticFeedback
|
import androidx.compose.ui.platform.LocalHapticFeedback
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.animation.FancyTransitionEasing
|
import ru.tech.imageresizershrinker.core.ui.utils.animation.FancyTransitionEasing
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
||||||
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsCombinedClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -74,7 +73,7 @@ fun ExpandableItem(
|
|||||||
onLongClick: (() -> Unit)? = null,
|
onLongClick: (() -> Unit)? = null,
|
||||||
expansionIconContainerColor: Color = Color.Transparent
|
expansionIconContainerColor: Color = Color.Transparent
|
||||||
) {
|
) {
|
||||||
val haptics = LocalHapticFeedback.current
|
LocalHapticFeedback.current
|
||||||
Column(
|
Column(
|
||||||
Modifier
|
Modifier
|
||||||
.animateContentSize(
|
.animateContentSize(
|
||||||
@ -92,21 +91,11 @@ fun ExpandableItem(
|
|||||||
Row(
|
Row(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.clip(shape)
|
.clip(shape)
|
||||||
.combinedClickable(
|
.hapticsCombinedClickable(
|
||||||
interactionSource = interactionSource,
|
interactionSource = interactionSource,
|
||||||
indication = LocalIndication.current,
|
indication = LocalIndication.current,
|
||||||
onLongClick = if (onLongClick != null) {
|
onLongClick = onLongClick
|
||||||
{
|
|
||||||
haptics.performHapticFeedback(
|
|
||||||
HapticFeedbackType.LongPress
|
|
||||||
)
|
|
||||||
onLongClick()
|
|
||||||
}
|
|
||||||
} else null
|
|
||||||
) {
|
) {
|
||||||
haptics.performHapticFeedback(
|
|
||||||
HapticFeedbackType.LongPress
|
|
||||||
)
|
|
||||||
if (canExpand) {
|
if (canExpand) {
|
||||||
expanded = !expanded
|
expanded = !expanded
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,6 @@ package ru.tech.imageresizershrinker.core.ui.widget.other
|
|||||||
import android.content.ClipData
|
import android.content.ClipData
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.combinedClickable
|
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
@ -63,6 +62,7 @@ import kotlinx.coroutines.launch
|
|||||||
import ru.tech.imageresizershrinker.core.resources.R
|
import ru.tech.imageresizershrinker.core.resources.R
|
||||||
import ru.tech.imageresizershrinker.core.ui.shapes.MaterialStarShape
|
import ru.tech.imageresizershrinker.core.ui.shapes.MaterialStarShape
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.helper.LinkPreview
|
import ru.tech.imageresizershrinker.core.ui.utils.helper.LinkPreview
|
||||||
|
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.image.Picture
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ fun LinkPreviewCard(
|
|||||||
color = MaterialTheme.colorScheme.surface,
|
color = MaterialTheme.colorScheme.surface,
|
||||||
resultPadding = 0.dp
|
resultPadding = 0.dp
|
||||||
)
|
)
|
||||||
.combinedClickable(
|
.hapticsCombinedClickable(
|
||||||
onClick = {
|
onClick = {
|
||||||
linkPreview.link?.let {
|
linkPreview.link?.let {
|
||||||
context.startActivity(
|
context.startActivity(
|
||||||
|
@ -24,7 +24,6 @@ import androidx.compose.animation.fadeOut
|
|||||||
import androidx.compose.animation.togetherWith
|
import androidx.compose.animation.togetherWith
|
||||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
import androidx.compose.foundation.LocalIndication
|
import androidx.compose.foundation.LocalIndication
|
||||||
import androidx.compose.foundation.combinedClickable
|
|
||||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
@ -48,7 +47,6 @@ import androidx.compose.ui.draw.alpha
|
|||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.Shape
|
import androidx.compose.ui.graphics.Shape
|
||||||
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
|
|
||||||
import androidx.compose.ui.platform.LocalHapticFeedback
|
import androidx.compose.ui.platform.LocalHapticFeedback
|
||||||
import androidx.compose.ui.text.TextStyle
|
import androidx.compose.ui.text.TextStyle
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
@ -60,7 +58,8 @@ import ru.tech.imageresizershrinker.core.settings.presentation.provider.LocalSet
|
|||||||
import ru.tech.imageresizershrinker.core.ui.shapes.IconShapeContainer
|
import ru.tech.imageresizershrinker.core.ui.shapes.IconShapeContainer
|
||||||
import ru.tech.imageresizershrinker.core.ui.shapes.IconShapeDefaults
|
import ru.tech.imageresizershrinker.core.ui.shapes.IconShapeDefaults
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.provider.ProvideContainerDefaults
|
import ru.tech.imageresizershrinker.core.ui.utils.provider.ProvideContainerDefaults
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsCombinedClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
|
|
||||||
@OptIn(ExperimentalFoundationApi::class)
|
@OptIn(ExperimentalFoundationApi::class)
|
||||||
@ -88,7 +87,7 @@ fun PreferenceItemOverload(
|
|||||||
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
|
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
|
||||||
bottomContent: (@Composable () -> Unit)? = null
|
bottomContent: (@Composable () -> Unit)? = null
|
||||||
) {
|
) {
|
||||||
val haptics = LocalHapticFeedback.current
|
LocalHapticFeedback.current
|
||||||
CompositionLocalProvider(
|
CompositionLocalProvider(
|
||||||
LocalSettingsState provides LocalSettingsState.current.let {
|
LocalSettingsState provides LocalSettingsState.current.let {
|
||||||
if (!enabled) it.copy(
|
if (!enabled) it.copy(
|
||||||
@ -122,23 +121,11 @@ fun PreferenceItemOverload(
|
|||||||
onClick
|
onClick
|
||||||
?.let {
|
?.let {
|
||||||
if (enabled) {
|
if (enabled) {
|
||||||
Modifier.combinedClickable(
|
Modifier.hapticsCombinedClickable(
|
||||||
interactionSource = interactionSource,
|
interactionSource = interactionSource,
|
||||||
indication = LocalIndication.current,
|
indication = LocalIndication.current,
|
||||||
onClick = {
|
onClick = onClick,
|
||||||
haptics.performHapticFeedback(
|
onLongClick = onLongClick
|
||||||
HapticFeedbackType.LongPress
|
|
||||||
)
|
|
||||||
onClick()
|
|
||||||
},
|
|
||||||
onLongClick = onLongClick?.let {
|
|
||||||
{
|
|
||||||
haptics.performHapticFeedback(
|
|
||||||
HapticFeedbackType.LongPress
|
|
||||||
)
|
|
||||||
onLongClick()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
if (onDisabledClick != null) {
|
if (onDisabledClick != null) {
|
||||||
|
@ -23,7 +23,6 @@ import androidx.compose.animation.fadeIn
|
|||||||
import androidx.compose.animation.fadeOut
|
import androidx.compose.animation.fadeOut
|
||||||
import androidx.compose.animation.togetherWith
|
import androidx.compose.animation.togetherWith
|
||||||
import androidx.compose.foundation.LocalIndication
|
import androidx.compose.foundation.LocalIndication
|
||||||
import androidx.compose.foundation.combinedClickable
|
|
||||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
@ -46,7 +45,6 @@ import androidx.compose.ui.draw.alpha
|
|||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.Shape
|
import androidx.compose.ui.graphics.Shape
|
||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
|
|
||||||
import androidx.compose.ui.platform.LocalHapticFeedback
|
import androidx.compose.ui.platform.LocalHapticFeedback
|
||||||
import androidx.compose.ui.text.TextStyle
|
import androidx.compose.ui.text.TextStyle
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
@ -56,6 +54,7 @@ import androidx.compose.ui.unit.sp
|
|||||||
import ru.tech.imageresizershrinker.core.settings.presentation.provider.LocalSettingsState
|
import ru.tech.imageresizershrinker.core.settings.presentation.provider.LocalSettingsState
|
||||||
import ru.tech.imageresizershrinker.core.ui.shapes.IconShapeContainer
|
import ru.tech.imageresizershrinker.core.ui.shapes.IconShapeContainer
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.provider.ProvideContainerDefaults
|
import ru.tech.imageresizershrinker.core.ui.utils.provider.ProvideContainerDefaults
|
||||||
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -85,7 +84,7 @@ fun PreferenceRow(
|
|||||||
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
|
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
|
||||||
drawContainer: Boolean = true,
|
drawContainer: Boolean = true,
|
||||||
) {
|
) {
|
||||||
val haptics = LocalHapticFeedback.current
|
LocalHapticFeedback.current
|
||||||
val internalColor = contentColor
|
val internalColor = contentColor
|
||||||
?: contentColorFor(backgroundColor = color)
|
?: contentColorFor(backgroundColor = color)
|
||||||
CompositionLocalProvider(
|
CompositionLocalProvider(
|
||||||
@ -120,27 +119,17 @@ fun PreferenceRow(
|
|||||||
onClick
|
onClick
|
||||||
?.let {
|
?.let {
|
||||||
if (enabled) {
|
if (enabled) {
|
||||||
Modifier.combinedClickable(
|
Modifier.hapticsClickable(
|
||||||
interactionSource = interactionSource,
|
interactionSource = interactionSource,
|
||||||
indication = LocalIndication.current,
|
indication = LocalIndication.current,
|
||||||
onClick = {
|
onClick = onClick
|
||||||
haptics.performHapticFeedback(
|
|
||||||
HapticFeedbackType.LongPress
|
|
||||||
)
|
|
||||||
onClick()
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
} else Modifier.then(
|
} else Modifier.then(
|
||||||
if (onDisabledClick != null) {
|
if (onDisabledClick != null) {
|
||||||
Modifier.combinedClickable(
|
Modifier.hapticsClickable(
|
||||||
interactionSource = interactionSource,
|
interactionSource = interactionSource,
|
||||||
indication = LocalIndication.current,
|
indication = LocalIndication.current,
|
||||||
onClick = {
|
onClick = onDisabledClick
|
||||||
haptics.performHapticFeedback(
|
|
||||||
HapticFeedbackType.LongPress
|
|
||||||
)
|
|
||||||
onDisabledClick()
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
} else Modifier
|
} else Modifier
|
||||||
)
|
)
|
||||||
|
@ -57,7 +57,7 @@ import ru.tech.imageresizershrinker.core.resources.R
|
|||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.image.Picture
|
import ru.tech.imageresizershrinker.core.ui.widget.image.Picture
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.other.BoxAnimatedVisibility
|
import ru.tech.imageresizershrinker.core.ui.widget.other.BoxAnimatedVisibility
|
||||||
|
@ -36,7 +36,7 @@ import androidx.compose.ui.text.style.TextAlign
|
|||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import ru.tech.imageresizershrinker.core.domain.utils.trimTrailingZero
|
import ru.tech.imageresizershrinker.core.domain.utils.trimTrailingZero
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.text.AutoSizeText
|
import ru.tech.imageresizershrinker.core.ui.widget.text.AutoSizeText
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ import ru.tech.imageresizershrinker.core.resources.R
|
|||||||
import ru.tech.imageresizershrinker.core.resources.icons.Base64
|
import ru.tech.imageresizershrinker.core.resources.icons.Base64
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.provider.rememberLocalEssentials
|
import ru.tech.imageresizershrinker.core.ui.utils.provider.rememberLocalEssentials
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.feature.base64_tools.presentation.screenLogic.Base64ToolsComponent
|
import ru.tech.imageresizershrinker.feature.base64_tools.presentation.screenLogic.Base64ToolsComponent
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ import ru.tech.imageresizershrinker.core.ui.widget.dialogs.ExitWithoutSavingDial
|
|||||||
import ru.tech.imageresizershrinker.core.ui.widget.dialogs.LoadingDialog
|
import ru.tech.imageresizershrinker.core.ui.widget.dialogs.LoadingDialog
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.image.AutoFilePicker
|
import ru.tech.imageresizershrinker.core.ui.widget.image.AutoFilePicker
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.other.TopAppBarEmoji
|
import ru.tech.imageresizershrinker.core.ui.widget.other.TopAppBarEmoji
|
||||||
|
@ -63,7 +63,7 @@ import ru.tech.imageresizershrinker.core.ui.theme.inverse
|
|||||||
import ru.tech.imageresizershrinker.core.ui.utils.helper.ContextUtils.copyToClipboard
|
import ru.tech.imageresizershrinker.core.ui.utils.helper.ContextUtils.copyToClipboard
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.helper.toHex
|
import ru.tech.imageresizershrinker.core.ui.utils.helper.toHex
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedChip
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedChip
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.transparencyChecker
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.transparencyChecker
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.other.ExpandableItem
|
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.LocalToastHostState
|
||||||
|
@ -58,7 +58,7 @@ import ru.tech.imageresizershrinker.core.resources.R
|
|||||||
import ru.tech.imageresizershrinker.core.ui.theme.inverse
|
import ru.tech.imageresizershrinker.core.ui.theme.inverse
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.helper.ContextUtils.copyToClipboard
|
import ru.tech.imageresizershrinker.core.ui.utils.helper.ContextUtils.copyToClipboard
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.helper.toHex
|
import ru.tech.imageresizershrinker.core.ui.utils.helper.toHex
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.transparencyChecker
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.transparencyChecker
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.other.ExpandableItem
|
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.LocalToastHostState
|
||||||
|
@ -62,7 +62,7 @@ import ru.tech.imageresizershrinker.core.ui.utils.helper.ContextUtils.copyToClip
|
|||||||
import ru.tech.imageresizershrinker.core.ui.utils.helper.toHex
|
import ru.tech.imageresizershrinker.core.ui.utils.helper.toHex
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.controls.selection.ColorRowSelector
|
import ru.tech.imageresizershrinker.core.ui.widget.controls.selection.ColorRowSelector
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedSliderItem
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedSliderItem
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.transparencyChecker
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.transparencyChecker
|
||||||
|
@ -59,7 +59,7 @@ import ru.tech.imageresizershrinker.core.ui.theme.inverse
|
|||||||
import ru.tech.imageresizershrinker.core.ui.utils.helper.ContextUtils.copyToClipboard
|
import ru.tech.imageresizershrinker.core.ui.utils.helper.ContextUtils.copyToClipboard
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.helper.toHex
|
import ru.tech.imageresizershrinker.core.ui.utils.helper.toHex
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedSliderItem
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedSliderItem
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.transparencyChecker
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.transparencyChecker
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.other.ExpandableItem
|
import ru.tech.imageresizershrinker.core.ui.widget.other.ExpandableItem
|
||||||
|
@ -65,7 +65,7 @@ import ru.tech.imageresizershrinker.core.resources.R
|
|||||||
import ru.tech.imageresizershrinker.core.ui.theme.outlineVariant
|
import ru.tech.imageresizershrinker.core.ui.theme.outlineVariant
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.content_pickers.rememberImagePicker
|
import ru.tech.imageresizershrinker.core.ui.utils.content_pickers.rememberImagePicker
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedSliderItem
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedSliderItem
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.fadingEdges
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.fadingEdges
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
@ -68,7 +68,7 @@ import ru.tech.imageresizershrinker.core.ui.widget.dialogs.ExitWithoutSavingDial
|
|||||||
import ru.tech.imageresizershrinker.core.ui.widget.dialogs.LoadingDialog
|
import ru.tech.imageresizershrinker.core.ui.widget.dialogs.LoadingDialog
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.dialogs.OneTimeSaveLocationSelectionDialog
|
import ru.tech.imageresizershrinker.core.ui.widget.dialogs.OneTimeSaveLocationSelectionDialog
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.image.AutoFilePicker
|
import ru.tech.imageresizershrinker.core.ui.widget.image.AutoFilePicker
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.image.ImagePager
|
import ru.tech.imageresizershrinker.core.ui.widget.image.ImagePager
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.image.UrisPreview
|
import ru.tech.imageresizershrinker.core.ui.widget.image.UrisPreview
|
||||||
|
@ -82,7 +82,7 @@ import ru.tech.imageresizershrinker.core.ui.widget.buttons.ToggleGroupButton
|
|||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedSliderItem
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedSliderItem
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.fadingEdges
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.fadingEdges
|
||||||
|
@ -33,7 +33,7 @@ import androidx.compose.ui.unit.dp
|
|||||||
import ru.tech.imageresizershrinker.core.resources.R
|
import ru.tech.imageresizershrinker.core.resources.R
|
||||||
import ru.tech.imageresizershrinker.core.ui.theme.mixedContainer
|
import ru.tech.imageresizershrinker.core.ui.theme.mixedContainer
|
||||||
import ru.tech.imageresizershrinker.core.ui.theme.onMixedContainer
|
import ru.tech.imageresizershrinker.core.ui.theme.onMixedContainer
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
@ -76,7 +76,7 @@ import ru.tech.imageresizershrinker.core.ui.utils.navigation.Screen
|
|||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedTopAppBar
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedTopAppBar
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedTopAppBarType
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedTopAppBarType
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.other.EmojiItem
|
import ru.tech.imageresizershrinker.core.ui.widget.other.EmojiItem
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.text.AutoSizeText
|
import ru.tech.imageresizershrinker.core.ui.widget.text.AutoSizeText
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.text.marquee
|
import ru.tech.imageresizershrinker.core.ui.widget.text.marquee
|
||||||
|
@ -43,7 +43,7 @@ import ru.tech.imageresizershrinker.core.resources.R
|
|||||||
import ru.tech.imageresizershrinker.core.ui.theme.mixedContainer
|
import ru.tech.imageresizershrinker.core.ui.theme.mixedContainer
|
||||||
import ru.tech.imageresizershrinker.core.ui.theme.onMixedContainer
|
import ru.tech.imageresizershrinker.core.ui.theme.onMixedContainer
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
@ -39,7 +39,7 @@ import androidx.compose.ui.unit.dp
|
|||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.helper.ProvidesValue
|
import ru.tech.imageresizershrinker.core.ui.utils.helper.ProvidesValue
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.helper.toHex
|
import ru.tech.imageresizershrinker.core.ui.utils.helper.toHex
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.text.AutoSizeText
|
import ru.tech.imageresizershrinker.core.ui.widget.text.AutoSizeText
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ import ru.tech.imageresizershrinker.core.ui.widget.color_picker.ColorInfo
|
|||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedSlider
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedSlider
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.other.ExpandableItem
|
import ru.tech.imageresizershrinker.core.ui.widget.other.ExpandableItem
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.other.RevealDirection
|
import ru.tech.imageresizershrinker.core.ui.widget.other.RevealDirection
|
||||||
|
@ -33,7 +33,7 @@ import androidx.compose.ui.graphics.vector.ImageVector
|
|||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.text.AutoSizeText
|
import ru.tech.imageresizershrinker.core.ui.widget.text.AutoSizeText
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ import androidx.compose.ui.graphics.graphicsLayer
|
|||||||
import androidx.compose.ui.platform.LocalDensity
|
import androidx.compose.ui.platform.LocalDensity
|
||||||
import androidx.compose.ui.unit.DpSize
|
import androidx.compose.ui.unit.DpSize
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.transparencyChecker
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.transparencyChecker
|
||||||
import ru.tech.imageresizershrinker.feature.markup_layers.presentation.components.model.UiMarkupLayer
|
import ru.tech.imageresizershrinker.feature.markup_layers.presentation.components.model.UiMarkupLayer
|
||||||
import sh.calvin.reorderable.ReorderableItem
|
import sh.calvin.reorderable.ReorderableItem
|
||||||
|
@ -28,7 +28,6 @@ import androidx.compose.animation.togetherWith
|
|||||||
import androidx.compose.foundation.Image
|
import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.border
|
import androidx.compose.foundation.border
|
||||||
import androidx.compose.foundation.combinedClickable
|
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.aspectRatio
|
import androidx.compose.foundation.layout.aspectRatio
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
@ -61,6 +60,7 @@ import ru.tech.imageresizershrinker.core.resources.icons.BrokenImageVariant
|
|||||||
import ru.tech.imageresizershrinker.core.ui.theme.Red
|
import ru.tech.imageresizershrinker.core.ui.theme.Red
|
||||||
import ru.tech.imageresizershrinker.core.ui.theme.White
|
import ru.tech.imageresizershrinker.core.ui.theme.White
|
||||||
import ru.tech.imageresizershrinker.core.ui.theme.takeColorFromScheme
|
import ru.tech.imageresizershrinker.core.ui.theme.takeColorFromScheme
|
||||||
|
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.image.Picture
|
||||||
import ru.tech.imageresizershrinker.feature.media_picker.domain.model.Media
|
import ru.tech.imageresizershrinker.feature.media_picker.domain.model.Media
|
||||||
|
|
||||||
@ -103,7 +103,7 @@ fun MediaImage(
|
|||||||
.background(MaterialTheme.colorScheme.surfaceContainer)
|
.background(MaterialTheme.colorScheme.surfaceContainer)
|
||||||
.then(
|
.then(
|
||||||
if (canClick) {
|
if (canClick) {
|
||||||
Modifier.combinedClickable(
|
Modifier.hapticsCombinedClickable(
|
||||||
onClick = {
|
onClick = {
|
||||||
onItemClick(media)
|
onItemClick(media)
|
||||||
},
|
},
|
||||||
|
@ -22,7 +22,6 @@ import androidx.compose.animation.core.tween
|
|||||||
import androidx.compose.animation.fadeIn
|
import androidx.compose.animation.fadeIn
|
||||||
import androidx.compose.animation.fadeOut
|
import androidx.compose.animation.fadeOut
|
||||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
import androidx.compose.foundation.combinedClickable
|
|
||||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
@ -38,6 +37,7 @@ import androidx.compose.ui.Alignment
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsCombinedClickable
|
||||||
|
|
||||||
@OptIn(ExperimentalFoundationApi::class)
|
@OptIn(ExperimentalFoundationApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
@ -72,16 +72,16 @@ fun MediaStickyHeader(
|
|||||||
style = if (showAsBig) bigTextStyle else smallTextStyle,
|
style = if (showAsBig) bigTextStyle else smallTextStyle,
|
||||||
color = MaterialTheme.colorScheme.onSurface,
|
color = MaterialTheme.colorScheme.onSurface,
|
||||||
modifier = Modifier.then(
|
modifier = Modifier.then(
|
||||||
if (!showAsBig) Modifier.combinedClickable(
|
if (!showAsBig) {
|
||||||
interactionSource = remember { MutableInteractionSource() },
|
Modifier.hapticsCombinedClickable(
|
||||||
indication = null,
|
interactionSource = remember { MutableInteractionSource() },
|
||||||
onLongClick = {
|
indication = null,
|
||||||
onChecked?.invoke()
|
onLongClick = onChecked,
|
||||||
},
|
onClick = {
|
||||||
onClick = {
|
if (isCheckVisible.value) onChecked?.invoke()
|
||||||
if (isCheckVisible.value) onChecked?.invoke()
|
}
|
||||||
}
|
)
|
||||||
) else Modifier
|
} else Modifier
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
if (!showAsBig && onChecked != null) {
|
if (!showAsBig && onChecked != null) {
|
||||||
|
@ -65,7 +65,7 @@ import ru.tech.imageresizershrinker.core.ui.utils.helper.toHex
|
|||||||
import ru.tech.imageresizershrinker.core.ui.widget.buttons.PanModeButton
|
import ru.tech.imageresizershrinker.core.ui.widget.buttons.PanModeButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalSheetDragHandle
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalSheetDragHandle
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.shimmer
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.shimmer
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.transparencyChecker
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.transparencyChecker
|
||||||
|
@ -66,7 +66,7 @@ import ru.tech.imageresizershrinker.core.ui.utils.provider.rememberLocalEssentia
|
|||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedTopAppBar
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedTopAppBar
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedTopAppBarType
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedTopAppBarType
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.drawHorizontalStroke
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.drawHorizontalStroke
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.navBarsPaddingOnlyIfTheyAtTheEnd
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.navBarsPaddingOnlyIfTheyAtTheEnd
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.other.TopAppBarEmoji
|
import ru.tech.imageresizershrinker.core.ui.widget.other.TopAppBarEmoji
|
||||||
|
@ -20,7 +20,6 @@ package ru.tech.imageresizershrinker.feature.recognize.text.presentation.compone
|
|||||||
import androidx.compose.animation.AnimatedVisibility
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
import androidx.compose.animation.animateColorAsState
|
import androidx.compose.animation.animateColorAsState
|
||||||
import androidx.compose.foundation.border
|
import androidx.compose.foundation.border
|
||||||
import androidx.compose.foundation.combinedClickable
|
|
||||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||||
import androidx.compose.foundation.interaction.collectIsDraggedAsState
|
import androidx.compose.foundation.interaction.collectIsDraggedAsState
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
@ -54,7 +53,6 @@ import androidx.compose.runtime.rememberCoroutineScope
|
|||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
|
|
||||||
import androidx.compose.ui.platform.LocalHapticFeedback
|
import androidx.compose.ui.platform.LocalHapticFeedback
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
@ -71,7 +69,8 @@ import ru.tech.imageresizershrinker.core.ui.theme.outlineVariant
|
|||||||
import ru.tech.imageresizershrinker.core.ui.utils.helper.ProvidesValue
|
import ru.tech.imageresizershrinker.core.ui.utils.helper.ProvidesValue
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedBottomSheetDefaults
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedBottomSheetDefaults
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedCheckbox
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedCheckbox
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsCombinedClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.other.RevealDirection
|
import ru.tech.imageresizershrinker.core.ui.widget.other.RevealDirection
|
||||||
@ -143,7 +142,7 @@ internal fun LazyItemScope.DownloadedLanguageItem(
|
|||||||
},
|
},
|
||||||
directions = setOf(RevealDirection.EndToStart),
|
directions = setOf(RevealDirection.EndToStart),
|
||||||
swipeableContent = {
|
swipeableContent = {
|
||||||
val haptics = LocalHapticFeedback.current
|
LocalHapticFeedback.current
|
||||||
Row(
|
Row(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
@ -159,21 +158,16 @@ internal fun LazyItemScope.DownloadedLanguageItem(
|
|||||||
).value,
|
).value,
|
||||||
resultPadding = 0.dp
|
resultPadding = 0.dp
|
||||||
)
|
)
|
||||||
.combinedClickable(
|
.hapticsCombinedClickable(
|
||||||
onLongClick = {
|
onLongClick = {
|
||||||
haptics.performHapticFeedback(
|
|
||||||
HapticFeedbackType.LongPress
|
|
||||||
)
|
|
||||||
scope.launch {
|
scope.launch {
|
||||||
state.animateTo(RevealValue.FullyRevealedStart)
|
state.animateTo(RevealValue.FullyRevealedStart)
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
onClick = {
|
||||||
|
onValueChange(selected, lang)
|
||||||
}
|
}
|
||||||
) {
|
)
|
||||||
haptics.performHapticFeedback(
|
|
||||||
HapticFeedbackType.LongPress
|
|
||||||
)
|
|
||||||
onValueChange(selected, lang)
|
|
||||||
}
|
|
||||||
.padding(16.dp),
|
.padding(16.dp),
|
||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
) {
|
||||||
|
@ -30,7 +30,7 @@ import androidx.compose.ui.Alignment
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.platform.LocalHapticFeedback
|
import androidx.compose.ui.platform.LocalHapticFeedback
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
@ -41,7 +41,7 @@ import androidx.compose.ui.text.font.FontWeight
|
|||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import ru.tech.imageresizershrinker.core.filters.domain.model.Filter
|
import ru.tech.imageresizershrinker.core.filters.domain.model.Filter
|
||||||
import ru.tech.imageresizershrinker.core.resources.R
|
import ru.tech.imageresizershrinker.core.resources.R
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.text.AutoSizeText
|
import ru.tech.imageresizershrinker.core.ui.widget.text.AutoSizeText
|
||||||
|
|
||||||
|
@ -34,7 +34,6 @@ import androidx.compose.runtime.mutableStateOf
|
|||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
|
|
||||||
import androidx.compose.ui.platform.LocalHapticFeedback
|
import androidx.compose.ui.platform.LocalHapticFeedback
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
@ -52,7 +51,7 @@ fun ModelTypeSelector(
|
|||||||
value: SegmentationMode,
|
value: SegmentationMode,
|
||||||
onValueChange: (SegmentationMode) -> Unit
|
onValueChange: (SegmentationMode) -> Unit
|
||||||
) {
|
) {
|
||||||
val haptics = LocalHapticFeedback.current
|
LocalHapticFeedback.current
|
||||||
|
|
||||||
var showSelectionSheet by remember {
|
var showSelectionSheet by remember {
|
||||||
mutableStateOf(false)
|
mutableStateOf(false)
|
||||||
@ -100,9 +99,6 @@ fun ModelTypeSelector(
|
|||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
title = stringResource(id = mode.title),
|
title = stringResource(id = mode.title),
|
||||||
onClick = {
|
onClick = {
|
||||||
haptics.performHapticFeedback(
|
|
||||||
HapticFeedbackType.LongPress
|
|
||||||
)
|
|
||||||
onValueChange(mode)
|
onValueChange(mode)
|
||||||
},
|
},
|
||||||
color = animateColorAsState(
|
color = animateColorAsState(
|
||||||
|
@ -34,7 +34,6 @@ import androidx.compose.runtime.mutableStateOf
|
|||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
|
|
||||||
import androidx.compose.ui.platform.LocalHapticFeedback
|
import androidx.compose.ui.platform.LocalHapticFeedback
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
@ -52,7 +51,7 @@ fun OcrEngineModeSelector(
|
|||||||
value: OcrEngineMode,
|
value: OcrEngineMode,
|
||||||
onValueChange: (OcrEngineMode) -> Unit
|
onValueChange: (OcrEngineMode) -> Unit
|
||||||
) {
|
) {
|
||||||
val haptics = LocalHapticFeedback.current
|
LocalHapticFeedback.current
|
||||||
|
|
||||||
var showSelectionSheet by remember {
|
var showSelectionSheet by remember {
|
||||||
mutableStateOf(false)
|
mutableStateOf(false)
|
||||||
@ -100,9 +99,6 @@ fun OcrEngineModeSelector(
|
|||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
title = stringResource(id = mode.title),
|
title = stringResource(id = mode.title),
|
||||||
onClick = {
|
onClick = {
|
||||||
haptics.performHapticFeedback(
|
|
||||||
HapticFeedbackType.LongPress
|
|
||||||
)
|
|
||||||
onValueChange(mode)
|
onValueChange(mode)
|
||||||
},
|
},
|
||||||
color = animateColorAsState(
|
color = animateColorAsState(
|
||||||
|
@ -56,7 +56,7 @@ import ru.tech.imageresizershrinker.core.settings.domain.model.FastSettingsSide
|
|||||||
import ru.tech.imageresizershrinker.core.settings.presentation.provider.LocalSettingsState
|
import ru.tech.imageresizershrinker.core.settings.presentation.provider.LocalSettingsState
|
||||||
import ru.tech.imageresizershrinker.core.ui.theme.blend
|
import ru.tech.imageresizershrinker.core.ui.theme.blend
|
||||||
import ru.tech.imageresizershrinker.core.ui.theme.takeColorFromScheme
|
import ru.tech.imageresizershrinker.core.ui.theme.takeColorFromScheme
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
@ -73,7 +73,7 @@ import ru.tech.imageresizershrinker.core.ui.widget.dialogs.LoadingDialog
|
|||||||
import ru.tech.imageresizershrinker.core.ui.widget.dialogs.OneTimeSaveLocationSelectionDialog
|
import ru.tech.imageresizershrinker.core.ui.widget.dialogs.OneTimeSaveLocationSelectionDialog
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedSliderItem
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedSliderItem
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.animateShape
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.animateShape
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
|
@ -78,7 +78,7 @@ import ru.tech.imageresizershrinker.core.ui.widget.color_picker.ColorSelection
|
|||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedChip
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedChip
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.fadingEdges
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.fadingEdges
|
||||||
|
@ -34,7 +34,7 @@ import ru.tech.imageresizershrinker.core.resources.R
|
|||||||
import ru.tech.imageresizershrinker.core.resources.icons.Robot
|
import ru.tech.imageresizershrinker.core.resources.icons.Robot
|
||||||
import ru.tech.imageresizershrinker.core.settings.presentation.provider.LocalSettingsState
|
import ru.tech.imageresizershrinker.core.settings.presentation.provider.LocalSettingsState
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedSliderItem
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedSliderItem
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.other.LocalToastHostState
|
import ru.tech.imageresizershrinker.core.ui.widget.other.LocalToastHostState
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ import ru.tech.imageresizershrinker.core.ui.theme.outlineVariant
|
|||||||
import ru.tech.imageresizershrinker.core.ui.utils.provider.SafeLocalContainerColor
|
import ru.tech.imageresizershrinker.core.ui.utils.provider.SafeLocalContainerColor
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.ContainerShapeDefaults
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.preferences.PreferenceRow
|
import ru.tech.imageresizershrinker.core.ui.widget.preferences.PreferenceRow
|
||||||
|
@ -74,7 +74,7 @@ import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedBottomSheetD
|
|||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedModalBottomSheet
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.other.EmojiItem
|
import ru.tech.imageresizershrinker.core.ui.widget.other.EmojiItem
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.other.GradientEdge
|
import ru.tech.imageresizershrinker.core.ui.widget.other.GradientEdge
|
||||||
|
@ -55,7 +55,7 @@ import ru.tech.imageresizershrinker.core.settings.presentation.provider.LocalSet
|
|||||||
import ru.tech.imageresizershrinker.core.ui.shapes.CloverShape
|
import ru.tech.imageresizershrinker.core.ui.shapes.CloverShape
|
||||||
import ru.tech.imageresizershrinker.core.ui.utils.helper.ProvidesValue
|
import ru.tech.imageresizershrinker.core.ui.utils.helper.ProvidesValue
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedIconButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.autoElevatedBorder
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.autoElevatedBorder
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.containerFabBorder
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.containerFabBorder
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ import androidx.compose.ui.unit.dp
|
|||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import ru.tech.imageresizershrinker.core.resources.R
|
import ru.tech.imageresizershrinker.core.resources.R
|
||||||
import ru.tech.imageresizershrinker.core.settings.presentation.model.UiFontFamily
|
import ru.tech.imageresizershrinker.core.settings.presentation.model.UiFontFamily
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.animateShape
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.animateShape
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.other.FontSelectionItem
|
import ru.tech.imageresizershrinker.core.ui.widget.other.FontSelectionItem
|
||||||
|
@ -73,7 +73,7 @@ import ru.tech.imageresizershrinker.core.ui.widget.dialogs.ExitWithoutSavingDial
|
|||||||
import ru.tech.imageresizershrinker.core.ui.widget.dialogs.LoadingDialog
|
import ru.tech.imageresizershrinker.core.ui.widget.dialogs.LoadingDialog
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedButton
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedChip
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.EnhancedChip
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.haptics.hapticsClickable
|
import ru.tech.imageresizershrinker.core.ui.widget.enhanced.hapticsClickable
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.image.AutoFilePicker
|
import ru.tech.imageresizershrinker.core.ui.widget.image.AutoFilePicker
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.image.UrisPreview
|
import ru.tech.imageresizershrinker.core.ui.widget.image.UrisPreview
|
||||||
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
import ru.tech.imageresizershrinker.core.ui.widget.modifier.container
|
||||||
|
Reference in New Issue
Block a user