Merge branch 'main' into develop
This commit is contained in:
commit
ecb49b3b27
46
CHANGES.md
46
CHANGES.md
|
@ -1,3 +1,49 @@
|
|||
Changes in Element v1.4.4 (2022-03-09)
|
||||
======================================
|
||||
|
||||
Features ✨
|
||||
----------
|
||||
- Adds animated typing indicator to the bottom of the timeline ([#3296](https://github.com/vector-im/element-android/issues/3296))
|
||||
- Removes the topic and typing information from the room's top bar ([#4642](https://github.com/vector-im/element-android/issues/4642))
|
||||
- Add possibility to save media from Gallery + reorder choices in message context menu ([#5005](https://github.com/vector-im/element-android/issues/5005))
|
||||
- Improves settings error dialog messaging when changing avatar or display name fails ([#5418](https://github.com/vector-im/element-android/issues/5418))
|
||||
|
||||
Bugfixes 🐛
|
||||
----------
|
||||
- Open direct message screen when clicking on DM button in the space members list ([#4319](https://github.com/vector-im/element-android/issues/4319))
|
||||
- Fix incorrect media cache size in settings ([#5394](https://github.com/vector-im/element-android/issues/5394))
|
||||
- Setting an avatar when creating a room had no effect ([#5402](https://github.com/vector-im/element-android/issues/5402))
|
||||
- Fix reactions summary crash when reopening a room ([#5463](https://github.com/vector-im/element-android/issues/5463))
|
||||
- Fixing room titles overlapping the room image in the room toolbar ([#5468](https://github.com/vector-im/element-android/issues/5468))
|
||||
|
||||
In development 🚧
|
||||
----------------
|
||||
- Starts the FTUE account personalisation flow by adding an account created screen behind a feature flag ([#5158](https://github.com/vector-im/element-android/issues/5158))
|
||||
|
||||
SDK API changes ⚠️
|
||||
------------------
|
||||
- Change name of getTimeLineEvent and getTimeLineEventLive methods to getTimelineEvent and getTimelineEventLive. ([#5330](https://github.com/vector-im/element-android/issues/5330))
|
||||
|
||||
Other changes
|
||||
-------------
|
||||
- Improve Bubble layouts rendering ([#5303](https://github.com/vector-im/element-android/issues/5303))
|
||||
- Continue improving realm usage (potentially helping with storage and RAM usage) ([#5330](https://github.com/vector-im/element-android/issues/5330))
|
||||
- Update reaction button layout. ([#5313](https://github.com/vector-im/element-android/issues/5313))
|
||||
- Adds forceLoginFallback feature flag and usages to FTUE login and registration ([#5325](https://github.com/vector-im/element-android/issues/5325))
|
||||
- Override task affinity to prevent unknown activities running in our app tasks. ([#4498](https://github.com/vector-im/element-android/issues/4498))
|
||||
- Tentatively fixing the UI sanity test being unable to click on the space menu items ([#5269](https://github.com/vector-im/element-android/issues/5269))
|
||||
- Moves attachment-viewer, diff-match-patch, and multipicker modules to subfolders under library ([#5309](https://github.com/vector-im/element-android/issues/5309))
|
||||
- Log the `since` token used and `next_batch` token returned when doing an incremental sync. ([#5312](https://github.com/vector-im/element-android/issues/5312), [#5318](https://github.com/vector-im/element-android/issues/5318))
|
||||
- Upgrades material dependency version from 1.4.0 to 1.5.0 ([#5392](https://github.com/vector-im/element-android/issues/5392))
|
||||
- Using app name instead of hardcoded "Element" for exported keys filename ([#5326](https://github.com/vector-im/element-android/issues/5326))
|
||||
- Upgrade the plugin which generate strings with template from 1.2.2 to 2.0.0 ([#5348](https://github.com/vector-im/element-android/issues/5348))
|
||||
- Remove about 700 unused strings and their translations ([#5352](https://github.com/vector-im/element-android/issues/5352))
|
||||
- Creates dedicated VectorOverrides for forcing behaviour for local testing/development ([#5361](https://github.com/vector-im/element-android/issues/5361))
|
||||
- Cleanup unused threads build configurations ([#5379](https://github.com/vector-im/element-android/issues/5379))
|
||||
- Notify element-android channel each time a nightly build completes. ([#5314](https://github.com/vector-im/element-android/issues/5314))
|
||||
- Iterate on badge / unread indicator color ([#5456](https://github.com/vector-im/element-android/issues/5456))
|
||||
|
||||
|
||||
Changes in Element v1.4.2 (2022-02-22 Palindrome Day!)
|
||||
======================================================
|
||||
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
Typing notifications moved from the header to the bottom of the timeline.
|
|
@ -1 +0,0 @@
|
|||
Open direct message screen when clicking on DM button in the space members list
|
|
@ -1 +0,0 @@
|
|||
Override task affinity to prevent unknown activities running in our app tasks.
|
|
@ -1 +0,0 @@
|
|||
Update the top bar in a room: remove topic and typing information
|
|
@ -1 +0,0 @@
|
|||
Add possibility to save media from Gallery + reorder choices in message context menu
|
|
@ -1 +0,0 @@
|
|||
Starts the FTUE account personalisation flow by adding an account created screen behind a feature flag
|
|
@ -1 +0,0 @@
|
|||
Tentatively fixing the UI sanity test being unable to click on the space menu items
|
|
@ -1 +0,0 @@
|
|||
Improve Bubble layouts rendering.
|
|
@ -1 +0,0 @@
|
|||
Moves attachment-viewer, diff-match-patch, and multipicker modules to subfolders under library
|
|
@ -1 +0,0 @@
|
|||
Log the `since` token used and `next_batch` token returned when doing an incremental sync.
|
|
@ -1 +0,0 @@
|
|||
Update reaction button layout.
|
|
@ -1 +0,0 @@
|
|||
Notify element-android channel each time a nightly build completes.
|
|
@ -1 +0,0 @@
|
|||
Log the `since` token used and `next_batch` token returned when doing an incremental sync.
|
|
@ -1 +0,0 @@
|
|||
Adds forceLoginFallback feature flag and usages to FTUE login and registration
|
|
@ -1 +0,0 @@
|
|||
[Export e2ee keys] use appName instead of element
|
|
@ -1 +0,0 @@
|
|||
Continue improving realm usage.
|
|
@ -1 +0,0 @@
|
|||
Change name of getTimeLineEvent and getTimeLineEventLive methods to getTimelineEvent and getTimelineEventLive.
|
|
@ -1 +0,0 @@
|
|||
Upgrade the plugin which generate strings with template from 1.2.2 to 2.0.0
|
|
@ -1 +0,0 @@
|
|||
Remove about 700 unused strings and their translations
|
|
@ -1 +0,0 @@
|
|||
Creates dedicated VectorOverrides for forcing behaviour for local testing/development
|
|
@ -1 +0,0 @@
|
|||
Cleanup unused threads build configurations
|
|
@ -1 +0,0 @@
|
|||
Upgrades material dependency version from 1.4.0 to 1.5.0
|
|
@ -1 +0,0 @@
|
|||
Fix incorrect media cache size in settings
|
|
@ -1 +0,0 @@
|
|||
[Create room] Setting an avatar when creating a room had no effect
|
|
@ -1 +0,0 @@
|
|||
Improves settings error dialog messaging when changing avatar or display name fails
|
|
@ -1 +0,0 @@
|
|||
Iterate on badge / unread indicator color
|
|
@ -0,0 +1,2 @@
|
|||
Main changes in this version: typing indicator UI updates. Various bug fixes and stability improvements.
|
||||
Full changelog: https://github.com/vector-im/element-android/releases/tag/v1.4.4
|
|
@ -53,6 +53,7 @@ import im.vector.app.features.home.room.detail.timeline.item.DaySeparatorItem
|
|||
import im.vector.app.features.home.room.detail.timeline.item.DaySeparatorItem_
|
||||
import im.vector.app.features.home.room.detail.timeline.item.ItemWithEvents
|
||||
import im.vector.app.features.home.room.detail.timeline.item.MessageInformationData
|
||||
import im.vector.app.features.home.room.detail.timeline.item.ReactionsSummaryEvents
|
||||
import im.vector.app.features.home.room.detail.timeline.item.ReadReceiptData
|
||||
import im.vector.app.features.home.room.detail.timeline.item.ReadReceiptsItem
|
||||
import im.vector.app.features.home.room.detail.timeline.url.PreviewUrlRetriever
|
||||
|
@ -415,7 +416,12 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec
|
|||
partialState = partialState,
|
||||
lastSentEventIdWithoutReadReceipts = lastSentEventWithoutReadReceipts,
|
||||
callback = callback,
|
||||
eventsGroup = timelineEventsGroup
|
||||
eventsGroup = timelineEventsGroup,
|
||||
reactionsSummaryEvents = ReactionsSummaryEvents(
|
||||
onAddMoreClicked = { reactionListFactory.onAddMoreClicked(callback, event) },
|
||||
onShowLessClicked = { reactionListFactory.onShowLessClicked(event.eventId) },
|
||||
onShowMoreClicked = { reactionListFactory.onShowMoreClicked(event.eventId) }
|
||||
)
|
||||
)
|
||||
modelCache[position] = buildCacheItem(params)
|
||||
numberOfEventsToBuild++
|
||||
|
|
|
@ -26,6 +26,7 @@ import im.vector.app.features.home.room.detail.timeline.helper.MessageItemAttrib
|
|||
import im.vector.app.features.home.room.detail.timeline.item.CallTileTimelineItem
|
||||
import im.vector.app.features.home.room.detail.timeline.item.CallTileTimelineItem_
|
||||
import im.vector.app.features.home.room.detail.timeline.item.MessageInformationData
|
||||
import im.vector.app.features.home.room.detail.timeline.item.ReactionsSummaryEvents
|
||||
import org.matrix.android.sdk.api.session.Session
|
||||
import org.matrix.android.sdk.api.session.events.model.EventType
|
||||
import org.matrix.android.sdk.api.session.room.model.RoomSummary
|
||||
|
@ -61,7 +62,8 @@ class CallItemFactory @Inject constructor(
|
|||
highlight = params.isHighlighted,
|
||||
informationData = informationData,
|
||||
isStillActive = callEventGrouper.isInCall(),
|
||||
formattedDuration = callEventGrouper.formattedDuration()
|
||||
formattedDuration = callEventGrouper.formattedDuration(),
|
||||
reactionsSummaryEvents = params.reactionsSummaryEvents
|
||||
)
|
||||
} else {
|
||||
null
|
||||
|
@ -78,7 +80,8 @@ class CallItemFactory @Inject constructor(
|
|||
highlight = params.isHighlighted,
|
||||
informationData = informationData,
|
||||
isStillActive = callEventGrouper.isRinging(),
|
||||
formattedDuration = callEventGrouper.formattedDuration()
|
||||
formattedDuration = callEventGrouper.formattedDuration(),
|
||||
reactionsSummaryEvents = params.reactionsSummaryEvents
|
||||
)
|
||||
} else {
|
||||
null
|
||||
|
@ -94,7 +97,8 @@ class CallItemFactory @Inject constructor(
|
|||
highlight = params.isHighlighted,
|
||||
informationData = informationData,
|
||||
isStillActive = false,
|
||||
formattedDuration = callEventGrouper.formattedDuration()
|
||||
formattedDuration = callEventGrouper.formattedDuration(),
|
||||
reactionsSummaryEvents = params.reactionsSummaryEvents
|
||||
)
|
||||
}
|
||||
EventType.CALL_HANGUP -> {
|
||||
|
@ -111,7 +115,8 @@ class CallItemFactory @Inject constructor(
|
|||
highlight = params.isHighlighted,
|
||||
informationData = informationData,
|
||||
isStillActive = false,
|
||||
formattedDuration = callEventGrouper.formattedDuration()
|
||||
formattedDuration = callEventGrouper.formattedDuration(),
|
||||
reactionsSummaryEvents = params.reactionsSummaryEvents
|
||||
)
|
||||
}
|
||||
else -> null
|
||||
|
@ -133,10 +138,11 @@ class CallItemFactory @Inject constructor(
|
|||
highlight: Boolean,
|
||||
isStillActive: Boolean,
|
||||
formattedDuration: String,
|
||||
callback: TimelineEventController.Callback?
|
||||
callback: TimelineEventController.Callback?,
|
||||
reactionsSummaryEvents: ReactionsSummaryEvents?
|
||||
): CallTileTimelineItem? {
|
||||
val userOfInterest = roomSummary.toMatrixItem()
|
||||
val attributes = messageItemAttributesFactory.create(null, informationData, callback).let {
|
||||
val attributes = messageItemAttributesFactory.create(null, informationData, callback, reactionsSummaryEvents).let {
|
||||
CallTileTimelineItem.Attributes(
|
||||
callId = callId,
|
||||
callKind = callKind,
|
||||
|
@ -151,7 +157,8 @@ class CallItemFactory @Inject constructor(
|
|||
readReceiptsCallback = it.readReceiptsCallback,
|
||||
userOfInterest = userOfInterest,
|
||||
callback = callback,
|
||||
isStillActive = isStillActive
|
||||
isStillActive = isStillActive,
|
||||
reactionsSummaryEvents = reactionsSummaryEvents
|
||||
)
|
||||
}
|
||||
return CallTileTimelineItem_()
|
||||
|
|
|
@ -111,7 +111,9 @@ class EncryptedItemFactory @Inject constructor(private val messageInformationDat
|
|||
messageContent = event.root.content.toModel<EncryptedEventContent>(),
|
||||
informationData = informationData,
|
||||
callback = params.callback,
|
||||
threadDetails = threadDetails)
|
||||
threadDetails = threadDetails,
|
||||
reactionsSummaryEvents = params.reactionsSummaryEvents
|
||||
)
|
||||
return MessageTextItem_()
|
||||
.layout(informationData.messageLayout.layoutRes)
|
||||
.leftGuideline(avatarSizeProvider.leftGuideline)
|
||||
|
|
|
@ -46,7 +46,7 @@ class EncryptionItemFactory @Inject constructor(
|
|||
}
|
||||
val algorithm = event.root.content.toModel<EncryptionEventContent>()?.algorithm
|
||||
val informationData = informationDataFactory.create(params)
|
||||
val attributes = messageItemAttributesFactory.create(null, informationData, params.callback)
|
||||
val attributes = messageItemAttributesFactory.create(null, informationData, params.callback, params.reactionsSummaryEvents)
|
||||
|
||||
val isSafeAlgorithm = algorithm == MXCRYPTO_ALGORITHM_MEGOLM
|
||||
val title: String
|
||||
|
@ -80,7 +80,8 @@ class EncryptionItemFactory @Inject constructor(
|
|||
itemClickListener = attributes.itemClickListener,
|
||||
itemLongClickListener = attributes.itemLongClickListener,
|
||||
reactionPillCallback = attributes.reactionPillCallback,
|
||||
readReceiptsCallback = attributes.readReceiptsCallback
|
||||
readReceiptsCallback = attributes.readReceiptsCallback,
|
||||
reactionsSummaryEvents = attributes.reactionsSummaryEvents
|
||||
)
|
||||
)
|
||||
.highlighted(params.isHighlighted)
|
||||
|
|
|
@ -155,7 +155,7 @@ class MessageItemFactory @Inject constructor(
|
|||
|
||||
if (event.root.isRedacted()) {
|
||||
// message is redacted
|
||||
val attributes = messageItemAttributesFactory.create(null, informationData, callback, threadDetails)
|
||||
val attributes = messageItemAttributesFactory.create(null, informationData, callback, params.reactionsSummaryEvents)
|
||||
return buildRedactedItem(attributes, highlight)
|
||||
}
|
||||
|
||||
|
@ -177,7 +177,7 @@ class MessageItemFactory @Inject constructor(
|
|||
}
|
||||
|
||||
// always hide summary when we are on thread timeline
|
||||
val attributes = messageItemAttributesFactory.create(messageContent, informationData, callback, threadDetails)
|
||||
val attributes = messageItemAttributesFactory.create(messageContent, informationData, callback, params.reactionsSummaryEvents, threadDetails)
|
||||
|
||||
// val all = event.root.toContent()
|
||||
// val ev = all.toModel<Event>()
|
||||
|
@ -413,7 +413,8 @@ class MessageItemFactory @Inject constructor(
|
|||
itemClickListener = attributes.itemClickListener,
|
||||
reactionPillCallback = attributes.reactionPillCallback,
|
||||
readReceiptsCallback = attributes.readReceiptsCallback,
|
||||
emojiTypeFace = attributes.emojiTypeFace
|
||||
emojiTypeFace = attributes.emojiTypeFace,
|
||||
reactionsSummaryEvents = attributes.reactionsSummaryEvents
|
||||
)
|
||||
)
|
||||
.callback(callback)
|
||||
|
|
|
@ -18,6 +18,7 @@ package im.vector.app.features.home.room.detail.timeline.factory
|
|||
|
||||
import im.vector.app.features.home.room.detail.timeline.TimelineEventController
|
||||
import im.vector.app.features.home.room.detail.timeline.helper.TimelineEventsGroup
|
||||
import im.vector.app.features.home.room.detail.timeline.item.ReactionsSummaryEvents
|
||||
import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent
|
||||
|
||||
data class TimelineItemFactoryParams(
|
||||
|
@ -29,6 +30,7 @@ data class TimelineItemFactoryParams(
|
|||
val partialState: TimelineEventController.PartialState = TimelineEventController.PartialState(),
|
||||
val lastSentEventIdWithoutReadReceipts: String? = null,
|
||||
val callback: TimelineEventController.Callback? = null,
|
||||
val reactionsSummaryEvents: ReactionsSummaryEvents? = null,
|
||||
val eventsGroup: TimelineEventsGroup? = null
|
||||
) {
|
||||
|
||||
|
|
|
@ -71,10 +71,10 @@ class VerificationItemFactory @Inject constructor(
|
|||
// If it's not a request ignore this event
|
||||
// if (refEvent.root.getClearContent().toModel<MessageVerificationRequestContent>() == null) return ignoredConclusion(event, highlight, callback)
|
||||
|
||||
val referenceInformationData = messageInformationDataFactory.create(TimelineItemFactoryParams(refEvent))
|
||||
val referenceInformationData = messageInformationDataFactory.create(TimelineItemFactoryParams(event = refEvent))
|
||||
|
||||
val informationData = messageInformationDataFactory.create(params)
|
||||
val attributes = messageItemAttributesFactory.create(null, informationData, params.callback)
|
||||
val attributes = messageItemAttributesFactory.create(null, informationData, params.callback, params.reactionsSummaryEvents)
|
||||
|
||||
when (event.root.getClearType()) {
|
||||
EventType.KEY_VERIFICATION_CANCEL -> {
|
||||
|
@ -100,7 +100,8 @@ class VerificationItemFactory @Inject constructor(
|
|||
itemClickListener = attributes.itemClickListener,
|
||||
itemLongClickListener = attributes.itemLongClickListener,
|
||||
reactionPillCallback = attributes.reactionPillCallback,
|
||||
readReceiptsCallback = attributes.readReceiptsCallback
|
||||
readReceiptsCallback = attributes.readReceiptsCallback,
|
||||
reactionsSummaryEvents = attributes.reactionsSummaryEvents
|
||||
)
|
||||
)
|
||||
.highlighted(params.isHighlighted)
|
||||
|
@ -133,7 +134,8 @@ class VerificationItemFactory @Inject constructor(
|
|||
itemClickListener = attributes.itemClickListener,
|
||||
itemLongClickListener = attributes.itemLongClickListener,
|
||||
reactionPillCallback = attributes.reactionPillCallback,
|
||||
readReceiptsCallback = attributes.readReceiptsCallback
|
||||
readReceiptsCallback = attributes.readReceiptsCallback,
|
||||
reactionsSummaryEvents = attributes.reactionsSummaryEvents
|
||||
)
|
||||
)
|
||||
.highlighted(params.isHighlighted)
|
||||
|
|
|
@ -88,7 +88,8 @@ class WidgetItemFactory @Inject constructor(
|
|||
userOfInterest = userOfInterest,
|
||||
callback = params.callback,
|
||||
isStillActive = isCallStillActive,
|
||||
formattedDuration = ""
|
||||
formattedDuration = "",
|
||||
reactionsSummaryEvents = params.reactionsSummaryEvents
|
||||
)
|
||||
return CallTileTimelineItem_()
|
||||
.attributes(attributes)
|
||||
|
|
|
@ -93,7 +93,7 @@ class MessageInformationDataFactory @Inject constructor(private val session: Ses
|
|||
avatarUrl = event.senderInfo.avatarUrl,
|
||||
memberName = event.senderInfo.disambiguatedDisplayName,
|
||||
messageLayout = messageLayout,
|
||||
reactionsSummary = reactionsSummaryFactory.create(event, params.callback),
|
||||
reactionsSummary = reactionsSummaryFactory.create(event),
|
||||
pollResponseAggregatedSummary = event.annotations?.pollResponseSummary?.let {
|
||||
PollResponseData(
|
||||
myVote = it.aggregatedContent?.myVote,
|
||||
|
|
|
@ -24,6 +24,7 @@ import im.vector.app.features.home.room.detail.timeline.MessageColorProvider
|
|||
import im.vector.app.features.home.room.detail.timeline.TimelineEventController
|
||||
import im.vector.app.features.home.room.detail.timeline.item.AbsMessageItem
|
||||
import im.vector.app.features.home.room.detail.timeline.item.MessageInformationData
|
||||
import im.vector.app.features.home.room.detail.timeline.item.ReactionsSummaryEvents
|
||||
import org.matrix.android.sdk.api.session.threads.ThreadDetails
|
||||
import javax.inject.Inject
|
||||
|
||||
|
@ -38,6 +39,7 @@ class MessageItemAttributesFactory @Inject constructor(
|
|||
fun create(messageContent: Any?,
|
||||
informationData: MessageInformationData,
|
||||
callback: TimelineEventController.Callback?,
|
||||
reactionsSummaryEvents: ReactionsSummaryEvents?,
|
||||
threadDetails: ThreadDetails? = null): AbsMessageItem.Attributes {
|
||||
return AbsMessageItem.Attributes(
|
||||
avatarSize = avatarSizeProvider.avatarSize,
|
||||
|
@ -60,6 +62,7 @@ class MessageItemAttributesFactory @Inject constructor(
|
|||
emojiTypeFace = emojiCompatFontProvider.typeface,
|
||||
decryptionErrorMessage = stringProvider.getString(R.string.encrypted_message),
|
||||
threadDetails = threadDetails,
|
||||
reactionsSummaryEvents = reactionsSummaryEvents,
|
||||
areThreadMessagesEnabled = preferencesProvider.areThreadMessagesEnabled()
|
||||
)
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ class ReactionsSummaryFactory @Inject constructor() {
|
|||
return eventsRequestingBuild.remove(event.eventId)
|
||||
}
|
||||
|
||||
fun create(event: TimelineEvent, callback: TimelineEventController.Callback?): ReactionsSummaryData {
|
||||
fun create(event: TimelineEvent): ReactionsSummaryData {
|
||||
val eventId = event.eventId
|
||||
val showAllStates = showAllReactionsByEvent.contains(eventId)
|
||||
val reactions = event.annotations?.reactionsSummary
|
||||
|
@ -43,19 +43,22 @@ class ReactionsSummaryFactory @Inject constructor() {
|
|||
}
|
||||
return ReactionsSummaryData(
|
||||
reactions = reactions,
|
||||
showAll = showAllStates,
|
||||
onShowMoreClicked = {
|
||||
showAllReactionsByEvent.add(eventId)
|
||||
onRequestBuild(eventId)
|
||||
},
|
||||
onShowLessClicked = {
|
||||
showAllReactionsByEvent.remove(eventId)
|
||||
onRequestBuild(eventId)
|
||||
},
|
||||
onAddMoreClicked = {
|
||||
showAll = showAllStates
|
||||
)
|
||||
}
|
||||
|
||||
fun onAddMoreClicked(callback: TimelineEventController.Callback?, event: TimelineEvent) {
|
||||
callback?.onAddMoreReaction(event)
|
||||
}
|
||||
)
|
||||
|
||||
fun onShowMoreClicked(eventId: String) {
|
||||
showAllReactionsByEvent.add(eventId)
|
||||
onRequestBuild(eventId)
|
||||
}
|
||||
|
||||
fun onShowLessClicked(eventId: String) {
|
||||
showAllReactionsByEvent.remove(eventId)
|
||||
onRequestBuild(eventId)
|
||||
}
|
||||
|
||||
private fun onRequestBuild(eventId: String) {
|
||||
|
|
|
@ -121,18 +121,24 @@ abstract class AbsBaseMessageItem<H : AbsBaseMessageItem.Holder> : BaseEventItem
|
|||
val showReactionsTextView = createReactionTextView(holder)
|
||||
if (reactionsSummary.showAll) {
|
||||
showReactionsTextView.setText(R.string.message_reaction_show_less)
|
||||
showReactionsTextView.onClick { reactionsSummary.onShowLessClicked() }
|
||||
showReactionsTextView.onClick {
|
||||
baseAttributes.reactionsSummaryEvents?.onShowLessClicked?.invoke()
|
||||
}
|
||||
} else {
|
||||
val moreCount = reactions.count() - MAX_REACTIONS_TO_SHOW
|
||||
showReactionsTextView.text = holder.view.resources.getQuantityString(R.plurals.message_reaction_show_more, moreCount, moreCount)
|
||||
showReactionsTextView.onClick { reactionsSummary.onShowMoreClicked() }
|
||||
showReactionsTextView.onClick {
|
||||
baseAttributes.reactionsSummaryEvents?.onShowMoreClicked?.invoke()
|
||||
}
|
||||
}
|
||||
holder.reactionsContainer.addView(showReactionsTextView)
|
||||
}
|
||||
val addMoreReactionsTextView = createReactionTextView(holder)
|
||||
|
||||
addMoreReactionsTextView.text = holder.view.context.getDrawableAsSpannable(R.drawable.ic_add_reaction_small)
|
||||
addMoreReactionsTextView.onClick { reactionsSummary.onAddMoreClicked() }
|
||||
addMoreReactionsTextView.onClick {
|
||||
baseAttributes.reactionsSummaryEvents?.onAddMoreClicked?.invoke()
|
||||
}
|
||||
holder.reactionsContainer.addView(addMoreReactionsTextView)
|
||||
holder.reactionsContainer.setOnLongClickListener(baseAttributes.itemLongClickListener)
|
||||
}
|
||||
|
@ -180,6 +186,7 @@ abstract class AbsBaseMessageItem<H : AbsBaseMessageItem.Holder> : BaseEventItem
|
|||
|
||||
// val memberClickListener: ClickListener?
|
||||
val reactionPillCallback: TimelineEventController.ReactionPillCallback?
|
||||
val reactionsSummaryEvents: ReactionsSummaryEvents?
|
||||
|
||||
// val avatarCallback: TimelineEventController.AvatarCallback?
|
||||
val readReceiptsCallback: TimelineEventController.ReadReceiptsCallback?
|
||||
|
|
|
@ -184,7 +184,8 @@ abstract class AbsMessageItem<H : AbsMessageItem.Holder> : AbsBaseMessageItem<H>
|
|||
val emojiTypeFace: Typeface? = null,
|
||||
val decryptionErrorMessage: String? = null,
|
||||
val threadDetails: ThreadDetails? = null,
|
||||
val areThreadMessagesEnabled: Boolean = false
|
||||
val areThreadMessagesEnabled: Boolean = false,
|
||||
override val reactionsSummaryEvents: ReactionsSummaryEvents? = null,
|
||||
) : AbsBaseMessageItem.Attributes {
|
||||
|
||||
// Have to override as it's used to diff epoxy items
|
||||
|
|
|
@ -263,7 +263,8 @@ abstract class CallTileTimelineItem : AbsBaseMessageItem<CallTileTimelineItem.Ho
|
|||
override val itemLongClickListener: View.OnLongClickListener? = null,
|
||||
override val itemClickListener: ClickListener? = null,
|
||||
override val reactionPillCallback: TimelineEventController.ReactionPillCallback? = null,
|
||||
override val readReceiptsCallback: TimelineEventController.ReadReceiptsCallback? = null
|
||||
override val readReceiptsCallback: TimelineEventController.ReadReceiptsCallback? = null,
|
||||
override val reactionsSummaryEvents: ReactionsSummaryEvents? = null
|
||||
) : AbsBaseMessageItem.Attributes
|
||||
|
||||
enum class CallKind(@DrawableRes val icon: Int, @StringRes val title: Int) {
|
||||
|
|
|
@ -58,11 +58,14 @@ data class ReferencesInfoData(
|
|||
data class ReactionsSummaryData(
|
||||
/*List of reactions (emoji,count,isSelected)*/
|
||||
val reactions: List<ReactionInfoData>? = null,
|
||||
val showAll: Boolean = false,
|
||||
val showAll: Boolean = false
|
||||
) : Parcelable
|
||||
|
||||
data class ReactionsSummaryEvents(
|
||||
val onShowMoreClicked: () -> Unit,
|
||||
val onShowLessClicked: () -> Unit,
|
||||
val onAddMoreClicked: () -> Unit
|
||||
) : Parcelable
|
||||
)
|
||||
|
||||
@Parcelize
|
||||
data class ReactionInfoData(
|
||||
|
|
|
@ -93,7 +93,8 @@ abstract class StatusTileTimelineItem : AbsBaseMessageItem<StatusTileTimelineIte
|
|||
override val itemClickListener: ClickListener? = null,
|
||||
override val reactionPillCallback: TimelineEventController.ReactionPillCallback? = null,
|
||||
override val readReceiptsCallback: TimelineEventController.ReadReceiptsCallback? = null,
|
||||
val emojiTypeFace: Typeface? = null
|
||||
val emojiTypeFace: Typeface? = null,
|
||||
override val reactionsSummaryEvents: ReactionsSummaryEvents? = null
|
||||
) : AbsBaseMessageItem.Attributes
|
||||
|
||||
enum class ShieldUIState {
|
||||
|
|
|
@ -154,6 +154,7 @@ abstract class VerificationRequestItem : AbsBaseMessageItem<VerificationRequestI
|
|||
override val reactionPillCallback: TimelineEventController.ReactionPillCallback? = null,
|
||||
// val avatarCallback: TimelineEventController.AvatarCallback? = null,
|
||||
override val readReceiptsCallback: TimelineEventController.ReadReceiptsCallback? = null,
|
||||
val emojiTypeFace: Typeface? = null
|
||||
override val reactionsSummaryEvents: ReactionsSummaryEvents? = null,
|
||||
val emojiTypeFace: Typeface? = null,
|
||||
) : AbsBaseMessageItem.Attributes
|
||||
}
|
||||
|
|
|
@ -83,6 +83,7 @@ abstract class WidgetTileTimelineItem : AbsBaseMessageItem<WidgetTileTimelineIte
|
|||
override val itemClickListener: ClickListener? = null,
|
||||
override val reactionPillCallback: TimelineEventController.ReactionPillCallback? = null,
|
||||
override val readReceiptsCallback: TimelineEventController.ReadReceiptsCallback? = null,
|
||||
val emojiTypeFace: Typeface? = null
|
||||
val emojiTypeFace: Typeface? = null,
|
||||
override val reactionsSummaryEvents: ReactionsSummaryEvents? = null
|
||||
) : AbsBaseMessageItem.Attributes
|
||||
}
|
||||
|
|
|
@ -59,6 +59,13 @@
|
|||
tools:ignore="MissingConstraints"
|
||||
tools:visibility="invisible" />
|
||||
|
||||
<androidx.constraintlayout.widget.Barrier
|
||||
android:id="@+id/imageGroupBarrier"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:barrierDirection="end"
|
||||
app:constraint_referenced_ids="roomToolbarDecorationImageView,roomToolbarAvatarImageView,roomToolbarPresenceImageView,roomToolbarPublicImageView" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/roomToolbarTitleView"
|
||||
android:layout_width="0dp"
|
||||
|
@ -72,7 +79,7 @@
|
|||
app:layout_constraintBottom_toBottomOf="@id/roomToolbarAvatarImageView"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.0"
|
||||
app:layout_constraintStart_toEndOf="@id/roomToolbarDecorationImageView"
|
||||
app:layout_constraintStart_toEndOf="@id/imageGroupBarrier"
|
||||
app:layout_constraintTop_toTopOf="@id/roomToolbarAvatarImageView"
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
app:layout_goneMarginStart="7dp"
|
||||
|
|
Loading…
Reference in New Issue