Updated on 2026-08-14

This commit is contained in:
Tangem 2022-03-02 19:37:10 +03:00
parent 5a1828e9bd
commit 531affeb7c
5 changed files with 72 additions and 37 deletions

View file

@ -0,0 +1,45 @@
package com.tangem.tap.features.home.compose
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.drawWithContent
import androidx.compose.ui.text.TextLayoutResult
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.unit.ExperimentalUnitApi
@OptIn(ExperimentalUnitApi::class)
@Composable
fun AutoSizeText(
text: String,
textStyle: TextStyle,
modifier: Modifier = Modifier
) {
val scaledTextStyle = remember { mutableStateOf(textStyle) }
val readyToDraw = remember { mutableStateOf(false) }
val onTextLayout: (TextLayoutResult) -> Unit = { result ->
if (result.didOverflowWidth) {
val fontSize = result.size.width / result.multiParagraph.width
scaledTextStyle.value =
// scaledTextStyle.value.copy(fontSize = TextUnit(fontSize, TextUnitType.Sp))
scaledTextStyle.value.copy(fontSize = scaledTextStyle.value.fontSize * 0.9)
} else {
readyToDraw.value = true
}
}
Text(
text = text,
modifier = modifier.drawWithContent {
if (readyToDraw.value) {
drawContent()
}
},
softWrap = false,
onTextLayout = onTextLayout,
style = scaledTextStyle.value,
)
}

View file

@ -9,7 +9,6 @@ import androidx.compose.animation.scaleIn
import androidx.compose.animation.slideInVertically
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.*
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.mutableStateOf
@ -21,6 +20,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
@ -88,32 +88,27 @@ fun FirstStoriesContent(
StartingScreenState.MEET_TANGEM -> R.string.story_meet_title
}
if (screenState.value != StartingScreenState.MEET_TANGEM) {
Text(
text = text?.let { stringResource(text) } ?: "",
fontSize = 60.sp,
fontWeight = FontWeight.SemiBold,
modifier = Modifier
.padding(start = 40.dp, end = 40.dp)
.alpha(if (screenState.value == StartingScreenState.SHOW_CARD) 0f else 1f),
color = Color.White,
textAlign = TextAlign.Center,
val style = TextStyle(
fontSize = 60.sp,
fontWeight = FontWeight.SemiBold,
color = Color.White,
textAlign = TextAlign.Center,
)
)
if (screenState.value != StartingScreenState.MEET_TANGEM) {
AutoSizeText(text = text?.let { stringResource(text) } ?: "", textStyle = style,
modifier = Modifier
.padding(start = 40.dp, end = 40.dp)
.alpha(if (screenState.value == StartingScreenState.SHOW_CARD) 0f else 1f),)
}
AnimatedVisibility(
visible = screenState.value == StartingScreenState.MEET_TANGEM,
enter = slideInVertically() { it / 2 }
) {
Text(
text = text?.let { stringResource(text) } ?: "",
fontSize = 60.sp,
fontWeight = FontWeight.SemiBold,
AutoSizeText(text = text?.let { stringResource(text) } ?: "", textStyle = style,
modifier = Modifier
.padding(start = 40.dp, end = 40.dp),
color = Color.White,
textAlign = TextAlign.Center
.padding(start = 40.dp, end = 40.dp)
)
}

View file

@ -9,10 +9,10 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.tangem.wallet.R
import androidx.compose.foundation.layout.fillMaxWidth as fillMaxWidth1
@Composable
fun HomeButtons(
@ -25,13 +25,13 @@ fun HomeButtons(
Row(
horizontalArrangement = Arrangement.SpaceEvenly,
modifier = modifier.fillMaxWidth1()
modifier = modifier.fillMaxWidth()
) {
Spacer(modifier = Modifier.size(16.dp))
Button(
modifier = Modifier
.weight(1f)
.height(42.dp),
.height(42.dp)
,
onClick = onScanButtonClick,
colors = ButtonDefaults.textButtonColors(
backgroundColor = if (isDarkBackground) darkColorBackground else Color.White,
@ -41,7 +41,8 @@ fun HomeButtons(
Text(
text = stringResource(id = R.string.home_button_scan),
fontWeight = FontWeight.Medium,
fontSize = 16.sp
fontSize = 16.sp,
textAlign = TextAlign.Center
)
}
Spacer(modifier = Modifier.size(8.dp))
@ -58,9 +59,9 @@ fun HomeButtons(
Text(
text = stringResource(id = R.string.home_button_order),
fontWeight = FontWeight.Medium,
fontSize = 16.sp
fontSize = 16.sp,
textAlign = TextAlign.Center
)
}
Spacer(modifier = Modifier.size(16.dp))
}
}

View file

@ -87,9 +87,8 @@ fun StoriesScreen(
}
Column(
horizontalAlignment = Alignment.CenterHorizontally,
modifier =
Modifier
.fillMaxSize()
verticalArrangement = Arrangement.Center,
modifier = Modifier.fillMaxWidth()
) {
Spacer(modifier = Modifier.size(24.dp))
StoriesProgressBar(
@ -111,12 +110,6 @@ fun StoriesScreen(
.align(Alignment.Start),
colorFilter = if (isDarkBackground) null else ColorFilter.tint(Color.Black)
)
}
Column(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
modifier = Modifier.fillMaxWidth()
) {
when (currentStep.value) {
1 -> FirstStoriesContent(pause, stepDuration) { hideContent.value = it }
2 -> StoriesRevolutionaryWallet()
@ -130,7 +123,8 @@ fun StoriesScreen(
isDarkBackground = isDarkBackground,
modifier = Modifier
.align(Alignment.BottomCenter)
.padding(37.dp),
.padding(37.dp)
.fillMaxWidth(),
onScanButtonClick = onScanButtonClick,
onShopButtonClick = onShopButtonClick
)

View file

@ -61,7 +61,7 @@ fun StoriesGeneralContent(
Image(
painter = painterResource(id = imageSource),
contentDescription = null,
contentScale = ContentScale.FillWidth,
contentScale = if(isDarkBackground) ContentScale.Inside else ContentScale.FillWidth,
modifier = Modifier.fillMaxWidth()
)
}