forked from GitHub-Mirror/riotX-android
Show 'view reaction' option in context menu
This commit is contained in:
parent
834a865dfa
commit
053dc1d8dd
@ -621,6 +621,11 @@ class RoomDetailFragment :
|
|||||||
val eventId = actionData.data?.toString() ?: return
|
val eventId = actionData.data?.toString() ?: return
|
||||||
startActivityForResult(EmojiReactionPickerActivity.intent(requireContext(), eventId), REACTION_SELECT_REQUEST_CODE)
|
startActivityForResult(EmojiReactionPickerActivity.intent(requireContext(), eventId), REACTION_SELECT_REQUEST_CODE)
|
||||||
}
|
}
|
||||||
|
MessageMenuViewModel.ACTION_VIEW_REACTIONS -> {
|
||||||
|
val messageInformationData = actionData.data as? MessageInformationData ?: return
|
||||||
|
ViewReactionBottomSheet.newInstance(roomDetailArgs.roomId,messageInformationData)
|
||||||
|
.show(requireActivity().supportFragmentManager, "DISPLAY_REACTIONS")
|
||||||
|
}
|
||||||
MessageMenuViewModel.ACTION_COPY -> {
|
MessageMenuViewModel.ACTION_COPY -> {
|
||||||
//I need info about the current selected message :/
|
//I need info about the current selected message :/
|
||||||
copyToClipboard(requireContext(), actionData.data?.toString() ?: "", false)
|
copyToClipboard(requireContext(), actionData.data?.toString() ?: "", false)
|
||||||
|
@ -195,7 +195,8 @@ class RoomDetailViewModel(initialState: RoomDetailViewState,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
SendMode.EDIT -> {
|
SendMode.EDIT -> {
|
||||||
room.editTextMessage(state.selectedEvent?.root?.eventId ?: "", action.text, action.autoMarkdown)
|
room.editTextMessage(state.selectedEvent?.root?.eventId
|
||||||
|
?: "", action.text, action.autoMarkdown)
|
||||||
setState {
|
setState {
|
||||||
copy(
|
copy(
|
||||||
sendMode = SendMode.REGULAR,
|
sendMode = SendMode.REGULAR,
|
||||||
@ -330,7 +331,6 @@ class RoomDetailViewModel(initialState: RoomDetailViewState,
|
|||||||
room.updateQuickReaction(action.selectedReaction, action.opposite, action.targetEventId, session.sessionParams.credentials.userId)
|
room.updateQuickReaction(action.selectedReaction, action.opposite, action.targetEventId, session.sessionParams.credentials.userId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun handleSendMedia(action: RoomDetailActions.SendMedia) {
|
private fun handleSendMedia(action: RoomDetailActions.SendMedia) {
|
||||||
val attachments = action.mediaFiles.map {
|
val attachments = action.mediaFiles.map {
|
||||||
ContentAttachmentData(
|
ContentAttachmentData(
|
||||||
@ -352,7 +352,7 @@ class RoomDetailViewModel(initialState: RoomDetailViewState,
|
|||||||
displayedEventsObservable.accept(action)
|
displayedEventsObservable.accept(action)
|
||||||
//We need to update this with the related m.replace also (to move read receipt)
|
//We need to update this with the related m.replace also (to move read receipt)
|
||||||
action.event.annotations?.editSummary?.sourceEvents?.forEach {
|
action.event.annotations?.editSummary?.sourceEvents?.forEach {
|
||||||
room.getTimeLineEvent(it)?.let {event ->
|
room.getTimeLineEvent(it)?.let { event ->
|
||||||
displayedEventsObservable.accept(RoomDetailActions.EventDisplayed(event))
|
displayedEventsObservable.accept(RoomDetailActions.EventDisplayed(event))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,7 @@ class MessageMenuViewModel(initialState: MessageMenuState) : VectorViewModel<Mes
|
|||||||
val event = currentSession.getRoom(parcel.roomId)?.getTimeLineEvent(parcel.eventId)
|
val event = currentSession.getRoom(parcel.roomId)?.getTimeLineEvent(parcel.eventId)
|
||||||
?: return null
|
?: return null
|
||||||
|
|
||||||
val messageContent: MessageContent = event.annotations?.editSummary?.aggregatedContent?.toModel()
|
val messageContent: MessageContent = event.annotations?.editSummary?.aggregatedContent?.toModel()
|
||||||
?: event.root.content.toModel() ?: return null
|
?: event.root.content.toModel() ?: return null
|
||||||
val type = messageContent.type
|
val type = messageContent.type
|
||||||
|
|
||||||
@ -64,9 +64,7 @@ class MessageMenuViewModel(initialState: MessageMenuState) : VectorViewModel<Mes
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//TODO determine if can copy, forward, reply, quote, report?
|
|
||||||
val actions = ArrayList<SimpleAction>().apply {
|
val actions = ArrayList<SimpleAction>().apply {
|
||||||
|
|
||||||
if (event.sendState == SendState.SENDING) {
|
if (event.sendState == SendState.SENDING) {
|
||||||
@ -94,10 +92,13 @@ class MessageMenuViewModel(initialState: MessageMenuState) : VectorViewModel<Mes
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (canQuote(event, messageContent)) {
|
if (canQuote(event, messageContent)) {
|
||||||
//TODO quote icon
|
|
||||||
this.add(SimpleAction(ACTION_QUOTE, R.string.quote, R.drawable.ic_quote, parcel.eventId))
|
this.add(SimpleAction(ACTION_QUOTE, R.string.quote, R.drawable.ic_quote, parcel.eventId))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (canViewReactions(event)) {
|
||||||
|
this.add(SimpleAction(ACTION_VIEW_REACTIONS, R.string.message_view_reaction, R.drawable.ic_view_reactions, parcel.informationData))
|
||||||
|
}
|
||||||
|
|
||||||
if (canShare(type)) {
|
if (canShare(type)) {
|
||||||
if (messageContent is MessageImageContent) {
|
if (messageContent is MessageImageContent) {
|
||||||
this.add(
|
this.add(
|
||||||
@ -144,7 +145,7 @@ class MessageMenuViewModel(initialState: MessageMenuState) : VectorViewModel<Mes
|
|||||||
MessageType.MSGTYPE_VIDEO,
|
MessageType.MSGTYPE_VIDEO,
|
||||||
MessageType.MSGTYPE_AUDIO,
|
MessageType.MSGTYPE_AUDIO,
|
||||||
MessageType.MSGTYPE_FILE -> true
|
MessageType.MSGTYPE_FILE -> true
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,7 +160,7 @@ class MessageMenuViewModel(initialState: MessageMenuState) : VectorViewModel<Mes
|
|||||||
MessageType.MSGTYPE_LOCATION -> {
|
MessageType.MSGTYPE_LOCATION -> {
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -170,6 +171,13 @@ class MessageMenuViewModel(initialState: MessageMenuState) : VectorViewModel<Mes
|
|||||||
return event.root.sender == myUserId
|
return event.root.sender == myUserId
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun canViewReactions(event: TimelineEvent): Boolean {
|
||||||
|
//Only event of type Event.EVENT_TYPE_MESSAGE are supported for the moment
|
||||||
|
if (event.root.type != EventType.MESSAGE) return false
|
||||||
|
//TODO if user is admin or moderator
|
||||||
|
return event.annotations?.reactionsSummary?.isNotEmpty() ?: false
|
||||||
|
}
|
||||||
|
|
||||||
private fun canEdit(event: TimelineEvent, myUserId: String): Boolean {
|
private fun canEdit(event: TimelineEvent, myUserId: String): Boolean {
|
||||||
//Only event of type Event.EVENT_TYPE_MESSAGE are supported for the moment
|
//Only event of type Event.EVENT_TYPE_MESSAGE are supported for the moment
|
||||||
if (event.root.type != EventType.MESSAGE) return false
|
if (event.root.type != EventType.MESSAGE) return false
|
||||||
@ -191,7 +199,7 @@ class MessageMenuViewModel(initialState: MessageMenuState) : VectorViewModel<Mes
|
|||||||
MessageType.MSGTYPE_LOCATION -> {
|
MessageType.MSGTYPE_LOCATION -> {
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,7 +211,7 @@ class MessageMenuViewModel(initialState: MessageMenuState) : VectorViewModel<Mes
|
|||||||
MessageType.MSGTYPE_VIDEO -> {
|
MessageType.MSGTYPE_VIDEO -> {
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -220,6 +228,7 @@ class MessageMenuViewModel(initialState: MessageMenuState) : VectorViewModel<Mes
|
|||||||
const val PERMALINK = "PERMALINK"
|
const val PERMALINK = "PERMALINK"
|
||||||
const val ACTION_FLAG = "ACTION_FLAG"
|
const val ACTION_FLAG = "ACTION_FLAG"
|
||||||
const val ACTION_QUICK_REACT = "ACTION_QUICK_REACT"
|
const val ACTION_QUICK_REACT = "ACTION_QUICK_REACT"
|
||||||
|
const val ACTION_VIEW_REACTIONS = "ACTION_VIEW_REACTIONS"
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
38
vector/src/main/res/drawable/ic_view_reactions.xml
Normal file
38
vector/src/main/res/drawable/ic_view_reactions.xml
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="22dp"
|
||||||
|
android:height="22dp"
|
||||||
|
android:viewportWidth="22"
|
||||||
|
android:viewportHeight="22">
|
||||||
|
<path
|
||||||
|
android:pathData="M11,11m-10,0a10,10 0,1 1,20 0a10,10 0,1 1,-20 0"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:fillType="evenOdd"
|
||||||
|
android:strokeColor="#9e9e9e"
|
||||||
|
android:strokeLineCap="round"/>
|
||||||
|
<path
|
||||||
|
android:pathData="m7,13s1.5,2 4,2 4,-2 4,-2"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:fillType="evenOdd"
|
||||||
|
android:strokeColor="#9e9e9e"
|
||||||
|
android:strokeLineCap="round"/>
|
||||||
|
<path
|
||||||
|
android:pathData="m8,8h0.01"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:fillType="evenOdd"
|
||||||
|
android:strokeColor="#9e9e9e"
|
||||||
|
android:strokeLineCap="round"/>
|
||||||
|
<path
|
||||||
|
android:pathData="m14,8h0.01"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:fillType="evenOdd"
|
||||||
|
android:strokeColor="#9e9e9e"
|
||||||
|
android:strokeLineCap="round"/>
|
||||||
|
</vector>
|
@ -2,7 +2,7 @@
|
|||||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:shape="rectangle">
|
android:shape="rectangle">
|
||||||
|
|
||||||
<size android:width="40dp" android:height="22dp"/>
|
<!--<size android:width="40dp" android:height="22dp"/>-->
|
||||||
|
|
||||||
<solid android:color="?vctr_list_header_background_color" />
|
<solid android:color="?vctr_list_header_background_color" />
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
<string name="reactions_agree">Agree</string>
|
<string name="reactions_agree">Agree</string>
|
||||||
<string name="reactions_like">Like</string>
|
<string name="reactions_like">Like</string>
|
||||||
<string name="message_add_reaction">Add Reaction</string>
|
<string name="message_add_reaction">Add Reaction</string>
|
||||||
|
<string name="message_view_reaction">View Reactions</string>
|
||||||
<string name="reactions">Reactions</string>
|
<string name="reactions">Reactions</string>
|
||||||
|
|
||||||
<string name="event_redacted_by_user_reason">Event deleted by user</string>
|
<string name="event_redacted_by_user_reason">Event deleted by user</string>
|
||||||
|
Loading…
Reference in New Issue
Block a user