From d8749a859fab590a71d88e953f20967e1886656f Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 20 May 2026 14:25:35 +0200 Subject: [PATCH] Updated on 2026-08-14 --- .../DefaultMarketsTokenDetailsComponent.kt | 7 +++- .../details/DefaultNewsDetailsComponent.kt | 7 +++- .../news/list/DefaultNewsListComponent.kt | 7 +++- .../search/DefaultSearchComponent.kt | 7 +++- .../tangem/features/feed/ui/EntryContent.kt | 42 +++++++++---------- .../feed/ui/components/FeedSearchBar.kt | 3 +- .../tokendetails/ui/TokenDetailsTopBar.kt | 28 +++---------- 7 files changed, 52 insertions(+), 49 deletions(-) diff --git a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/components/market/details/DefaultMarketsTokenDetailsComponent.kt b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/components/market/details/DefaultMarketsTokenDetailsComponent.kt index 9fb1688ccd..9589c9646a 100644 --- a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/components/market/details/DefaultMarketsTokenDetailsComponent.kt +++ b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/components/market/details/DefaultMarketsTokenDetailsComponent.kt @@ -48,6 +48,7 @@ import com.tangem.features.feed.components.market.details.portfolioblock.Portfol import com.tangem.features.feed.model.market.details.MarketsTokenDetailsModel import com.tangem.features.feed.model.market.details.analytics.MarketDetailsAnalyticsEvent import com.tangem.features.feed.model.market.details.state.TokenNetworksState +import com.tangem.features.feed.ui.LocalIsOpenedInBottomSheet import com.tangem.features.feed.ui.market.detailed.MarketsTokenDetailsContent import com.tangem.features.feed.ui.market.detailed.MarketsTokenDetailsTopBar import kotlinx.coroutines.flow.collectLatest @@ -192,7 +193,11 @@ internal class DefaultMarketsTokenDetailsComponent( .padding(TangemTheme.dimens2.x2_5), ) }, - type = TangemTopBarType.BottomSheet, + type = if (LocalIsOpenedInBottomSheet.current) { + TangemTopBarType.BottomSheet + } else { + TangemTopBarType.Default + }, ) } else { MarketsTokenDetailsTopBar( diff --git a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/components/news/details/DefaultNewsDetailsComponent.kt b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/components/news/details/DefaultNewsDetailsComponent.kt index 08f7fa5752..9e2476e982 100644 --- a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/components/news/details/DefaultNewsDetailsComponent.kt +++ b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/components/news/details/DefaultNewsDetailsComponent.kt @@ -32,6 +32,7 @@ import com.tangem.domain.appcurrency.model.AppCurrency import com.tangem.domain.markets.TokenMarketParams import com.tangem.domain.news.model.NewsListConfig import com.tangem.features.feed.model.news.details.NewsDetailsModel +import com.tangem.features.feed.ui.LocalIsOpenedInBottomSheet import com.tangem.features.feed.ui.news.details.NewsDetailsContent import com.tangem.features.feed.ui.news.details.state.ArticlesStateUM import kotlinx.serialization.Serializable @@ -49,7 +50,11 @@ internal class DefaultNewsDetailsComponent( val state by newsDetailsModel.state.collectAsStateWithLifecycle() if (LocalRedesignEnabled.current) { TangemTopBar( - type = TangemTopBarType.BottomSheet, + type = if (LocalIsOpenedInBottomSheet.current) { + TangemTopBarType.BottomSheet + } else { + TangemTopBarType.Default + }, startContent = { Icon( imageVector = ImageVector.vectorResource(id = R.drawable.ic_arrow_back_28), diff --git a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/components/news/list/DefaultNewsListComponent.kt b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/components/news/list/DefaultNewsListComponent.kt index 480da418e5..247990641c 100644 --- a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/components/news/list/DefaultNewsListComponent.kt +++ b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/components/news/list/DefaultNewsListComponent.kt @@ -33,6 +33,7 @@ import com.tangem.core.ui.res.LocalRedesignEnabled import com.tangem.core.ui.res.TangemTheme import com.tangem.domain.news.model.NewsListConfig import com.tangem.features.feed.model.news.list.NewsListModel +import com.tangem.features.feed.ui.LocalIsOpenedInBottomSheet import com.tangem.features.feed.ui.news.list.NewsListContent import kotlinx.serialization.Serializable @@ -51,7 +52,11 @@ internal class DefaultNewsListComponent( TangemTopBar( modifier = Modifier.background(background.copy(alpha = .95f)), title = resourceReference(R.string.common_news), - type = TangemTopBarType.BottomSheet, + type = if (LocalIsOpenedInBottomSheet.current) { + TangemTopBarType.BottomSheet + } else { + TangemTopBarType.Default + }, startContent = { Icon( imageVector = ImageVector.vectorResource(id = R.drawable.ic_arrow_back_28), diff --git a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/components/search/DefaultSearchComponent.kt b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/components/search/DefaultSearchComponent.kt index 8843decf91..d14bce3f5d 100644 --- a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/components/search/DefaultSearchComponent.kt +++ b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/components/search/DefaultSearchComponent.kt @@ -21,6 +21,7 @@ import com.tangem.core.ui.ds.topbar.TangemTopBarType import com.tangem.domain.appcurrency.model.AppCurrency import com.tangem.domain.markets.TokenMarketParams import com.tangem.features.feed.model.search.SearchModel +import com.tangem.features.feed.ui.LocalIsOpenedInBottomSheet import com.tangem.features.feed.ui.search.SearchContent import com.tangem.features.feed.ui.search.state.SearchCallbacks @@ -50,7 +51,11 @@ internal class DefaultSearchComponent( } TangemTopBar( - type = TangemTopBarType.BottomSheet, + type = if (LocalIsOpenedInBottomSheet.current) { + TangemTopBarType.BottomSheet + } else { + TangemTopBarType.Default + }, reserveSlotSpace = false, content = { TangemSearchField( diff --git a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/ui/EntryContent.kt b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/ui/EntryContent.kt index 0e0701070e..238992c680 100644 --- a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/ui/EntryContent.kt +++ b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/ui/EntryContent.kt @@ -39,6 +39,8 @@ import dev.chrisbanes.haze.rememberHazeState */ internal val LocalContentTopFadeHeightOverride = compositionLocalOf?> { null } +internal val LocalIsOpenedInBottomSheet = staticCompositionLocalOf { true } + @OptIn(ExperimentalDecomposeApi::class) @Composable internal fun EntryContent( @@ -48,22 +50,22 @@ internal fun EntryContent( onExpandSheet: () -> Unit, isOpenedInBottomSheet: Boolean, ) { - if (LocalRedesignEnabled.current) { - EntryContentV2( - bottomSheetState = bottomSheetState, - stackState = stackState, - onHeaderSizeChange = onHeaderSizeChange, - onExpandSheet = onExpandSheet, - isOpenedInBottomSheet = isOpenedInBottomSheet, - ) - } else { - EntryContentV1( - bottomSheetState = bottomSheetState, - stackState = stackState, - onHeaderSizeChange = onHeaderSizeChange, - onExpandSheet = onExpandSheet, - isOpenedInBottomSheet = isOpenedInBottomSheet, - ) + CompositionLocalProvider(LocalIsOpenedInBottomSheet provides isOpenedInBottomSheet) { + if (LocalRedesignEnabled.current) { + EntryContentV2( + bottomSheetState = bottomSheetState, + stackState = stackState, + onHeaderSizeChange = onHeaderSizeChange, + onExpandSheet = onExpandSheet, + ) + } else { + EntryContentV1( + bottomSheetState = bottomSheetState, + stackState = stackState, + onHeaderSizeChange = onHeaderSizeChange, + onExpandSheet = onExpandSheet, + ) + } } } @@ -73,11 +75,11 @@ private fun EntryContentV1( stackState: State>, onHeaderSizeChange: (Dp) -> Unit, onExpandSheet: () -> Unit, - isOpenedInBottomSheet: Boolean, ) { val density = LocalDensity.current val background = LocalMainBottomSheetColor.current.value val stackAnimation = remember { contentFeedEntryStackAnimation() } + val isOpenedInBottomSheet = LocalIsOpenedInBottomSheet.current Surface(contentColor = background) { Scaffold( @@ -135,13 +137,12 @@ private fun EntryContentV2( stackState: State>, onHeaderSizeChange: (Dp) -> Unit, onExpandSheet: () -> Unit, - isOpenedInBottomSheet: Boolean, ) { val background = LocalMainBottomSheetColor.current.value var topBarHeight by remember { mutableStateOf(0.dp) } val hazeState = rememberHazeState() val fadeHeightOverride = remember { mutableStateOf(null) } - val statusBarInset = if (isOpenedInBottomSheet) { + val statusBarInset = if (LocalIsOpenedInBottomSheet.current) { 0.dp } else { WindowInsets.statusBars.asPaddingValues().calculateTopPadding() @@ -170,7 +171,6 @@ private fun EntryContentV2( onHeaderSizeChange(dp) topBarHeight = dp }, - isOpenedInBottomSheet = isOpenedInBottomSheet, onExpandSheet = onExpandSheet, ) } @@ -183,12 +183,12 @@ private fun BoxScope.TitleBlock( bottomSheetState: State, stackState: State>, onTopBarHeightChang: (Dp) -> Unit, - isOpenedInBottomSheet: Boolean, onExpandSheet: () -> Unit, modifier: Modifier = Modifier, ) { val density = LocalDensity.current val animationAppBar = remember(stackState) { topBarFeedEntryAnimatedContentTransitionSpec(stackState) } + val isOpenedInBottomSheet = LocalIsOpenedInBottomSheet.current Box( modifier = modifier diff --git a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/ui/components/FeedSearchBar.kt b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/ui/components/FeedSearchBar.kt index 7d1ed7e428..23256b58e3 100644 --- a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/ui/components/FeedSearchBar.kt +++ b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/ui/components/FeedSearchBar.kt @@ -23,6 +23,7 @@ import com.tangem.core.ui.extensions.conditional import com.tangem.core.ui.extensions.resolveReference import com.tangem.core.ui.res.LocalRedesignEnabled import com.tangem.core.ui.res.TangemTheme +import com.tangem.features.feed.ui.LocalIsOpenedInBottomSheet import com.tangem.features.feed.ui.feed.state.FeedListSearchBar @Composable @@ -97,7 +98,7 @@ private fun FeedSearchBarV2( modifier = modifier, startContent = startContent, endContent = endContent, - type = TangemTopBarType.BottomSheet, + type = if (LocalIsOpenedInBottomSheet.current) TangemTopBarType.BottomSheet else TangemTopBarType.Default, reserveSlotSpace = false, content = { Row( diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/ui/TokenDetailsTopBar.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/ui/TokenDetailsTopBar.kt index aaf3a4838f..d49d928013 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/ui/TokenDetailsTopBar.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/ui/TokenDetailsTopBar.kt @@ -2,37 +2,18 @@ package com.tangem.feature.tokendetails.presentation.tokendetails.ui import android.content.res.Configuration import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.BoxWithConstraints -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.statusBarsPadding +import androidx.compose.foundation.layout.* import androidx.compose.foundation.text.InlineTextContent import androidx.compose.foundation.text.TextAutoSize import androidx.compose.foundation.text.appendInlineContent import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.Immutable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.text.Placeholder -import androidx.compose.ui.text.PlaceholderVerticalAlign -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.buildAnnotatedString -import androidx.compose.ui.text.rememberTextMeasurer +import androidx.compose.ui.text.* import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview @@ -44,6 +25,7 @@ import androidx.compose.ui.unit.sp import androidx.compose.ui.util.fastForEach import com.tangem.common.ui.account.AccountIcon import com.tangem.common.ui.account.AccountIconUM +import com.tangem.core.ui.R import com.tangem.core.ui.components.account.AccountIconSize import com.tangem.core.ui.components.dropdownmenu.TangemDropdownItem import com.tangem.core.ui.components.dropdownmenu.TangemDropdownMenu @@ -72,7 +54,7 @@ internal fun TokenDetailsTopBar(topAppBarUM: TokenDetailsTopAppBarUM, modifier: startContent = { TangemTopBarActionContent( actionUM = TangemTopBarActionUM( - iconRes = CoreUiR.drawable.ic_back_24, + iconRes = R.drawable.ic_arrow_back_28, onClick = topAppBarUM.onBackClick, ghostModeProgress = 1f, ),