mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-03-21 05:38:49 +03:00
Apply ktlinFormat
This commit is contained in:
parent
cc7e3ea78c
commit
ed48eb38c9
35 changed files with 28 additions and 75 deletions
matrix-sdk-android-flow/src/main/java/org/matrix/android/sdk/flow
matrix-sdk-android/src/main/java/org/matrix/android/sdk
vector/src/main/java/im/vector/app/features
autocomplete/command
command
home/room
navigation
|
@ -21,7 +21,6 @@ import kotlinx.coroutines.flow.Flow
|
||||||
import org.matrix.android.sdk.api.query.QueryStringValue
|
import org.matrix.android.sdk.api.query.QueryStringValue
|
||||||
import org.matrix.android.sdk.api.session.events.model.Event
|
import org.matrix.android.sdk.api.session.events.model.Event
|
||||||
import org.matrix.android.sdk.api.session.room.Room
|
import org.matrix.android.sdk.api.session.room.Room
|
||||||
import org.matrix.android.sdk.api.session.room.RoomSummaryQueryParams
|
|
||||||
import org.matrix.android.sdk.api.session.room.members.RoomMemberQueryParams
|
import org.matrix.android.sdk.api.session.room.members.RoomMemberQueryParams
|
||||||
import org.matrix.android.sdk.api.session.room.model.EventAnnotationsSummary
|
import org.matrix.android.sdk.api.session.room.model.EventAnnotationsSummary
|
||||||
import org.matrix.android.sdk.api.session.room.model.ReadReceipt
|
import org.matrix.android.sdk.api.session.room.model.ReadReceipt
|
||||||
|
|
|
@ -91,5 +91,4 @@ interface TimelineService {
|
||||||
* @param rootThreadEventId the eventId of the current thread
|
* @param rootThreadEventId the eventId of the current thread
|
||||||
*/
|
*/
|
||||||
suspend fun markThreadAsRead(rootThreadEventId: String)
|
suspend fun markThreadAsRead(rootThreadEventId: String)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,5 +30,4 @@ enum class ThreadNotificationState {
|
||||||
// The is at least one new message that should bi highlighted
|
// The is at least one new message that should bi highlighted
|
||||||
// ex. "Hello @aris.kotsomitopoulos"
|
// ex. "Hello @aris.kotsomitopoulos"
|
||||||
NEW_HIGHLIGHTED_MESSAGE;
|
NEW_HIGHLIGHTED_MESSAGE;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,6 @@ import org.matrix.android.sdk.api.session.room.model.VersioningState
|
||||||
import org.matrix.android.sdk.api.session.room.model.create.RoomCreateContent
|
import org.matrix.android.sdk.api.session.room.model.create.RoomCreateContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.tag.RoomTag
|
import org.matrix.android.sdk.api.session.room.model.tag.RoomTag
|
||||||
import org.matrix.android.sdk.api.session.threads.ThreadNotificationState
|
import org.matrix.android.sdk.api.session.threads.ThreadNotificationState
|
||||||
import org.matrix.android.sdk.internal.database.model.ChunkEntityFields
|
|
||||||
import org.matrix.android.sdk.internal.database.model.CurrentStateEventEntityFields
|
import org.matrix.android.sdk.internal.database.model.CurrentStateEventEntityFields
|
||||||
import org.matrix.android.sdk.internal.database.model.EditAggregatedSummaryEntityFields
|
import org.matrix.android.sdk.internal.database.model.EditAggregatedSummaryEntityFields
|
||||||
import org.matrix.android.sdk.internal.database.model.EditionOfEventFields
|
import org.matrix.android.sdk.internal.database.model.EditionOfEventFields
|
||||||
|
@ -89,7 +88,6 @@ internal class RealmSessionStoreMigration @Inject constructor(
|
||||||
if (oldVersion <= 17) migrateTo18(realm)
|
if (oldVersion <= 17) migrateTo18(realm)
|
||||||
if (oldVersion <= 18) migrateTo19(realm)
|
if (oldVersion <= 18) migrateTo19(realm)
|
||||||
if (oldVersion <= 19) migrateTo20(realm)
|
if (oldVersion <= 19) migrateTo20(realm)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun migrateTo1(realm: DynamicRealm) {
|
private fun migrateTo1(realm: DynamicRealm) {
|
||||||
|
|
|
@ -37,13 +37,10 @@ import org.matrix.android.sdk.internal.database.query.whereRoomId
|
||||||
* of threads included. If there is no root thread event no action is done
|
* of threads included. If there is no root thread event no action is done
|
||||||
*/
|
*/
|
||||||
internal fun Map<String, EventEntity>.updateThreadSummaryIfNeeded(roomId: String, realm: Realm, currentUserId: String) {
|
internal fun Map<String, EventEntity>.updateThreadSummaryIfNeeded(roomId: String, realm: Realm, currentUserId: String) {
|
||||||
|
|
||||||
if (!BuildConfig.THREADING_ENABLED) return
|
if (!BuildConfig.THREADING_ENABLED) return
|
||||||
|
|
||||||
for ((rootThreadEventId, eventEntity) in this) {
|
for ((rootThreadEventId, eventEntity) in this) {
|
||||||
|
|
||||||
eventEntity.findAllThreadsForRootEventId(eventEntity.realm, rootThreadEventId).let {
|
eventEntity.findAllThreadsForRootEventId(eventEntity.realm, rootThreadEventId).let {
|
||||||
|
|
||||||
if (it.isNullOrEmpty()) return@let
|
if (it.isNullOrEmpty()) return@let
|
||||||
|
|
||||||
val latestMessage = it.firstOrNull()
|
val latestMessage = it.firstOrNull()
|
||||||
|
@ -55,7 +52,6 @@ internal fun Map<String, EventEntity>.updateThreadSummaryIfNeeded(roomId: String
|
||||||
threadsCounted = it.size,
|
threadsCounted = it.size,
|
||||||
latestMessageTimelineEventEntity = latestMessage
|
latestMessageTimelineEventEntity = latestMessage
|
||||||
)
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,7 +171,6 @@ internal fun isUserMentioned(currentUserId: String, timelineEventEntity: Timelin
|
||||||
* immediately so we should not display wrong notifications
|
* immediately so we should not display wrong notifications
|
||||||
*/
|
*/
|
||||||
internal fun updateNotificationsNew(roomId: String, realm: Realm, currentUserId: String) {
|
internal fun updateNotificationsNew(roomId: String, realm: Realm, currentUserId: String) {
|
||||||
|
|
||||||
val readReceipt = findMyReadReceipt(realm, roomId, currentUserId) ?: return
|
val readReceipt = findMyReadReceipt(realm, roomId, currentUserId) ?: return
|
||||||
|
|
||||||
val readReceiptChunk = ChunkEntity
|
val readReceiptChunk = ChunkEntity
|
||||||
|
@ -190,7 +185,7 @@ internal fun updateNotificationsNew(roomId: String, realm: Realm, currentUserId:
|
||||||
|
|
||||||
val readReceiptChunkPosition = readReceiptChunkTimelineEvents.indexOfFirst { it.eventId == readReceipt }
|
val readReceiptChunkPosition = readReceiptChunkTimelineEvents.indexOfFirst { it.eventId == readReceipt }
|
||||||
|
|
||||||
if(readReceiptChunkPosition == -1) return
|
if (readReceiptChunkPosition == -1) return
|
||||||
|
|
||||||
if (readReceiptChunkPosition < readReceiptChunkTimelineEvents.lastIndex) {
|
if (readReceiptChunkPosition < readReceiptChunkTimelineEvents.lastIndex) {
|
||||||
// If the read receipt is found inside the chunk
|
// If the read receipt is found inside the chunk
|
||||||
|
|
|
@ -44,7 +44,6 @@ internal open class ChunkEntity(@Index var prevToken: String? = null,
|
||||||
val room: RealmResults<RoomEntity>? = null
|
val room: RealmResults<RoomEntity>? = null
|
||||||
|
|
||||||
companion object
|
companion object
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun ChunkEntity.deleteOnCascade(deleteStateEvents: Boolean, canDeleteRoot: Boolean) {
|
internal fun ChunkEntity.deleteOnCascade(deleteStateEvents: Boolean, canDeleteRoot: Boolean) {
|
||||||
|
|
|
@ -95,5 +95,4 @@ internal open class EventEntity(@Index var eventId: String = "",
|
||||||
}
|
}
|
||||||
|
|
||||||
fun isThread(): Boolean = rootThreadEventId != null
|
fun isThread(): Boolean = rootThreadEventId != null
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,9 +46,6 @@ internal fun ChunkEntity.Companion.findLastForwardChunkOfRoom(realm: Realm, room
|
||||||
.findFirst()
|
.findFirst()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
internal fun ChunkEntity.Companion.findAllIncludingEvents(realm: Realm, eventIds: List<String>): RealmResults<ChunkEntity> {
|
internal fun ChunkEntity.Companion.findAllIncludingEvents(realm: Realm, eventIds: List<String>): RealmResults<ChunkEntity> {
|
||||||
return realm.where<ChunkEntity>()
|
return realm.where<ChunkEntity>()
|
||||||
.`in`(ChunkEntityFields.TIMELINE_EVENTS.EVENT_ID, eventIds.toTypedArray())
|
.`in`(ChunkEntityFields.TIMELINE_EVENTS.EVENT_ID, eventIds.toTypedArray())
|
||||||
|
@ -59,7 +56,6 @@ internal fun ChunkEntity.Companion.findIncludingEvent(realm: Realm, eventId: Str
|
||||||
return findAllIncludingEvents(realm, listOf(eventId)).firstOrNull()
|
return findAllIncludingEvents(realm, listOf(eventId)).firstOrNull()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
internal fun ChunkEntity.Companion.create(
|
internal fun ChunkEntity.Companion.create(
|
||||||
realm: Realm,
|
realm: Realm,
|
||||||
prevToken: String?,
|
prevToken: String?,
|
||||||
|
|
|
@ -49,13 +49,11 @@ internal fun EventEntity.Companion.where(realm: Realm, eventId: String): RealmQu
|
||||||
.equalTo(EventEntityFields.EVENT_ID, eventId)
|
.equalTo(EventEntityFields.EVENT_ID, eventId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
internal fun EventEntity.Companion.whereRoomId(realm: Realm, roomId: String): RealmQuery<EventEntity> {
|
internal fun EventEntity.Companion.whereRoomId(realm: Realm, roomId: String): RealmQuery<EventEntity> {
|
||||||
return realm.where<EventEntity>()
|
return realm.where<EventEntity>()
|
||||||
.equalTo(EventEntityFields.ROOM_ID, roomId)
|
.equalTo(EventEntityFields.ROOM_ID, roomId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
internal fun EventEntity.Companion.where(realm: Realm, eventIds: List<String>): RealmQuery<EventEntity> {
|
internal fun EventEntity.Companion.where(realm: Realm, eventIds: List<String>): RealmQuery<EventEntity> {
|
||||||
return realm.where<EventEntity>()
|
return realm.where<EventEntity>()
|
||||||
.`in`(EventEntityFields.EVENT_ID, eventIds.toTypedArray())
|
.`in`(EventEntityFields.EVENT_ID, eventIds.toTypedArray())
|
||||||
|
|
|
@ -25,11 +25,9 @@ import io.realm.kotlin.where
|
||||||
import org.matrix.android.sdk.api.session.room.send.SendState
|
import org.matrix.android.sdk.api.session.room.send.SendState
|
||||||
import org.matrix.android.sdk.api.session.room.timeline.TimelineEventFilters
|
import org.matrix.android.sdk.api.session.room.timeline.TimelineEventFilters
|
||||||
import org.matrix.android.sdk.internal.database.model.ChunkEntity
|
import org.matrix.android.sdk.internal.database.model.ChunkEntity
|
||||||
import org.matrix.android.sdk.internal.database.model.ChunkEntityFields
|
|
||||||
import org.matrix.android.sdk.internal.database.model.RoomEntity
|
import org.matrix.android.sdk.internal.database.model.RoomEntity
|
||||||
import org.matrix.android.sdk.internal.database.model.TimelineEventEntity
|
import org.matrix.android.sdk.internal.database.model.TimelineEventEntity
|
||||||
import org.matrix.android.sdk.internal.database.model.TimelineEventEntityFields
|
import org.matrix.android.sdk.internal.database.model.TimelineEventEntityFields
|
||||||
import timber.log.Timber
|
|
||||||
|
|
||||||
internal fun TimelineEventEntity.Companion.where(realm: Realm, roomId: String, eventId: String): RealmQuery<TimelineEventEntity> {
|
internal fun TimelineEventEntity.Companion.where(realm: Realm, roomId: String, eventId: String): RealmQuery<TimelineEventEntity> {
|
||||||
return realm.where<TimelineEventEntity>()
|
return realm.where<TimelineEventEntity>()
|
||||||
|
|
|
@ -169,7 +169,6 @@ internal class DefaultRelationService @AssistedInject constructor(
|
||||||
autoMarkdown: Boolean,
|
autoMarkdown: Boolean,
|
||||||
formattedText: String?,
|
formattedText: String?,
|
||||||
eventReplied: TimelineEvent?): Cancelable? {
|
eventReplied: TimelineEvent?): Cancelable? {
|
||||||
|
|
||||||
val event = if (eventReplied != null) {
|
val event = if (eventReplied != null) {
|
||||||
eventFactory.createReplyTextEvent(
|
eventFactory.createReplyTextEvent(
|
||||||
roomId = roomId,
|
roomId = roomId,
|
||||||
|
|
|
@ -258,7 +258,6 @@ internal class DefaultSendService @AssistedInject constructor(
|
||||||
roomIds: Set<String>,
|
roomIds: Set<String>,
|
||||||
rootThreadEventId: String?
|
rootThreadEventId: String?
|
||||||
): Cancelable {
|
): Cancelable {
|
||||||
|
|
||||||
// Ensure that the event will not be send in a thread if we are a different flow.
|
// Ensure that the event will not be send in a thread if we are a different flow.
|
||||||
// Like sending files to multiple rooms
|
// Like sending files to multiple rooms
|
||||||
val rootThreadId = if (roomIds.isNotEmpty()) null else rootThreadEventId
|
val rootThreadId = if (roomIds.isNotEmpty()) null else rootThreadEventId
|
||||||
|
|
|
@ -397,7 +397,6 @@ internal class LocalEchoEventFactory @Inject constructor(
|
||||||
msgType: String,
|
msgType: String,
|
||||||
autoMarkdown: Boolean,
|
autoMarkdown: Boolean,
|
||||||
formattedText: String?): Event {
|
formattedText: String?): Event {
|
||||||
|
|
||||||
val content = formattedText?.let { TextContent(text, it) } ?: createTextContent(text, autoMarkdown)
|
val content = formattedText?.let { TextContent(text, it) } ?: createTextContent(text, autoMarkdown)
|
||||||
return createEvent(
|
return createEvent(
|
||||||
roomId,
|
roomId,
|
||||||
|
|
|
@ -180,7 +180,6 @@ internal class DefaultTimeline(
|
||||||
.endGroup()
|
.endGroup()
|
||||||
.sort(TimelineEventEntityFields.DISPLAY_INDEX, Sort.DESCENDING)
|
.sort(TimelineEventEntityFields.DISPLAY_INDEX, Sort.DESCENDING)
|
||||||
.findAll()
|
.findAll()
|
||||||
|
|
||||||
} ?: buildEventQuery(realm).sort(TimelineEventEntityFields.DISPLAY_INDEX, Sort.DESCENDING).findAll()
|
} ?: buildEventQuery(realm).sort(TimelineEventEntityFields.DISPLAY_INDEX, Sort.DESCENDING).findAll()
|
||||||
|
|
||||||
timelineEvents.addChangeListener(eventsChangeListener)
|
timelineEvents.addChangeListener(eventsChangeListener)
|
||||||
|
@ -332,7 +331,6 @@ internal class DefaultTimeline(
|
||||||
val firstCacheEvent = results.firstOrNull()
|
val firstCacheEvent = results.firstOrNull()
|
||||||
val chunkEntity = getLiveChunk()
|
val chunkEntity = getLiveChunk()
|
||||||
|
|
||||||
|
|
||||||
updateState(Timeline.Direction.FORWARDS) {
|
updateState(Timeline.Direction.FORWARDS) {
|
||||||
it.copy(
|
it.copy(
|
||||||
hasMoreInCache = !builtEventsIdMap.containsKey(firstCacheEvent?.eventId), // what is in DB
|
hasMoreInCache = !builtEventsIdMap.containsKey(firstCacheEvent?.eventId), // what is in DB
|
||||||
|
@ -340,7 +338,6 @@ internal class DefaultTimeline(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
updateState(Timeline.Direction.BACKWARDS) {
|
updateState(Timeline.Direction.BACKWARDS) {
|
||||||
|
|
||||||
it.copy(
|
it.copy(
|
||||||
hasMoreInCache = !builtEventsIdMap.containsKey(lastCacheEvent?.eventId),
|
hasMoreInCache = !builtEventsIdMap.containsKey(lastCacheEvent?.eventId),
|
||||||
hasReachedEnd = if (isFromThreadTimeline) true else chunkEntity?.isLastBackward ?: false || lastCacheEvent?.root?.type == EventType.STATE_ROOM_CREATE
|
hasReachedEnd = if (isFromThreadTimeline) true else chunkEntity?.isLastBackward ?: false || lastCacheEvent?.root?.type == EventType.STATE_ROOM_CREATE
|
||||||
|
@ -497,7 +494,6 @@ internal class DefaultTimeline(
|
||||||
* This has to be called on TimelineThread as it accesses realm live results
|
* This has to be called on TimelineThread as it accesses realm live results
|
||||||
*/
|
*/
|
||||||
private fun executePaginationTask(direction: Timeline.Direction, limit: Int) {
|
private fun executePaginationTask(direction: Timeline.Direction, limit: Int) {
|
||||||
|
|
||||||
val currentChunk = getLiveChunk()
|
val currentChunk = getLiveChunk()
|
||||||
val token = if (direction == Timeline.Direction.BACKWARDS) currentChunk?.prevToken else currentChunk?.nextToken
|
val token = if (direction == Timeline.Direction.BACKWARDS) currentChunk?.prevToken else currentChunk?.nextToken
|
||||||
if (token == null) {
|
if (token == null) {
|
||||||
|
@ -604,8 +600,7 @@ internal class DefaultTimeline(
|
||||||
nextDisplayIndex = offsetIndex + 1
|
nextDisplayIndex = offsetIndex + 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!BuildConfig.THREADING_ENABLED) {
|
||||||
if(!BuildConfig.THREADING_ENABLED) {
|
|
||||||
// Prerequisite to in order for the ThreadsAwarenessHandler to work properly
|
// Prerequisite to in order for the ThreadsAwarenessHandler to work properly
|
||||||
fetchRootThreadEventsIfNeeded(offsetResults)
|
fetchRootThreadEventsIfNeeded(offsetResults)
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,6 @@ import org.matrix.android.sdk.internal.network.executeRequest
|
||||||
import org.matrix.android.sdk.internal.session.filter.FilterRepository
|
import org.matrix.android.sdk.internal.session.filter.FilterRepository
|
||||||
import org.matrix.android.sdk.internal.session.room.RoomAPI
|
import org.matrix.android.sdk.internal.session.room.RoomAPI
|
||||||
import org.matrix.android.sdk.internal.task.Task
|
import org.matrix.android.sdk.internal.task.Task
|
||||||
import timber.log.Timber
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
internal interface PaginationTask : Task<PaginationTask.Params, TokenChunkEventPersistor.Result> {
|
internal interface PaginationTask : Task<PaginationTask.Params, TokenChunkEventPersistor.Result> {
|
||||||
|
|
|
@ -115,7 +115,6 @@ internal class TimelineEventDecryptor @Inject constructor(
|
||||||
.findFirst()
|
.findFirst()
|
||||||
|
|
||||||
eventEntity?.apply {
|
eventEntity?.apply {
|
||||||
|
|
||||||
val decryptedPayload =
|
val decryptedPayload =
|
||||||
if (!BuildConfig.THREADING_ENABLED) {
|
if (!BuildConfig.THREADING_ENABLED) {
|
||||||
threadsAwarenessHandler.handleIfNeededDuringDecryption(
|
threadsAwarenessHandler.handleIfNeededDuringDecryption(
|
||||||
|
|
|
@ -238,7 +238,6 @@ internal class TokenChunkEventPersistor @Inject constructor(
|
||||||
// This is a normal event or a root thread one
|
// This is a normal event or a root thread one
|
||||||
optimizedThreadSummaryMap[eventEntity.eventId] = eventEntity
|
optimizedThreadSummaryMap[eventEntity.eventId] = eventEntity
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find all the chunks which contain at least one event from the list of eventIds
|
// Find all the chunks which contain at least one event from the list of eventIds
|
||||||
|
|
|
@ -102,7 +102,7 @@ internal class SyncResponseHandler @Inject constructor(
|
||||||
val aggregator = SyncResponsePostTreatmentAggregator()
|
val aggregator = SyncResponsePostTreatmentAggregator()
|
||||||
|
|
||||||
// Prerequisite for thread events handling in RoomSyncHandler
|
// Prerequisite for thread events handling in RoomSyncHandler
|
||||||
if(!BuildConfig.THREADING_ENABLED) {
|
if (!BuildConfig.THREADING_ENABLED) {
|
||||||
threadsAwarenessHandler.fetchRootThreadEventsIfNeeded(syncResponse)
|
threadsAwarenessHandler.fetchRootThreadEventsIfNeeded(syncResponse)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -376,7 +376,7 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle
|
||||||
decryptIfNeeded(event, roomId)
|
decryptIfNeeded(event, roomId)
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!BuildConfig.THREADING_ENABLED) {
|
if (!BuildConfig.THREADING_ENABLED) {
|
||||||
threadsAwarenessHandler.handleIfNeeded(
|
threadsAwarenessHandler.handleIfNeeded(
|
||||||
realm = realm,
|
realm = realm,
|
||||||
roomId = roomId,
|
roomId = roomId,
|
||||||
|
|
|
@ -45,7 +45,6 @@ import org.matrix.android.sdk.internal.session.permalinks.PermalinkFactory
|
||||||
import org.matrix.android.sdk.internal.session.room.send.LocalEchoEventFactory
|
import org.matrix.android.sdk.internal.session.room.send.LocalEchoEventFactory
|
||||||
import org.matrix.android.sdk.internal.session.room.timeline.GetEventTask
|
import org.matrix.android.sdk.internal.session.room.timeline.GetEventTask
|
||||||
import org.matrix.android.sdk.internal.util.awaitTransaction
|
import org.matrix.android.sdk.internal.util.awaitTransaction
|
||||||
import timber.log.Timber
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -25,10 +25,7 @@ import im.vector.app.BuildConfig
|
||||||
import im.vector.app.features.autocomplete.AutocompleteClickListener
|
import im.vector.app.features.autocomplete.AutocompleteClickListener
|
||||||
import im.vector.app.features.autocomplete.RecyclerViewPresenter
|
import im.vector.app.features.autocomplete.RecyclerViewPresenter
|
||||||
import im.vector.app.features.command.Command
|
import im.vector.app.features.command.Command
|
||||||
import im.vector.app.features.home.room.detail.AutoCompleter
|
|
||||||
import im.vector.app.features.settings.VectorPreferences
|
import im.vector.app.features.settings.VectorPreferences
|
||||||
import timber.log.Timber
|
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
class AutocompleteCommandPresenter @AssistedInject constructor(
|
class AutocompleteCommandPresenter @AssistedInject constructor(
|
||||||
@Assisted val isInThreadTimeline: Boolean,
|
@Assisted val isInThreadTimeline: Boolean,
|
||||||
|
@ -62,8 +59,9 @@ class AutocompleteCommandPresenter @AssistedInject constructor(
|
||||||
.filter {
|
.filter {
|
||||||
if (BuildConfig.THREADING_ENABLED && isInThreadTimeline) {
|
if (BuildConfig.THREADING_ENABLED && isInThreadTimeline) {
|
||||||
it.isThreadCommand
|
it.isThreadCommand
|
||||||
} else
|
} else {
|
||||||
true
|
true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.filter {
|
.filter {
|
||||||
if (query.isNullOrEmpty()) {
|
if (query.isNullOrEmpty()) {
|
||||||
|
|
|
@ -64,14 +64,14 @@ object CommandParser {
|
||||||
|
|
||||||
// If the command is not supported by threads return error
|
// If the command is not supported by threads return error
|
||||||
|
|
||||||
if(BuildConfig.THREADING_ENABLED && isInThreadTimeline){
|
if (BuildConfig.THREADING_ENABLED && isInThreadTimeline) {
|
||||||
val slashCommand = messageParts.first()
|
val slashCommand = messageParts.first()
|
||||||
val notSupportedCommandsInThreads = Command.values().filter {
|
val notSupportedCommandsInThreads = Command.values().filter {
|
||||||
!it.isThreadCommand
|
!it.isThreadCommand
|
||||||
}.map {
|
}.map {
|
||||||
it.command
|
it.command
|
||||||
}
|
}
|
||||||
if(notSupportedCommandsInThreads.contains(slashCommand)){
|
if (notSupportedCommandsInThreads.contains(slashCommand)) {
|
||||||
return ParsedCommand.ErrorCommandNotSupportedInThreads(slashCommand)
|
return ParsedCommand.ErrorCommandNotSupportedInThreads(slashCommand)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,8 +37,8 @@ import im.vector.app.core.platform.ToolbarConfigurable
|
||||||
import im.vector.app.core.platform.VectorBaseActivity
|
import im.vector.app.core.platform.VectorBaseActivity
|
||||||
import im.vector.app.databinding.ActivityRoomDetailBinding
|
import im.vector.app.databinding.ActivityRoomDetailBinding
|
||||||
import im.vector.app.features.home.room.breadcrumbs.BreadcrumbsFragment
|
import im.vector.app.features.home.room.breadcrumbs.BreadcrumbsFragment
|
||||||
import im.vector.app.features.home.room.detail.timeline.helper.VoiceMessagePlaybackTracker
|
|
||||||
import im.vector.app.features.home.room.detail.arguments.TimelineArgs
|
import im.vector.app.features.home.room.detail.arguments.TimelineArgs
|
||||||
|
import im.vector.app.features.home.room.detail.timeline.helper.VoiceMessagePlaybackTracker
|
||||||
import im.vector.app.features.matrixto.MatrixToBottomSheet
|
import im.vector.app.features.matrixto.MatrixToBottomSheet
|
||||||
import im.vector.app.features.navigation.Navigator
|
import im.vector.app.features.navigation.Navigator
|
||||||
import im.vector.app.features.room.RequireActiveMembershipAction
|
import im.vector.app.features.room.RequireActiveMembershipAction
|
||||||
|
|
|
@ -89,5 +89,4 @@ data class RoomDetailViewState(
|
||||||
fun isDm() = asyncRoomSummary()?.isDirect == true
|
fun isDm() = asyncRoomSummary()?.isDirect == true
|
||||||
|
|
||||||
fun isThreadTimeline() = rootThreadEventId != null
|
fun isThreadTimeline() = rootThreadEventId != null
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,8 +63,6 @@ import com.airbnb.epoxy.EpoxyModel
|
||||||
import com.airbnb.epoxy.OnModelBuildFinishedListener
|
import com.airbnb.epoxy.OnModelBuildFinishedListener
|
||||||
import com.airbnb.epoxy.addGlidePreloader
|
import com.airbnb.epoxy.addGlidePreloader
|
||||||
import com.airbnb.epoxy.glidePreloader
|
import com.airbnb.epoxy.glidePreloader
|
||||||
import com.airbnb.mvrx.Mavericks
|
|
||||||
import com.airbnb.mvrx.activityViewModel
|
|
||||||
import com.airbnb.mvrx.args
|
import com.airbnb.mvrx.args
|
||||||
import com.airbnb.mvrx.fragmentViewModel
|
import com.airbnb.mvrx.fragmentViewModel
|
||||||
import com.airbnb.mvrx.withState
|
import com.airbnb.mvrx.withState
|
||||||
|
@ -136,7 +134,6 @@ import im.vector.app.features.command.Command
|
||||||
import im.vector.app.features.crypto.keysbackup.restore.KeysBackupRestoreActivity
|
import im.vector.app.features.crypto.keysbackup.restore.KeysBackupRestoreActivity
|
||||||
import im.vector.app.features.crypto.verification.VerificationBottomSheet
|
import im.vector.app.features.crypto.verification.VerificationBottomSheet
|
||||||
import im.vector.app.features.home.AvatarRenderer
|
import im.vector.app.features.home.AvatarRenderer
|
||||||
import im.vector.app.features.home.UnreadMessagesSharedViewModel
|
|
||||||
import im.vector.app.features.home.room.detail.arguments.TimelineArgs
|
import im.vector.app.features.home.room.detail.arguments.TimelineArgs
|
||||||
import im.vector.app.features.home.room.detail.composer.MessageComposerAction
|
import im.vector.app.features.home.room.detail.composer.MessageComposerAction
|
||||||
import im.vector.app.features.home.room.detail.composer.MessageComposerView
|
import im.vector.app.features.home.room.detail.composer.MessageComposerView
|
||||||
|
@ -975,7 +972,6 @@ class TimelineFragment @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPrepareOptionsMenu(menu: Menu) {
|
override fun onPrepareOptionsMenu(menu: Menu) {
|
||||||
|
|
||||||
menu.forEach {
|
menu.forEach {
|
||||||
it.isVisible = roomDetailViewModel.isMenuItemVisible(it.itemId)
|
it.isVisible = roomDetailViewModel.isMenuItemVisible(it.itemId)
|
||||||
}
|
}
|
||||||
|
@ -1014,7 +1010,6 @@ class TimelineFragment @Inject constructor(
|
||||||
|
|
||||||
// Handle custom threads badge notification
|
// Handle custom threads badge notification
|
||||||
updateMenuThreadNotificationBadge(menu, state)
|
updateMenuThreadNotificationBadge(menu, state)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1057,7 +1052,6 @@ class TimelineFragment @Inject constructor(
|
||||||
val permalink = session.permalinkService().createPermalink(timelineArgs.roomId, it)
|
val permalink = session.permalinkService().createPermalink(timelineArgs.roomId, it)
|
||||||
copyToClipboard(requireContext(), permalink, false)
|
copyToClipboard(requireContext(), permalink, false)
|
||||||
showSnackWithMessage(getString(R.string.copied_to_clipboard))
|
showSnackWithMessage(getString(R.string.copied_to_clipboard))
|
||||||
|
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
@ -1109,7 +1103,6 @@ class TimelineFragment @Inject constructor(
|
||||||
val int = RoomDetailActivity.newIntent(con, newRoom)
|
val int = RoomDetailActivity.newIntent(con, newRoom)
|
||||||
int.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK
|
int.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK
|
||||||
con.startActivity(int)
|
con.startActivity(int)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1388,7 +1381,7 @@ class TimelineFragment @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateJumpToReadMarkerViewVisibility() {
|
private fun updateJumpToReadMarkerViewVisibility() {
|
||||||
if(isThreadTimeLine()) return
|
if (isThreadTimeLine()) return
|
||||||
viewLifecycleOwner.lifecycleScope.launchWhenResumed {
|
viewLifecycleOwner.lifecycleScope.launchWhenResumed {
|
||||||
withState(roomDetailViewModel) {
|
withState(roomDetailViewModel) {
|
||||||
val showJumpToUnreadBanner = when (it.unreadState) {
|
val showJumpToUnreadBanner = when (it.unreadState) {
|
||||||
|
@ -1488,7 +1481,7 @@ class TimelineFragment @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun observerUserTyping() {
|
private fun observerUserTyping() {
|
||||||
if(isThreadTimeLine()) return
|
if (isThreadTimeLine()) return
|
||||||
views.composerLayout.views.composerEditText.textChanges()
|
views.composerLayout.views.composerEditText.textChanges()
|
||||||
.skipInitialValue()
|
.skipInitialValue()
|
||||||
.debounce(300)
|
.debounce(300)
|
||||||
|
@ -1774,7 +1767,6 @@ class TimelineFragment @Inject constructor(
|
||||||
if (roomId != timelineArgs.roomId) return false
|
if (roomId != timelineArgs.roomId) return false
|
||||||
// Navigation to same room
|
// Navigation to same room
|
||||||
if (!isThreadTimeLine()) {
|
if (!isThreadTimeLine()) {
|
||||||
|
|
||||||
if (rootThreadEventId != null) {
|
if (rootThreadEventId != null) {
|
||||||
// Thread link, so PermalinkHandler will handle the navigation
|
// Thread link, so PermalinkHandler will handle the navigation
|
||||||
return false
|
return false
|
||||||
|
|
|
@ -35,7 +35,7 @@ sealed class MessageComposerAction : VectorViewModelAction {
|
||||||
data class InitializeVoiceRecorder(val attachmentData: ContentAttachmentData) : MessageComposerAction()
|
data class InitializeVoiceRecorder(val attachmentData: ContentAttachmentData) : MessageComposerAction()
|
||||||
data class OnVoiceRecordingUiStateChanged(val uiState: VoiceMessageRecorderView.RecordingUiState) : MessageComposerAction()
|
data class OnVoiceRecordingUiStateChanged(val uiState: VoiceMessageRecorderView.RecordingUiState) : MessageComposerAction()
|
||||||
object StartRecordingVoiceMessage : MessageComposerAction()
|
object StartRecordingVoiceMessage : MessageComposerAction()
|
||||||
data class EndRecordingVoiceMessage(val isCancelled: Boolean,val rootThreadEventId: String?) : MessageComposerAction()
|
data class EndRecordingVoiceMessage(val isCancelled: Boolean, val rootThreadEventId: String?) : MessageComposerAction()
|
||||||
object PauseRecordingVoiceMessage : MessageComposerAction()
|
object PauseRecordingVoiceMessage : MessageComposerAction()
|
||||||
data class PlayOrPauseVoicePlayback(val eventId: String, val messageAudioContent: MessageAudioContent) : MessageComposerAction()
|
data class PlayOrPauseVoicePlayback(val eventId: String, val messageAudioContent: MessageAudioContent) : MessageComposerAction()
|
||||||
object PlayOrPauseRecordingPlayback : MessageComposerAction()
|
object PlayOrPauseRecordingPlayback : MessageComposerAction()
|
||||||
|
|
|
@ -30,7 +30,6 @@ import im.vector.app.features.attachments.toContentAttachmentData
|
||||||
import im.vector.app.features.command.CommandParser
|
import im.vector.app.features.command.CommandParser
|
||||||
import im.vector.app.features.command.ParsedCommand
|
import im.vector.app.features.command.ParsedCommand
|
||||||
import im.vector.app.features.home.room.detail.ChatEffect
|
import im.vector.app.features.home.room.detail.ChatEffect
|
||||||
import im.vector.app.features.home.room.detail.TimelineFragment
|
|
||||||
import im.vector.app.features.home.room.detail.composer.rainbow.RainbowGenerator
|
import im.vector.app.features.home.room.detail.composer.rainbow.RainbowGenerator
|
||||||
import im.vector.app.features.home.room.detail.composer.voice.VoiceMessageRecorderView
|
import im.vector.app.features.home.room.detail.composer.voice.VoiceMessageRecorderView
|
||||||
import im.vector.app.features.home.room.detail.toMessageType
|
import im.vector.app.features.home.room.detail.toMessageType
|
||||||
|
@ -167,13 +166,14 @@ class MessageComposerViewModel @AssistedInject constructor(
|
||||||
when (val slashCommandResult = CommandParser.parseSplashCommand(action.text, state.isInThreadTimeline())) {
|
when (val slashCommandResult = CommandParser.parseSplashCommand(action.text, state.isInThreadTimeline())) {
|
||||||
is ParsedCommand.ErrorNotACommand -> {
|
is ParsedCommand.ErrorNotACommand -> {
|
||||||
// Send the text message to the room
|
// Send the text message to the room
|
||||||
if (state.rootThreadEventId != null)
|
if (state.rootThreadEventId != null) {
|
||||||
room.replyInThread(
|
room.replyInThread(
|
||||||
rootThreadEventId = state.rootThreadEventId,
|
rootThreadEventId = state.rootThreadEventId,
|
||||||
replyInThreadText = action.text.toString(),
|
replyInThreadText = action.text.toString(),
|
||||||
autoMarkdown = action.autoMarkdown)
|
autoMarkdown = action.autoMarkdown)
|
||||||
else
|
} else {
|
||||||
room.sendTextMessage(action.text, autoMarkdown = action.autoMarkdown)
|
room.sendTextMessage(action.text, autoMarkdown = action.autoMarkdown)
|
||||||
|
}
|
||||||
|
|
||||||
_viewEvents.post(MessageComposerViewEvents.MessageSent)
|
_viewEvents.post(MessageComposerViewEvents.MessageSent)
|
||||||
popDraft()
|
popDraft()
|
||||||
|
@ -192,13 +192,14 @@ class MessageComposerViewModel @AssistedInject constructor(
|
||||||
}
|
}
|
||||||
is ParsedCommand.SendPlainText -> {
|
is ParsedCommand.SendPlainText -> {
|
||||||
// Send the text message to the room, without markdown
|
// Send the text message to the room, without markdown
|
||||||
if (state.rootThreadEventId != null)
|
if (state.rootThreadEventId != null) {
|
||||||
room.replyInThread(
|
room.replyInThread(
|
||||||
rootThreadEventId = state.rootThreadEventId,
|
rootThreadEventId = state.rootThreadEventId,
|
||||||
replyInThreadText = action.text.toString(),
|
replyInThreadText = action.text.toString(),
|
||||||
autoMarkdown = false)
|
autoMarkdown = false)
|
||||||
else
|
} else {
|
||||||
room.sendTextMessage(slashCommandResult.message, autoMarkdown = false)
|
room.sendTextMessage(slashCommandResult.message, autoMarkdown = false)
|
||||||
|
}
|
||||||
_viewEvents.post(MessageComposerViewEvents.MessageSent)
|
_viewEvents.post(MessageComposerViewEvents.MessageSent)
|
||||||
popDraft()
|
popDraft()
|
||||||
}
|
}
|
||||||
|
@ -258,7 +259,6 @@ class MessageComposerViewModel @AssistedInject constructor(
|
||||||
popDraft()
|
popDraft()
|
||||||
}
|
}
|
||||||
is ParsedCommand.SendRainbow -> {
|
is ParsedCommand.SendRainbow -> {
|
||||||
|
|
||||||
val message = slashCommandResult.message.toString()
|
val message = slashCommandResult.message.toString()
|
||||||
state.rootThreadEventId?.let {
|
state.rootThreadEventId?.let {
|
||||||
room.replyInThread(
|
room.replyInThread(
|
||||||
|
@ -283,7 +283,6 @@ class MessageComposerViewModel @AssistedInject constructor(
|
||||||
popDraft()
|
popDraft()
|
||||||
}
|
}
|
||||||
is ParsedCommand.SendSpoiler -> {
|
is ParsedCommand.SendSpoiler -> {
|
||||||
|
|
||||||
val text = "[${stringProvider.getString(R.string.spoiler)}](${slashCommandResult.message})"
|
val text = "[${stringProvider.getString(R.string.spoiler)}](${slashCommandResult.message})"
|
||||||
val formattedText = "<span data-mx-spoiler>${slashCommandResult.message}</span>"
|
val formattedText = "<span data-mx-spoiler>${slashCommandResult.message}</span>"
|
||||||
state.rootThreadEventId?.let {
|
state.rootThreadEventId?.let {
|
||||||
|
@ -299,7 +298,6 @@ class MessageComposerViewModel @AssistedInject constructor(
|
||||||
popDraft()
|
popDraft()
|
||||||
}
|
}
|
||||||
is ParsedCommand.SendShrug -> {
|
is ParsedCommand.SendShrug -> {
|
||||||
|
|
||||||
sendPrefixedMessage("¯\\_(ツ)_/¯", slashCommandResult.message, state.rootThreadEventId)
|
sendPrefixedMessage("¯\\_(ツ)_/¯", slashCommandResult.message, state.rootThreadEventId)
|
||||||
_viewEvents.post(MessageComposerViewEvents.SlashCommandResultOk())
|
_viewEvents.post(MessageComposerViewEvents.SlashCommandResultOk())
|
||||||
popDraft()
|
popDraft()
|
||||||
|
|
|
@ -105,7 +105,7 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec
|
||||||
rootThreadEventId = state.rootThreadEventId
|
rootThreadEventId = state.rootThreadEventId
|
||||||
)
|
)
|
||||||
|
|
||||||
fun isFromThreadTimeline():Boolean = rootThreadEventId != null
|
fun isFromThreadTimeline(): Boolean = rootThreadEventId != null
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Callback :
|
interface Callback :
|
||||||
|
@ -200,7 +200,7 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec
|
||||||
// it's sent by the same user so we are sure we have up to date information.
|
// it's sent by the same user so we are sure we have up to date information.
|
||||||
val invalidatedSenderId: String? = currentSnapshot.getOrNull(position)?.senderInfo?.userId
|
val invalidatedSenderId: String? = currentSnapshot.getOrNull(position)?.senderInfo?.userId
|
||||||
val prevDisplayableEventIndex = currentSnapshot.subList(0, position).indexOfLast {
|
val prevDisplayableEventIndex = currentSnapshot.subList(0, position).indexOfLast {
|
||||||
timelineEventVisibilityHelper.shouldShowEvent(it, partialState.highlightedEventId, partialState.isFromThreadTimeline() )
|
timelineEventVisibilityHelper.shouldShowEvent(it, partialState.highlightedEventId, partialState.isFromThreadTimeline())
|
||||||
}
|
}
|
||||||
if (prevDisplayableEventIndex != -1 && currentSnapshot[prevDisplayableEventIndex].senderInfo.userId == invalidatedSenderId) {
|
if (prevDisplayableEventIndex != -1 && currentSnapshot[prevDisplayableEventIndex].senderInfo.userId == invalidatedSenderId) {
|
||||||
modelCache[prevDisplayableEventIndex] = null
|
modelCache[prevDisplayableEventIndex] = null
|
||||||
|
|
|
@ -128,7 +128,7 @@ class TimelineEventVisibilityHelper @Inject constructor(private val userPreferen
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
if(BuildConfig.THREADING_ENABLED && !isFromThreadTimeline && root.isThread() && root.getRootThreadEventId() != null){
|
if (BuildConfig.THREADING_ENABLED && !isFromThreadTimeline && root.isThread() && root.getRootThreadEventId() != null) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -127,6 +127,7 @@ abstract class AbsBaseMessageItem<H : AbsBaseMessageItem.Holder> : BaseEventItem
|
||||||
val messageColorProvider: MessageColorProvider
|
val messageColorProvider: MessageColorProvider
|
||||||
val itemLongClickListener: View.OnLongClickListener?
|
val itemLongClickListener: View.OnLongClickListener?
|
||||||
val itemClickListener: ClickListener?
|
val itemClickListener: ClickListener?
|
||||||
|
|
||||||
// val memberClickListener: ClickListener?
|
// val memberClickListener: ClickListener?
|
||||||
val reactionPillCallback: TimelineEventController.ReactionPillCallback?
|
val reactionPillCallback: TimelineEventController.ReactionPillCallback?
|
||||||
|
|
||||||
|
|
|
@ -124,10 +124,10 @@ abstract class AbsMessageItem<H : AbsMessageItem.Holder> : AbsBaseMessageItem<H>
|
||||||
val displayName = threadDetails.threadSummarySenderInfo?.displayName
|
val displayName = threadDetails.threadSummarySenderInfo?.displayName
|
||||||
val avatarUrl = threadDetails.threadSummarySenderInfo?.avatarUrl
|
val avatarUrl = threadDetails.threadSummarySenderInfo?.avatarUrl
|
||||||
attributes.avatarRenderer.render(MatrixItem.UserItem(userId, displayName, avatarUrl), holder.threadSummaryAvatarImageView)
|
attributes.avatarRenderer.render(MatrixItem.UserItem(userId, displayName, avatarUrl), holder.threadSummaryAvatarImageView)
|
||||||
updateHighlightedMessageHeight(holder,true)
|
updateHighlightedMessageHeight(holder, true)
|
||||||
} ?: run {
|
} ?: run {
|
||||||
holder.threadSummaryConstraintLayout.isVisible = false
|
holder.threadSummaryConstraintLayout.isVisible = false
|
||||||
updateHighlightedMessageHeight(holder,false)
|
updateHighlightedMessageHeight(holder, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,8 +29,8 @@ import im.vector.app.core.platform.ToolbarConfigurable
|
||||||
import im.vector.app.core.platform.VectorBaseActivity
|
import im.vector.app.core.platform.VectorBaseActivity
|
||||||
import im.vector.app.databinding.ActivityThreadsBinding
|
import im.vector.app.databinding.ActivityThreadsBinding
|
||||||
import im.vector.app.features.home.AvatarRenderer
|
import im.vector.app.features.home.AvatarRenderer
|
||||||
import im.vector.app.features.home.room.detail.arguments.TimelineArgs
|
|
||||||
import im.vector.app.features.home.room.detail.TimelineFragment
|
import im.vector.app.features.home.room.detail.TimelineFragment
|
||||||
|
import im.vector.app.features.home.room.detail.arguments.TimelineArgs
|
||||||
import im.vector.app.features.home.room.threads.arguments.ThreadListArgs
|
import im.vector.app.features.home.room.threads.arguments.ThreadListArgs
|
||||||
import im.vector.app.features.home.room.threads.arguments.ThreadTimelineArgs
|
import im.vector.app.features.home.room.threads.arguments.ThreadTimelineArgs
|
||||||
import im.vector.app.features.home.room.threads.list.views.ThreadListFragment
|
import im.vector.app.features.home.room.threads.list.views.ThreadListFragment
|
||||||
|
@ -152,7 +152,6 @@ class ThreadsActivity : VectorBaseActivity<ActivityThreadsBinding>(), ToolbarCon
|
||||||
putExtra(THREAD_TIMELINE_ARGS, threadTimelineArgs)
|
putExtra(THREAD_TIMELINE_ARGS, threadTimelineArgs)
|
||||||
putExtra(THREAD_EVENT_ID_TO_NAVIGATE, eventIdToNavigate)
|
putExtra(THREAD_EVENT_ID_TO_NAVIGATE, eventIdToNavigate)
|
||||||
putExtra(THREAD_LIST_ARGS, threadListArgs)
|
putExtra(THREAD_LIST_ARGS, threadListArgs)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,15 +77,14 @@ abstract class ThreadListModel : VectorEpoxyModel<ThreadListModel.Holder>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun renderNotificationState(holder: Holder) {
|
private fun renderNotificationState(holder: Holder) {
|
||||||
|
|
||||||
when (threadNotificationState) {
|
when (threadNotificationState) {
|
||||||
ThreadNotificationState.NEW_MESSAGE -> {
|
ThreadNotificationState.NEW_MESSAGE -> {
|
||||||
holder.unreadImageView.isVisible = true
|
holder.unreadImageView.isVisible = true
|
||||||
holder.unreadImageView.setColorFilter(ContextCompat.getColor(holder.view.context, R.color.palette_gray_200));
|
holder.unreadImageView.setColorFilter(ContextCompat.getColor(holder.view.context, R.color.palette_gray_200))
|
||||||
}
|
}
|
||||||
ThreadNotificationState.NEW_HIGHLIGHTED_MESSAGE -> {
|
ThreadNotificationState.NEW_HIGHLIGHTED_MESSAGE -> {
|
||||||
holder.unreadImageView.isVisible = true
|
holder.unreadImageView.isVisible = true
|
||||||
holder.unreadImageView.setColorFilter(ContextCompat.getColor(holder.view.context, R.color.palette_vermilion));
|
holder.unreadImageView.setColorFilter(ContextCompat.getColor(holder.view.context, R.color.palette_vermilion))
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
holder.unreadImageView.isVisible = false
|
holder.unreadImageView.isVisible = false
|
||||||
|
|
|
@ -26,7 +26,7 @@ data class ThreadListViewState(
|
||||||
val rootThreadEventList: Async<List<ThreadTimelineEvent>> = Uninitialized,
|
val rootThreadEventList: Async<List<ThreadTimelineEvent>> = Uninitialized,
|
||||||
val shouldFilterThreads: Boolean = false,
|
val shouldFilterThreads: Boolean = false,
|
||||||
val roomId: String
|
val roomId: String
|
||||||
) : MavericksState{
|
) : MavericksState {
|
||||||
|
|
||||||
constructor(args: ThreadListArgs) : this(roomId = args.roomId)
|
constructor(args: ThreadListArgs) : this(roomId = args.roomId)
|
||||||
}
|
}
|
||||||
|
|
|
@ -154,5 +154,4 @@ interface Navigator {
|
||||||
fun openThread(context: Context, threadTimelineArgs: ThreadTimelineArgs, eventIdToNavigate: String? = null)
|
fun openThread(context: Context, threadTimelineArgs: ThreadTimelineArgs, eventIdToNavigate: String? = null)
|
||||||
|
|
||||||
fun openThreadList(context: Context, threadTimelineArgs: ThreadTimelineArgs)
|
fun openThreadList(context: Context, threadTimelineArgs: ThreadTimelineArgs)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue