From 80b1c9e09389d9a31027c9dc3c76b5f6a62e12d3 Mon Sep 17 00:00:00 2001 From: Infi Date: Fri, 16 Jun 2023 00:16:58 +0200 Subject: [PATCH] feat: put rudimentary content into user sheet Signed-off-by: Infi --- .../{SelfUserOverview.kt => UserOverview.kt} | 31 +++++++++++++------ .../revolt/screens/chat/ChatRouterScreen.kt | 10 ++++-- .../chat/revolt/sheets/UserContextSheet.kt | 22 +++++++++++++ 3 files changed, 50 insertions(+), 13 deletions(-) rename app/src/main/java/chat/revolt/components/screens/settings/{SelfUserOverview.kt => UserOverview.kt} (82%) create mode 100644 app/src/main/java/chat/revolt/sheets/UserContextSheet.kt diff --git a/app/src/main/java/chat/revolt/components/screens/settings/SelfUserOverview.kt b/app/src/main/java/chat/revolt/components/screens/settings/UserOverview.kt similarity index 82% rename from app/src/main/java/chat/revolt/components/screens/settings/SelfUserOverview.kt rename to app/src/main/java/chat/revolt/components/screens/settings/UserOverview.kt index c4f68e4d..d1951b7c 100644 --- a/app/src/main/java/chat/revolt/components/screens/settings/SelfUserOverview.kt +++ b/app/src/main/java/chat/revolt/components/screens/settings/UserOverview.kt @@ -32,6 +32,7 @@ import chat.revolt.api.RevoltAPI import chat.revolt.api.internals.ULID import chat.revolt.api.routes.user.fetchUserProfile import chat.revolt.api.schemas.Profile +import chat.revolt.api.schemas.User import chat.revolt.components.generic.RemoteImage import chat.revolt.components.generic.UserAvatar import chat.revolt.components.generic.presenceFromStatus @@ -39,10 +40,20 @@ import chat.revolt.components.generic.presenceFromStatus @Composable fun SelfUserOverview() { val selfUser = RevoltAPI.userCache[RevoltAPI.selfId] ?: return + + UserOverview(selfUser) +} + +@Composable +fun UserOverview(user: User) { var profile by remember { mutableStateOf(null) } - LaunchedEffect(selfUser) { - profile = fetchUserProfile(selfUser.id ?: ULID.makeSpecial(0)) + LaunchedEffect(user) { + try { + profile = fetchUserProfile(user.id ?: ULID.makeSpecial(0)) + } catch (e: Exception) { + e.printStackTrace() + } } Box( @@ -80,26 +91,26 @@ fun SelfUserOverview() { .fillMaxWidth() ) { UserAvatar( - username = selfUser.displayName ?: stringResource(id = R.string.unknown), - userId = selfUser.id ?: ULID.makeSpecial(0), - avatar = selfUser.avatar, + username = user.displayName ?: stringResource(id = R.string.unknown), + userId = user.id ?: ULID.makeSpecial(0), + avatar = user.avatar, size = 48.dp, - presence = presenceFromStatus(selfUser.status?.presence ?: "Offline"), + presence = presenceFromStatus(user.status?.presence ?: "Offline"), ) Spacer(modifier = Modifier.width(12.dp)) Text( text = AnnotatedString.Builder().apply { - if (selfUser.displayName != null) { + if (user.displayName != null) { pushStyle(SpanStyle(fontWeight = FontWeight.Bold)) - append(selfUser.displayName) + append(user.displayName) pop() append("\n") } - append("${selfUser.username}") + append("${user.username}") pushStyle(SpanStyle(fontWeight = FontWeight.ExtraLight)) - append("#${selfUser.discriminator}") + append("#${user.discriminator}") pop() }.toAnnotatedString(), color = if (profile?.background != null) Color.White else LocalContentColor.current, diff --git a/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt b/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt index c63f2cfa..686cc232 100644 --- a/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt @@ -70,6 +70,7 @@ import chat.revolt.screens.chat.views.NoCurrentChannelScreen import chat.revolt.screens.chat.views.channel.ChannelScreen import chat.revolt.sheets.AddServerSheet import chat.revolt.sheets.StatusSheet +import chat.revolt.sheets.UserContextSheet import com.airbnb.lottie.RenderMode import com.airbnb.lottie.compose.LottieAnimation import com.airbnb.lottie.compose.LottieCompositionSpec @@ -335,9 +336,12 @@ fun ChatRouterScreen(topNav: NavController, viewModel: ChatRouterViewModel = hil showUserContextSheet = false }, ) { - Column { - Text(text = "this is user context sheet for $userContextSheetTarget") - } + UserContextSheet( + userId = userContextSheetTarget, + onHideSheet = { + userContextSheetState.hide() + } + ) } } diff --git a/app/src/main/java/chat/revolt/sheets/UserContextSheet.kt b/app/src/main/java/chat/revolt/sheets/UserContextSheet.kt new file mode 100644 index 00000000..9e3955ab --- /dev/null +++ b/app/src/main/java/chat/revolt/sheets/UserContextSheet.kt @@ -0,0 +1,22 @@ +package chat.revolt.sheets + +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import chat.revolt.api.RevoltAPI +import chat.revolt.components.screens.settings.UserOverview + +@Composable +fun UserContextSheet( + userId: String, + onHideSheet: suspend () -> Unit, +) { + val user = RevoltAPI.userCache[userId] + + if (user == null) { + // TODO fetch user in this scenario + Text(text = "not in user cache, but for now there's always this message") + return + } + + UserOverview(user) +} \ No newline at end of file