From e39926a1b2b47a0f9e5300f61fb4dd9800bfba54 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 22 Jun 2026 12:53:35 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../ui/ds/contextmenu/TangemContextMenu.kt | 11 +++-- .../TangemContextMenuCheckboxItem.kt | 4 +- .../ui/market/list/components/SortByMenu.kt | 45 +++++++++--------- .../organizetokens/ui/OrganizeDropDownMenu.kt | 47 ++++++++++--------- .../child/tokenActions/TokenActionContent.kt | 22 ++++----- 5 files changed, 67 insertions(+), 62 deletions(-) diff --git a/core/ui/src/main/java/com/tangem/core/ui/ds/contextmenu/TangemContextMenu.kt b/core/ui/src/main/java/com/tangem/core/ui/ds/contextmenu/TangemContextMenu.kt index 3800173371..0eff3172fb 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/ds/contextmenu/TangemContextMenu.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/ds/contextmenu/TangemContextMenu.kt @@ -74,8 +74,9 @@ fun TangemContextMenu( } } -private const val IN_TRANSITION_DURATION = 120 private const val OUT_TRANSITION_DURATION = 75 +private const val ENTER_SPRING_DAMPING = 0.82f +private const val ENTER_SPRING_STIFFNESS = 1100f @Suppress("ReusedModifierInstance", "MagicNumber") @Composable @@ -91,10 +92,10 @@ private fun DropdownMenuContent( val scale by transition.animateFloat( transitionSpec = { if (false isTransitioningTo true) { - // Dismissed to expanded - tween( - durationMillis = IN_TRANSITION_DURATION, - easing = LinearOutSlowInEasing, + // Dismissed to expanded — springy iOS-like pop scaling up from the anchor. + spring( + dampingRatio = ENTER_SPRING_DAMPING, + stiffness = ENTER_SPRING_STIFFNESS, ) } else { // Expanded to dismissed. diff --git a/core/ui/src/main/java/com/tangem/core/ui/ds/contextmenu/TangemContextMenuCheckboxItem.kt b/core/ui/src/main/java/com/tangem/core/ui/ds/contextmenu/TangemContextMenuCheckboxItem.kt index 8cb5703384..8e6e4710a1 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/ds/contextmenu/TangemContextMenuCheckboxItem.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/ds/contextmenu/TangemContextMenuCheckboxItem.kt @@ -3,6 +3,7 @@ package com.tangem.core.ui.ds.contextmenu import androidx.compose.foundation.layout.* import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.tangem.core.ui.ds.checkbox.TangemCheckbox @@ -18,12 +19,13 @@ import com.tangem.core.ui.res.TangemTheme fun TangemContextMenuCheckboxItem(title: TextReference, isChecked: Boolean, onClick: () -> Unit) { Row( horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically, modifier = Modifier .fillMaxWidth() .width(238.dp) .clickableSingle(onClick = onClick) .padding( - vertical = TangemTheme.dimens2.x5, + vertical = TangemTheme.dimens2.x2_5, horizontal = TangemTheme.dimens2.x4, ), ) { diff --git a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/ui/market/list/components/SortByMenu.kt b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/ui/market/list/components/SortByMenu.kt index 4e8635b86b..b34f053ffa 100644 --- a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/ui/market/list/components/SortByMenu.kt +++ b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/ui/market/list/components/SortByMenu.kt @@ -10,7 +10,6 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.res.vectorResource import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp @@ -40,6 +39,7 @@ internal fun SortByMenu( Column { Row( horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically, modifier = Modifier .fillMaxWidth() .widthIn(238.dp) @@ -50,7 +50,7 @@ internal fun SortByMenu( }, ) .padding( - vertical = TangemTheme.dimens2.x5, + vertical = TangemTheme.dimens2.x2_5, horizontal = TangemTheme.dimens2.x4, ), ) { @@ -60,27 +60,30 @@ internal fun SortByMenu( color = TangemTheme.colors2.text.neutral.primary, maxLines = 1, ) - if (sortMenuUM.selectedOption == sortType) { - Box( - modifier = Modifier - .padding(TangemTheme.dimens2.x0_5) - .size(TangemTheme.dimens2.x5) - .background( - color = TangemTheme.colors2.graphic.neutral.primary, - shape = CircleShape, - ), - ) { - Icon( - painter = rememberVectorPainter( - ImageVector.vectorResource(R.drawable.ic_check_default_24), - ), - contentDescription = null, - tint = TangemTheme.colors2.graphic.neutral.primaryInverted, + Box( + modifier = Modifier.size(TangemTheme.dimens2.x6), + contentAlignment = Alignment.Center, + ) { + if (sortMenuUM.selectedOption == sortType) { + Box( modifier = Modifier - .align(Alignment.Center) .padding(TangemTheme.dimens2.x0_5) - .size(TangemTheme.dimens2.x4), - ) + .size(TangemTheme.dimens2.x5) + .background( + color = TangemTheme.colors2.graphic.neutral.primary, + shape = CircleShape, + ), + ) { + Icon( + imageVector = ImageVector.vectorResource(R.drawable.ic_check_default_24), + contentDescription = null, + tint = TangemTheme.colors2.graphic.neutral.primaryInverted, + modifier = Modifier + .align(Alignment.Center) + .padding(TangemTheme.dimens2.x0_5) + .size(TangemTheme.dimens2.x4), + ) + } } } } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/organizetokens/ui/OrganizeDropDownMenu.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/organizetokens/ui/OrganizeDropDownMenu.kt index f041d28b88..25b11c610d 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/organizetokens/ui/OrganizeDropDownMenu.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/organizetokens/ui/OrganizeDropDownMenu.kt @@ -10,7 +10,6 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.res.vectorResource import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp @@ -80,7 +79,7 @@ private fun SortByBalanceMenuSection(organizeMenuUM: OrganizeTokensUM.OrganizeMe }, enabled = !organizeMenuUM.isSortedByBalance, ) - .padding(vertical = TangemTheme.dimens2.x5, horizontal = TangemTheme.dimens2.x4), + .padding(vertical = TangemTheme.dimens2.x2_5, horizontal = TangemTheme.dimens2.x4), ) HorizontalDivider( @@ -93,6 +92,7 @@ private fun SortByBalanceMenuSection(organizeMenuUM: OrganizeTokensUM.OrganizeMe private fun GroupTokensMenuSection(organizeMenuUM: OrganizeTokensUM.OrganizeMenuUM, onDropdownDismiss: () -> Unit) { Row( horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically, modifier = Modifier .fillMaxWidth() .widthIn(238.dp) @@ -102,7 +102,7 @@ private fun GroupTokensMenuSection(organizeMenuUM: OrganizeTokensUM.OrganizeMenu onDropdownDismiss() }, ) - .padding(vertical = TangemTheme.dimens2.x5, horizontal = TangemTheme.dimens2.x4), + .padding(vertical = TangemTheme.dimens2.x2_5, horizontal = TangemTheme.dimens2.x4), ) { Text( text = stringResourceSafe(R.string.organize_tokens_group), @@ -110,27 +110,30 @@ private fun GroupTokensMenuSection(organizeMenuUM: OrganizeTokensUM.OrganizeMenu color = TangemTheme.colors2.text.neutral.primary, maxLines = 1, ) - if (organizeMenuUM.isGrouped) { - Box( - modifier = Modifier - .padding(TangemTheme.dimens2.x0_5) - .size(TangemTheme.dimens2.x5) - .background( - color = TangemTheme.colors2.graphic.neutral.primary, - shape = CircleShape, - ), - ) { - Icon( - painter = rememberVectorPainter( - ImageVector.vectorResource(R.drawable.ic_check_default_24), - ), - contentDescription = null, - tint = TangemTheme.colors2.graphic.neutral.primaryInverted, + Box( + modifier = Modifier.size(TangemTheme.dimens2.x6), + contentAlignment = Alignment.Center, + ) { + if (organizeMenuUM.isGrouped) { + Box( modifier = Modifier - .align(Alignment.Center) .padding(TangemTheme.dimens2.x0_5) - .size(TangemTheme.dimens2.x4), - ) + .size(TangemTheme.dimens2.x5) + .background( + color = TangemTheme.colors2.graphic.neutral.primary, + shape = CircleShape, + ), + ) { + Icon( + imageVector = ImageVector.vectorResource(R.drawable.ic_check_default_24), + contentDescription = null, + tint = TangemTheme.colors2.graphic.neutral.primaryInverted, + modifier = Modifier + .align(Alignment.Center) + .padding(TangemTheme.dimens2.x0_5) + .size(TangemTheme.dimens2.x4), + ) + } } } } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/tokenActions/TokenActionContent.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/tokenActions/TokenActionContent.kt index 449d0a9eb0..85efce67c6 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/tokenActions/TokenActionContent.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/tokenActions/TokenActionContent.kt @@ -10,6 +10,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Icon import androidx.compose.material3.Text import androidx.compose.runtime.* +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.vector.ImageVector @@ -93,17 +94,17 @@ private fun TokenActionContextMenuContent(actions: ImmutableList Column { Row( - horizontalArrangement = Arrangement.spacedBy(TangemTheme.dimens2.x2), + horizontalArrangement = Arrangement.spacedBy(TangemTheme.dimens2.x2_5), + verticalAlignment = Alignment.CenterVertically, modifier = Modifier .testTag(BaseBottomSheetTestTags.ACTION_BUTTON) + .fillMaxWidth() + .clip(RoundedCornerShape(TangemTheme.dimens2.x2_5)) .clickable( enabled = item.isEnabled, onClick = { @@ -112,10 +113,8 @@ private fun TokenActionContextMenuContent(actions: ImmutableList