From 72ea2d538e9bba3ecfa9a3357b28e39cd99e6051 Mon Sep 17 00:00:00 2001 From: Infi Date: Thu, 15 Jun 2023 23:50:31 +0200 Subject: [PATCH] feat: user sheet placeholder Signed-off-by: Infi --- .../chat/revolt/components/chat/Message.kt | 4 +++- .../revolt/components/generic/UserAvatar.kt | 4 ++-- .../revolt/screens/chat/ChatRouterScreen.kt | 24 ++++++++++++++++++- .../chat/views/channel/ChannelScreen.kt | 6 +++++ 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/chat/revolt/components/chat/Message.kt b/app/src/main/java/chat/revolt/components/chat/Message.kt index 9fef9ac2..b522f1bc 100644 --- a/app/src/main/java/chat/revolt/components/chat/Message.kt +++ b/app/src/main/java/chat/revolt/components/chat/Message.kt @@ -128,6 +128,7 @@ fun Message( truncate: Boolean = false, parse: (MessageSchema) -> SpannableStringBuilder = { SpannableStringBuilder(it.content) }, onMessageContextMenu: () -> Unit = {}, + onAvatarClick: () -> Unit = {}, canReply: Boolean = false, onReply: () -> Unit = {}, ) { @@ -198,7 +199,8 @@ fun Message( username = User.resolveDefaultName(author), userId = author.id ?: message.id ?: ULID.makeSpecial(0), avatar = author.avatar, - rawUrl = message.masquerade?.avatar?.let { asJanuaryProxyUrl(it) } + rawUrl = message.masquerade?.avatar?.let { asJanuaryProxyUrl(it) }, + onClick = onAvatarClick, ) } } else { diff --git a/app/src/main/java/chat/revolt/components/generic/UserAvatar.kt b/app/src/main/java/chat/revolt/components/generic/UserAvatar.kt index e9ac8321..76c763a8 100644 --- a/app/src/main/java/chat/revolt/components/generic/UserAvatar.kt +++ b/app/src/main/java/chat/revolt/components/generic/UserAvatar.kt @@ -107,6 +107,7 @@ fun UserAvatar( url = "$REVOLT_BASE/users/${userId}/default_avatar", description = stringResource(id = R.string.avatar_alt, username), modifier = Modifier + .clip(CircleShape) .size(size) .then( if (onLongClick != null || onClick != null) Modifier @@ -115,8 +116,7 @@ fun UserAvatar( onLongClick = { onLongClick?.invoke() } ) else Modifier - ) - .clip(CircleShape), + ), ) } 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 03b944a9..c63f2cfa 100644 --- a/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt @@ -190,6 +190,9 @@ fun ChatRouterScreen(topNav: NavController, viewModel: ChatRouterViewModel = hil var showServerContextSheet by remember { mutableStateOf(false) } var serverContextSheetTarget by remember { mutableStateOf("") } + var showUserContextSheet by remember { mutableStateOf(false) } + var userContextSheetTarget by remember { mutableStateOf("") } + BackHandler(enabled = drawerState.isClosed) { scope.launch { drawerState.open() @@ -323,6 +326,21 @@ fun ChatRouterScreen(topNav: NavController, viewModel: ChatRouterViewModel = hil } } + if (showUserContextSheet) { + val userContextSheetState = rememberModalBottomSheetState() + + ModalBottomSheet( + sheetState = userContextSheetState, + onDismissRequest = { + showUserContextSheet = false + }, + ) { + Column { + Text(text = "this is user context sheet for $userContextSheetTarget") + } + } + } + Column( modifier = Modifier .fillMaxWidth() @@ -473,7 +491,11 @@ fun ChatRouterScreen(topNav: NavController, viewModel: ChatRouterViewModel = hil if (drawerState.isOpen) drawerState.close() else drawerState.open() } - } + }, + onUserSheetOpenFor = { target -> + userContextSheetTarget = target + showUserContextSheet = true + }, ) } } diff --git a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt index 038095d1..e3826c1d 100644 --- a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt @@ -86,6 +86,7 @@ fun ChannelScreen( navController: NavController, channelId: String, onToggleDrawer: () -> Unit, + onUserSheetOpenFor: (String) -> Unit, viewModel: ChannelScreenViewModel = viewModel() ) { val channel = viewModel.activeChannel @@ -282,6 +283,11 @@ fun ChannelScreen( messageContextSheetShown = true messageContextSheetTarget = message.id ?: "" }, + onAvatarClick = { + message.author?.let { author -> + onUserSheetOpenFor(author) + } + }, canReply = true, onReply = { if (viewModel.pendingReplies.size >= 5) {