Fixes QR Code screen padding

This commit is contained in:
Vitor Pamplona
2025-03-26 11:22:38 -04:00
parent aac366c690
commit b35fd24a93
@@ -23,16 +23,23 @@ package com.vitorpamplona.amethyst.ui.screen.loggedIn.qrcode
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
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.consumeWindowInsets
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.FilledTonalButton
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
@@ -53,6 +60,7 @@ import com.vitorpamplona.amethyst.model.User
import com.vitorpamplona.amethyst.ui.components.CreateTextWithEmoji import com.vitorpamplona.amethyst.ui.components.CreateTextWithEmoji
import com.vitorpamplona.amethyst.ui.components.DisplayNIP05 import com.vitorpamplona.amethyst.ui.components.DisplayNIP05
import com.vitorpamplona.amethyst.ui.components.RobohashFallbackAsyncImage import com.vitorpamplona.amethyst.ui.components.RobohashFallbackAsyncImage
import com.vitorpamplona.amethyst.ui.components.SetDialogToEdgeToEdge
import com.vitorpamplona.amethyst.ui.components.nip05VerificationAsAState import com.vitorpamplona.amethyst.ui.components.nip05VerificationAsAState
import com.vitorpamplona.amethyst.ui.note.ArrowBackIcon import com.vitorpamplona.amethyst.ui.note.ArrowBackIcon
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
@@ -61,6 +69,7 @@ import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.Font14SP import com.vitorpamplona.amethyst.ui.theme.Font14SP
import com.vitorpamplona.amethyst.ui.theme.Size10dp import com.vitorpamplona.amethyst.ui.theme.Size10dp
import com.vitorpamplona.amethyst.ui.theme.Size35dp import com.vitorpamplona.amethyst.ui.theme.Size35dp
import com.vitorpamplona.amethyst.ui.theme.StdHorzSpacer
import com.vitorpamplona.amethyst.ui.theme.largeProfilePictureModifier import com.vitorpamplona.amethyst.ui.theme.largeProfilePictureModifier
import com.vitorpamplona.quartz.nip01Core.metadata.UserMetadata import com.vitorpamplona.quartz.nip01Core.metadata.UserMetadata
@@ -95,6 +104,7 @@ fun BackButton(onPress: () -> Unit) {
} }
} }
@OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun ShowQRDialog( fun ShowQRDialog(
user: User, user: User,
@@ -108,91 +118,113 @@ fun ShowQRDialog(
onDismissRequest = onClose, onDismissRequest = onClose,
properties = DialogProperties(usePlatformDefaultWidth = false), properties = DialogProperties(usePlatformDefaultWidth = false),
) { ) {
Surface { SetDialogToEdgeToEdge()
Column {
Row(
modifier = Modifier.padding(10.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically,
) {
BackButton(onPress = onClose)
}
Column( Scaffold(
modifier = Modifier.fillMaxSize().padding(horizontal = 10.dp), topBar = {
verticalArrangement = Arrangement.SpaceAround, TopAppBar(
) { title = {},
if (presenting) { navigationIcon = {
Column { Row {
Row( Spacer(modifier = StdHorzSpacer)
horizontalArrangement = Arrangement.Center, BackButton(onPress = onClose)
modifier = Modifier.fillMaxWidth(), }
) { },
RobohashFallbackAsyncImage( colors =
robot = user.pubkeyHex, TopAppBarDefaults.topAppBarColors(
model = user.profilePicture(), containerColor = MaterialTheme.colorScheme.surface,
contentDescription = stringRes(R.string.profile_image), ),
modifier = MaterialTheme.colorScheme.largeProfilePictureModifier, )
loadProfilePicture = accountViewModel.settings.showProfilePictures.value, },
loadRobohash = accountViewModel.settings.featureSet != FeatureSetType.PERFORMANCE, ) { pad ->
) Surface(
} Modifier
Row( .fillMaxSize()
horizontalArrangement = Arrangement.Center, .padding(
modifier = Modifier.fillMaxWidth().padding(top = 10.dp), start = 10.dp,
) { end = 10.dp,
CreateTextWithEmoji( top = pad.calculateTopPadding(),
text = user.info?.bestName() ?: "", bottom = pad.calculateBottomPadding(),
tags = user.info?.tags, ).consumeWindowInsets(pad)
fontWeight = FontWeight.Bold, .imePadding(),
fontSize = 20.sp, ) {
) Column {
} Column(
modifier = Modifier.fillMaxSize().padding(horizontal = 10.dp),
Row( verticalArrangement = Arrangement.SpaceAround,
verticalAlignment = Alignment.CenterVertically, ) {
horizontalArrangement = Arrangement.Center, if (presenting) {
modifier = Modifier.fillMaxWidth().padding(top = 4.dp), Column {
) { Row(
val nip05 = user.nip05() horizontalArrangement = Arrangement.Center,
if (nip05 != null) { modifier = Modifier.fillMaxWidth(),
val nip05Verified = ) {
nip05VerificationAsAState(user.info!!, user.pubkeyHex, accountViewModel) RobohashFallbackAsyncImage(
robot = user.pubkeyHex,
DisplayNIP05(nip05, nip05Verified, accountViewModel) model = user.profilePicture(),
} else { contentDescription = stringRes(R.string.profile_image),
Text( modifier = MaterialTheme.colorScheme.largeProfilePictureModifier,
text = user.pubkeyDisplayHex(), loadProfilePicture = accountViewModel.settings.showProfilePictures.value,
fontSize = Font14SP, loadRobohash = accountViewModel.settings.featureSet != FeatureSetType.PERFORMANCE,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
) )
} }
Row(
horizontalArrangement = Arrangement.Center,
modifier = Modifier.fillMaxWidth().padding(top = 10.dp),
) {
CreateTextWithEmoji(
text = user.info?.bestName() ?: "",
tags = user.info?.tags,
fontWeight = FontWeight.Bold,
fontSize = 20.sp,
)
}
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Center,
modifier = Modifier.fillMaxWidth().padding(top = 4.dp),
) {
val nip05 = user.nip05()
if (nip05 != null) {
val nip05Verified =
nip05VerificationAsAState(user.info!!, user.pubkeyHex, accountViewModel)
DisplayNIP05(nip05, nip05Verified, accountViewModel)
} else {
Text(
text = user.pubkeyDisplayHex(),
fontSize = Font14SP,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
}
}
} }
}
Row( Row(
horizontalArrangement = Arrangement.Center, horizontalArrangement = Arrangement.Center,
modifier = Modifier.fillMaxWidth().padding(horizontal = Size10dp), modifier = Modifier.fillMaxWidth().padding(horizontal = Size10dp),
) {
QrCodeDrawer(user.toNostrUri())
}
Row(modifier = Modifier.padding(horizontal = 30.dp)) {
FilledTonalButton(
onClick = { presenting = false },
shape = RoundedCornerShape(Size35dp),
modifier = Modifier.fillMaxWidth().height(50.dp),
) { ) {
Text(text = stringRes(R.string.scan_qr)) QrCodeDrawer(user.toNostrUri())
} }
}
} else { Row(modifier = Modifier.padding(horizontal = 30.dp)) {
NIP19QrCodeScanner { FilledTonalButton(
if (it.isNullOrEmpty()) { onClick = { presenting = false },
presenting = true shape = RoundedCornerShape(Size35dp),
} else { modifier = Modifier.fillMaxWidth().height(50.dp),
onScan(it) ) {
Text(text = stringRes(R.string.scan_qr))
}
}
} else {
NIP19QrCodeScanner {
if (it.isNullOrEmpty()) {
presenting = true
} else {
onScan(it)
}
} }
} }
} }