Correctly display status

This commit is contained in:
Vitor Pamplona
2023-08-24 16:17:20 -04:00
parent b3bb85cd53
commit 62db68c7b2
2 changed files with 42 additions and 28 deletions

View File

@@ -14,6 +14,7 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState import androidx.compose.runtime.MutableState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
@@ -24,12 +25,13 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.model.AddressableNote import com.vitorpamplona.amethyst.model.AddressableNote
import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.model.User
import com.vitorpamplona.amethyst.service.Nip05Verifier import com.vitorpamplona.amethyst.service.Nip05Verifier
import com.vitorpamplona.amethyst.ui.note.LoadAnyAddressableNote import com.vitorpamplona.amethyst.ui.note.LoadStatuses
import com.vitorpamplona.amethyst.ui.note.NIP05CheckingIcon import com.vitorpamplona.amethyst.ui.note.NIP05CheckingIcon
import com.vitorpamplona.amethyst.ui.note.NIP05FailedVerification import com.vitorpamplona.amethyst.ui.note.NIP05FailedVerification
import com.vitorpamplona.amethyst.ui.note.NIP05VerifiedIcon import com.vitorpamplona.amethyst.ui.note.NIP05VerifiedIcon
@@ -115,60 +117,72 @@ fun ObserveDisplayNip05Status(baseNote: Note, columnModifier: Modifier = Modifie
fun ObserveDisplayNip05Status(baseUser: User, columnModifier: Modifier = Modifier) { fun ObserveDisplayNip05Status(baseUser: User, columnModifier: Modifier = Modifier) {
val nip05 by baseUser.live().nip05Changes.observeAsState(baseUser.nip05()) val nip05 by baseUser.live().nip05Changes.observeAsState(baseUser.nip05())
LoadAnyAddressableNote(baseUser) { statuses -> LoadStatuses(baseUser) { statuses ->
Crossfade(targetState = nip05, modifier = columnModifier, label = "ObserveDisplayNip05StatusCrossfade") { Crossfade(targetState = nip05, modifier = columnModifier, label = "ObserveDisplayNip05StatusCrossfade") {
if (it != null) { VerifyAndDisplayNIP05OrStatusLine(it, statuses, baseUser, columnModifier)
VerifyAndDisplayNIP05OrStatusLine(it, statuses, baseUser, columnModifier)
} else {
Text(
text = baseUser.pubkeyDisplayHex(),
color = MaterialTheme.colors.placeholderText,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
modifier = columnModifier
)
}
} }
} }
} }
@Composable @Composable
private fun VerifyAndDisplayNIP05OrStatusLine( private fun VerifyAndDisplayNIP05OrStatusLine(
nip05: String, nip05: String?,
statuses: ImmutableList<AddressableNote>, statuses: ImmutableList<AddressableNote>,
baseUser: User, baseUser: User,
columnModifier: Modifier = Modifier columnModifier: Modifier = Modifier
) { ) {
var displayStatusOrNIP05 by remember {
mutableStateOf<Int>(0)
}
val nip05Verified = nip05VerificationAsAState(baseUser.info!!, baseUser.pubkeyHex)
Column(modifier = columnModifier) { Column(modifier = columnModifier) {
Crossfade(targetState = displayStatusOrNIP05, label = "NIP05StatusRotationCrossfade") { Row(verticalAlignment = Alignment.CenterVertically) {
Row(verticalAlignment = Alignment.CenterVertically) { if (nip05 != null) {
if (statuses.isEmpty()) { val nip05Verified = nip05VerificationAsAState(baseUser.info!!, baseUser.pubkeyHex)
DisplayNIP05(nip05, nip05Verified)
} else if (nip05Verified.value != true || it < 0 || it >= statuses.size) { if (nip05Verified.value != true) {
DisplayNIP05(nip05, nip05Verified) DisplayNIP05(nip05, nip05Verified)
} else if (!statuses.isEmpty()) {
RotateStatuses(statuses)
} else { } else {
DisplayStatus(statuses[it]) DisplayNIP05(nip05, nip05Verified)
}
} else {
if (!statuses.isEmpty()) {
RotateStatuses(statuses)
} else {
DisplayUsersNpub(baseUser.pubkeyDisplayHex())
} }
} }
} }
} }
}
@Composable
fun RotateStatuses(statuses: ImmutableList<AddressableNote>) {
var indexToDisplay by remember {
mutableIntStateOf(0)
}
DisplayStatus(statuses[indexToDisplay])
if (statuses.size > 1) { if (statuses.size > 1) {
LaunchedEffect(Unit) { LaunchedEffect(Unit) {
while (true) { while (true) {
delay(10.seconds) delay(10.seconds)
displayStatusOrNIP05 = ((displayStatusOrNIP05 + 1) % (statuses.size + 1)) indexToDisplay = ((indexToDisplay + 1) % (statuses.size + 1))
} }
} }
} }
} }
@Composable
fun DisplayUsersNpub(npub: String) {
Text(
text = npub,
fontSize = 14.sp,
color = MaterialTheme.colors.placeholderText,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
}
@Composable @Composable
fun DisplayStatus(addressableNote: AddressableNote) { fun DisplayStatus(addressableNote: AddressableNote) {
val noteState by addressableNote.live().metadata.observeAsState() val noteState by addressableNote.live().metadata.observeAsState()

View File

@@ -2507,7 +2507,7 @@ fun SecondUserInfoRow(
} }
@Composable @Composable
fun LoadAnyAddressableNote( fun LoadStatuses(
user: User, user: User,
content: @Composable (ImmutableList<AddressableNote>) -> Unit content: @Composable (ImmutableList<AddressableNote>) -> Unit
) { ) {