Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ import com.nextcloud.talk.ui.dialog.GetPinnedOptionsDialog
import com.nextcloud.talk.ui.dialog.MessageActionsDialog
import com.nextcloud.talk.ui.dialog.SaveToStorageDialogFragment
import com.nextcloud.talk.chat.ui.ShowReactionsModalBottomSheet
import com.nextcloud.talk.ui.bottom.sheet.ProfileBottomSheet
import com.nextcloud.talk.ui.dialog.TempMessageActionsDialog
import com.nextcloud.talk.ui.theme.LocalMessageUtils
import com.nextcloud.talk.ui.theme.LocalOpenGraphFetcher
Expand Down Expand Up @@ -640,7 +641,8 @@ class ChatActivity :
onOpenThreadClick = { messageId -> openThread(messageId.toLong()) },
onSystemMessageExpandClick = { messageId ->
chatViewModel.toggleSystemMessageCollapse(messageId)
}
},
onAvatarClick = { messageId -> onAvatarClickCompose(messageId) }
)
),
listState = listState
Expand Down Expand Up @@ -723,6 +725,13 @@ class ChatActivity :
}
}

private fun onAvatarClickCompose(messageId: Int) {
lifecycleScope.launch {
val message = chatViewModel.getMessageById(messageId.toLong()).first()
ProfileBottomSheet(ncApi, conversationUser, viewThemeUtils).showFor(message, this@ChatActivity)
}
}

private fun onVoiceSpeedClickCompose(messageId: Int) {
val currentSpeed = chatViewModel.uiState.value.items
.mapNotNull { (it as? ChatViewModel.ChatItem.MessageItem)?.uiMessage }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@ import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.core.net.toUri
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.updatePadding
import com.afollestad.materialdialogs.LayoutMode
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.bottomsheets.BottomSheet
Expand Down Expand Up @@ -83,7 +87,7 @@ class ProfileBottomSheet(val ncApi: NcApi, val userModel: User, val viewThemeUti
val filteredActions = actions.filter { allowedAppIds.contains(it.appId) }
val items = filteredActions.map { configureActionListItem(it) }

MaterialDialog(context, BottomSheet(LayoutMode.WRAP_CONTENT)).show {
val dialog = MaterialDialog(context, BottomSheet(LayoutMode.WRAP_CONTENT)).show {
cornerRadius(res = R.dimen.corner_radius)
viewThemeUtils.material.colorBottomSheetBackground(this.view)

Expand All @@ -99,6 +103,23 @@ class ProfileBottomSheet(val ncApi: NcApi, val userModel: User, val viewThemeUti
}
}
}
val sheetView = dialog.view.parent as? View ?: dialog.view

val initialBottomPadding = sheetView.paddingBottom

ViewCompat.setOnApplyWindowInsetsListener(sheetView) { view, insets ->
val bottomInset = insets.getInsets(
WindowInsetsCompat.Type.navigationBars()
).bottom

view.updatePadding(
bottom = initialBottomPadding + bottomInset
)

insets
}

ViewCompat.requestApplyInsets(sheetView)
}

private fun configureActionListItem(action: HoverCardAction): BasicListItemWithImage {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ internal val LocalOpenThreadHandler = compositionLocalOf<(Int) -> Unit> { {} }
internal val LocalQuotedMessageClickHandler = compositionLocalOf<(Int) -> Unit> { {} }
internal val LocalMessageLongClickHandler = compositionLocalOf<(Int) -> Unit> { {} }
internal val LocalShowThreadButton = compositionLocalOf { true }
internal val LocalAvatarClickHandler = compositionLocalOf<(Int) -> Unit> { {} }

private enum class MetadataLayoutMode {
CAPTION,
Expand Down Expand Up @@ -245,6 +246,7 @@ fun MessageScaffold(

@Composable
private fun RowScope.MessageLeadingDecoration(uiMessage: ChatMessageUi, isOneToOneConversation: Boolean) {
val onAvatarClick = LocalAvatarClickHandler.current
if (uiMessage.incoming && isOneToOneConversation && !uiMessage.isGrouped) {
val errorPlaceholderImage: Int = R.drawable.account_circle_96dp
val avatarContext = LocalContext.current
Expand All @@ -258,6 +260,9 @@ private fun RowScope.MessageLeadingDecoration(uiMessage: ChatMessageUi, isOneToO
.size(48.dp)
.align(Alignment.Top)
.padding(end = 8.dp)
.combinedClickable(
onClick = { onAvatarClick(uiMessage.id) }
)
)
} else if (uiMessage.incoming && isOneToOneConversation) {
Spacer(Modifier.width(48.dp))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ class ChatMessageCallbacks(
val onReactionLongClick: (Int) -> Unit = {},
val onOpenThreadClick: (Int) -> Unit = {},
val onQuotedMessageClick: (Int) -> Unit = {},
val onSystemMessageExpandClick: (Int) -> Unit = {}
val onSystemMessageExpandClick: (Int) -> Unit = {},
val onAvatarClick: (Int) -> Unit = {}
)

@Suppress("Detekt.LongMethod", "Detekt.CyclomaticComplexMethod")
Expand Down Expand Up @@ -99,7 +100,8 @@ fun ChatMessageView(
LocalReactionClickHandler provides callbacks.onReactionClick,
LocalReactionLongClickHandler provides callbacks.onReactionLongClick,
LocalOpenThreadHandler provides callbacks.onOpenThreadClick,
LocalQuotedMessageClickHandler provides callbacks.onQuotedMessageClick
LocalQuotedMessageClickHandler provides callbacks.onQuotedMessageClick,
LocalAvatarClickHandler provides callbacks.onAvatarClick
) {
SwipeToReplyContainer(
replyable = message.replyable && context.hasChatPermission,
Expand Down
3 changes: 2 additions & 1 deletion app/src/main/java/com/nextcloud/talk/ui/chat/ChatView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,8 @@ fun ChatView(
onReactionLongClick = callbacks.messageCallbacks.onReactionLongClick,
onOpenThreadClick = callbacks.messageCallbacks.onOpenThreadClick,
onQuotedMessageClick = handleQuotedMessageClick,
onSystemMessageExpandClick = callbacks.messageCallbacks.onSystemMessageExpandClick
onSystemMessageExpandClick = callbacks.messageCallbacks.onSystemMessageExpandClick,
onAvatarClick = callbacks.messageCallbacks.onAvatarClick
)
)
}
Expand Down
Loading