diff --git a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokensListScreen.kt b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokensListScreen.kt index 08d9d6978c..09bacd8849 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokensListScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/ui/TokensListScreen.kt @@ -19,9 +19,15 @@ import androidx.compose.material.FabPosition import androidx.compose.material.Scaffold import androidx.compose.material.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.onSizeChanged +import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.AnnotatedString @@ -29,9 +35,10 @@ import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.ExperimentalUnitApi +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.TextUnitType +import androidx.compose.ui.unit.dp import androidx.paging.PagingData import androidx.paging.compose.LazyPagingItems import androidx.paging.compose.collectAsLazyPagingItems @@ -44,27 +51,46 @@ import com.tangem.tap.features.tokens.impl.presentation.states.TokensListStateHo import com.tangem.tap.features.tokens.impl.presentation.states.TokensListToolbarState import com.tangem.wallet.R import kotlinx.coroutines.flow.emptyFlow -import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.flowOf /** + * Tokens list screen + * + * @param stateHolder state holder + * [REDACTED_AUTHOR] */ @Composable internal fun TokensListScreen(stateHolder: TokensListStateHolder) { BackHandler(onBack = stateHolder.toolbarState.onBackButtonClick) + var floatingButtonHeight by remember { mutableStateOf(value = 0.dp) } + Scaffold( topBar = { TokensListToolbar(state = stateHolder.toolbarState) }, floatingActionButton = { if (stateHolder is TokensListStateHolder.ManageContent) { - SaveChangesButton(onClick = stateHolder.onSaveButtonClick) + val density = LocalDensity.current + val verticalPadding = TangemTheme.dimens.spacing32 + + SaveChangesButton( + onClick = stateHolder.onSaveButtonClick, + modifier = Modifier.onSizeChanged { + with(density) { floatingButtonHeight = it.height.toDp() + verticalPadding } + }, + ) } }, floatingActionButtonPosition = FabPosition.Center, ) { scaffoldPadding -> val tokens = stateHolder.tokens.collectAsLazyPagingItems() - TokensListContent(stateHolder.isDifferentAddressesBlockVisible, tokens, scaffoldPadding) + TokensListContent( + isDifferentAddressesBlockVisible = stateHolder.isDifferentAddressesBlockVisible, + tokens = tokens, + scaffoldPadding = scaffoldPadding, + bottomMarginDp = floatingButtonHeight, + ) stateHolder.onTokensLoadStateChanged(tokens.loadState.refresh) @@ -96,6 +122,7 @@ private fun TokensListContent( isDifferentAddressesBlockVisible: Boolean, tokens: LazyPagingItems, scaffoldPadding: PaddingValues, + bottomMarginDp: Dp, ) { val state = rememberLazyListState() @@ -108,6 +135,7 @@ private fun TokensListContent( .fillMaxSize() .padding(scaffoldPadding), state = state, + contentPadding = PaddingValues(bottom = bottomMarginDp), ) { if (isDifferentAddressesBlockVisible) { item { DifferentAddressesWarning() } @@ -119,7 +147,6 @@ private fun TokensListContent( } } -@OptIn(ExperimentalUnitApi::class) @Composable private fun DifferentAddressesWarning() { Box( @@ -159,9 +186,9 @@ private fun DifferentAddressesWarning() { } @Composable -private fun SaveChangesButton(onClick: () -> Unit) { +private fun SaveChangesButton(onClick: () -> Unit, modifier: Modifier = Modifier) { PrimaryButton( - modifier = Modifier + modifier = modifier .imePadding() .padding(horizontal = TangemTheme.dimens.spacing16) .fillMaxWidth(), @@ -205,16 +232,11 @@ private fun Preview_TokensListScreen_Manage() { ), isLoading = false, isDifferentAddressesBlockVisible = true, - tokens = flow { - emit( - PagingData.from( - listOf( - TokenListPreviewData.createManageToken(), - TokenListPreviewData.createManageToken(), - ), - ), - ) - }, + tokens = flowOf( + PagingData.from( + listOf(TokenListPreviewData.createManageToken()), + ), + ), onSaveButtonClick = {}, onTokensLoadStateChanged = {}, ), @@ -235,16 +257,11 @@ private fun Preview_TokensListScreen_Read() { ), isLoading = false, isDifferentAddressesBlockVisible = false, - tokens = flow { - emit( - PagingData.from( - listOf( - TokenListPreviewData.createManageToken(), - TokenListPreviewData.createManageToken(), - ), - ), - ) - }, + tokens = flowOf( + PagingData.from( + listOf(TokenListPreviewData.createManageToken()), + ), + ), onTokensLoadStateChanged = {}, ), )