forked from GitHub-Mirror/riotX-android
Perf: try to get better
This commit is contained in:
parent
8fefdc1019
commit
19202cfca6
@ -25,6 +25,7 @@ import android.text.TextUtils
|
|||||||
import arrow.core.Try
|
import arrow.core.Try
|
||||||
import com.squareup.moshi.Types
|
import com.squareup.moshi.Types
|
||||||
import com.zhuinden.monarchy.Monarchy
|
import com.zhuinden.monarchy.Monarchy
|
||||||
|
import dagger.Lazy
|
||||||
import im.vector.matrix.android.api.MatrixCallback
|
import im.vector.matrix.android.api.MatrixCallback
|
||||||
import im.vector.matrix.android.api.auth.data.Credentials
|
import im.vector.matrix.android.api.auth.data.Credentials
|
||||||
import im.vector.matrix.android.api.failure.Failure
|
import im.vector.matrix.android.api.failure.Failure
|
||||||
@ -98,7 +99,7 @@ internal class CryptoManager @Inject constructor(
|
|||||||
private val olmManager: OlmManager,
|
private val olmManager: OlmManager,
|
||||||
// The credentials,
|
// The credentials,
|
||||||
private val credentials: Credentials,
|
private val credentials: Credentials,
|
||||||
private val myDeviceInfoHolder: MyDeviceInfoHolder,
|
private val myDeviceInfoHolder: Lazy<MyDeviceInfoHolder>,
|
||||||
// the crypto store
|
// the crypto store
|
||||||
private val cryptoStore: IMXCryptoStore,
|
private val cryptoStore: IMXCryptoStore,
|
||||||
// Olm device
|
// Olm device
|
||||||
@ -190,7 +191,7 @@ internal class CryptoManager @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getMyDevice(): MXDeviceInfo {
|
override fun getMyDevice(): MXDeviceInfo {
|
||||||
return myDeviceInfoHolder.myDevice
|
return myDeviceInfoHolder.get().myDevice
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getDevicesList(callback: MatrixCallback<DevicesListResponse>) {
|
override fun getDevicesList(callback: MatrixCallback<DevicesListResponse>) {
|
||||||
|
@ -18,6 +18,7 @@ package im.vector.matrix.android.internal.crypto.verification
|
|||||||
|
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
|
import dagger.Lazy
|
||||||
import im.vector.matrix.android.api.MatrixCallback
|
import im.vector.matrix.android.api.MatrixCallback
|
||||||
import im.vector.matrix.android.api.auth.data.Credentials
|
import im.vector.matrix.android.api.auth.data.Credentials
|
||||||
import im.vector.matrix.android.api.session.crypto.sas.CancelCode
|
import im.vector.matrix.android.api.session.crypto.sas.CancelCode
|
||||||
@ -55,7 +56,7 @@ import kotlin.collections.HashMap
|
|||||||
@SessionScope
|
@SessionScope
|
||||||
internal class DefaultSasVerificationService @Inject constructor(private val credentials: Credentials,
|
internal class DefaultSasVerificationService @Inject constructor(private val credentials: Credentials,
|
||||||
private val cryptoStore: IMXCryptoStore,
|
private val cryptoStore: IMXCryptoStore,
|
||||||
private val myDeviceInfoHolder: MyDeviceInfoHolder,
|
private val myDeviceInfoHolder: Lazy<MyDeviceInfoHolder>,
|
||||||
private val deviceListManager: DeviceListManager,
|
private val deviceListManager: DeviceListManager,
|
||||||
private val setDeviceVerificationAction: SetDeviceVerificationAction,
|
private val setDeviceVerificationAction: SetDeviceVerificationAction,
|
||||||
private val sendToDeviceTask: SendToDeviceTask,
|
private val sendToDeviceTask: SendToDeviceTask,
|
||||||
@ -197,7 +198,7 @@ internal class DefaultSasVerificationService @Inject constructor(private val cre
|
|||||||
cryptoStore,
|
cryptoStore,
|
||||||
sendToDeviceTask,
|
sendToDeviceTask,
|
||||||
taskExecutor,
|
taskExecutor,
|
||||||
myDeviceInfoHolder.myDevice.fingerprint()!!,
|
myDeviceInfoHolder.get().myDevice.fingerprint()!!,
|
||||||
startReq.transactionID!!,
|
startReq.transactionID!!,
|
||||||
otherUserId)
|
otherUserId)
|
||||||
addTransaction(tx)
|
addTransaction(tx)
|
||||||
@ -366,7 +367,7 @@ internal class DefaultSasVerificationService @Inject constructor(private val cre
|
|||||||
cryptoStore,
|
cryptoStore,
|
||||||
sendToDeviceTask,
|
sendToDeviceTask,
|
||||||
taskExecutor,
|
taskExecutor,
|
||||||
myDeviceInfoHolder.myDevice.fingerprint()!!,
|
myDeviceInfoHolder.get().myDevice.fingerprint()!!,
|
||||||
txID,
|
txID,
|
||||||
userId,
|
userId,
|
||||||
deviceID)
|
deviceID)
|
||||||
|
@ -48,58 +48,7 @@ internal class DefaultPushRuleService @Inject constructor(
|
|||||||
|
|
||||||
override fun fetchPushRules(scope: String) {
|
override fun fetchPushRules(scope: String) {
|
||||||
pushRulesTask
|
pushRulesTask
|
||||||
.configureWith(Unit)
|
.configureWith(GetPushRulesTask.Params(scope))
|
||||||
.dispatchTo(object : MatrixCallback<GetPushRulesResponse> {
|
|
||||||
override fun onSuccess(data: GetPushRulesResponse) {
|
|
||||||
monarchy.runTransactionSync { realm ->
|
|
||||||
//clear existings?
|
|
||||||
//TODO
|
|
||||||
realm.where(PushRulesEntity::class.java)
|
|
||||||
.equalTo(PusherEntityFields.USER_ID, sessionParams.credentials.userId)
|
|
||||||
.findAll().deleteAllFromRealm()
|
|
||||||
|
|
||||||
val content = PushRulesEntity(sessionParams.credentials.userId, scope, "content")
|
|
||||||
data.global.content?.forEach { rule ->
|
|
||||||
PushRulesMapper.map(rule).also {
|
|
||||||
content.pushRules.add(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
realm.insertOrUpdate(content)
|
|
||||||
|
|
||||||
val override = PushRulesEntity(sessionParams.credentials.userId, scope, "override")
|
|
||||||
data.global.override?.forEach { rule ->
|
|
||||||
PushRulesMapper.map(rule).also {
|
|
||||||
override.pushRules.add(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
realm.insertOrUpdate(override)
|
|
||||||
|
|
||||||
val rooms = PushRulesEntity(sessionParams.credentials.userId, scope, "room")
|
|
||||||
data.global.room?.forEach { rule ->
|
|
||||||
PushRulesMapper.map(rule).also {
|
|
||||||
rooms.pushRules.add(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
realm.insertOrUpdate(rooms)
|
|
||||||
|
|
||||||
val senders = PushRulesEntity(sessionParams.credentials.userId, scope, "sender")
|
|
||||||
data.global.sender?.forEach { rule ->
|
|
||||||
PushRulesMapper.map(rule).also {
|
|
||||||
senders.pushRules.add(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
realm.insertOrUpdate(senders)
|
|
||||||
|
|
||||||
val underrides = PushRulesEntity(sessionParams.credentials.userId, scope, "underride")
|
|
||||||
data.global.underride?.forEach { rule ->
|
|
||||||
PushRulesMapper.map(rule).also {
|
|
||||||
underrides.pushRules.add(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
realm.insertOrUpdate(underrides)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.executeBy(taskExecutor)
|
.executeBy(taskExecutor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,22 +54,6 @@ internal class DefaultPusherService @Inject constructor(
|
|||||||
override fun refreshPushers() {
|
override fun refreshPushers() {
|
||||||
getPusherTask
|
getPusherTask
|
||||||
.configureWith(Unit)
|
.configureWith(Unit)
|
||||||
.dispatchTo(object : MatrixCallback<GetPushersResponse> {
|
|
||||||
override fun onSuccess(data: GetPushersResponse) {
|
|
||||||
monarchy.runTransactionSync { realm ->
|
|
||||||
//clear existings?
|
|
||||||
realm.where(PusherEntity::class.java)
|
|
||||||
.equalTo(PusherEntityFields.USER_ID, sessionParam.credentials.userId)
|
|
||||||
.findAll().deleteAllFromRealm()
|
|
||||||
data.pushers?.forEach { jsonPusher ->
|
|
||||||
jsonPusher.toEntity(sessionParam.credentials.userId).also {
|
|
||||||
it.state = PusherState.REGISTERED
|
|
||||||
realm.insertOrUpdate(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.executeBy(taskExecutor)
|
.executeBy(taskExecutor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,19 +16,81 @@
|
|||||||
package im.vector.matrix.android.internal.session.pushers
|
package im.vector.matrix.android.internal.session.pushers
|
||||||
|
|
||||||
import arrow.core.Try
|
import arrow.core.Try
|
||||||
|
import com.zhuinden.monarchy.Monarchy
|
||||||
|
import im.vector.matrix.android.api.auth.data.SessionParams
|
||||||
import im.vector.matrix.android.api.pushrules.rest.GetPushRulesResponse
|
import im.vector.matrix.android.api.pushrules.rest.GetPushRulesResponse
|
||||||
|
import im.vector.matrix.android.internal.database.mapper.PushRulesMapper
|
||||||
|
import im.vector.matrix.android.internal.database.model.PushRulesEntity
|
||||||
|
import im.vector.matrix.android.internal.database.model.PusherEntityFields
|
||||||
import im.vector.matrix.android.internal.network.executeRequest
|
import im.vector.matrix.android.internal.network.executeRequest
|
||||||
import im.vector.matrix.android.internal.task.Task
|
import im.vector.matrix.android.internal.task.Task
|
||||||
|
import im.vector.matrix.android.internal.util.tryTransactionSync
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
|
||||||
internal interface GetPushRulesTask : Task<Unit, GetPushRulesResponse>
|
internal interface GetPushRulesTask : Task<GetPushRulesTask.Params, Unit> {
|
||||||
|
|
||||||
internal class DefaultGetPushRulesTask @Inject constructor(private val pushRulesApi: PushRulesApi) : GetPushRulesTask {
|
data class Params(val scope: String)
|
||||||
|
|
||||||
override suspend fun execute(params: Unit): Try<GetPushRulesResponse> {
|
}
|
||||||
return executeRequest {
|
|
||||||
|
|
||||||
|
internal class DefaultGetPushRulesTask @Inject constructor(private val pushRulesApi: PushRulesApi,
|
||||||
|
private val monarchy: Monarchy,
|
||||||
|
private val sessionParams: SessionParams) : GetPushRulesTask {
|
||||||
|
|
||||||
|
override suspend fun execute(params: GetPushRulesTask.Params): Try<Unit> {
|
||||||
|
return executeRequest<GetPushRulesResponse> {
|
||||||
apiCall = pushRulesApi.getAllRules()
|
apiCall = pushRulesApi.getAllRules()
|
||||||
|
}.flatMap { response ->
|
||||||
|
val scope = params.scope
|
||||||
|
return monarchy.tryTransactionSync { realm ->
|
||||||
|
//clear existings?
|
||||||
|
//TODO
|
||||||
|
realm.where(PushRulesEntity::class.java)
|
||||||
|
.equalTo(PusherEntityFields.USER_ID, sessionParams.credentials.userId)
|
||||||
|
.findAll().deleteAllFromRealm()
|
||||||
|
|
||||||
|
val content = PushRulesEntity(sessionParams.credentials.userId, scope, "content")
|
||||||
|
response.global.content?.forEach { rule ->
|
||||||
|
PushRulesMapper.map(rule).also {
|
||||||
|
content.pushRules.add(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
realm.insertOrUpdate(content)
|
||||||
|
|
||||||
|
val override = PushRulesEntity(sessionParams.credentials.userId, scope, "override")
|
||||||
|
response.global.override?.forEach { rule ->
|
||||||
|
PushRulesMapper.map(rule).also {
|
||||||
|
override.pushRules.add(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
realm.insertOrUpdate(override)
|
||||||
|
|
||||||
|
val rooms = PushRulesEntity(sessionParams.credentials.userId, scope, "room")
|
||||||
|
response.global.room?.forEach { rule ->
|
||||||
|
PushRulesMapper.map(rule).also {
|
||||||
|
rooms.pushRules.add(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
realm.insertOrUpdate(rooms)
|
||||||
|
|
||||||
|
val senders = PushRulesEntity(sessionParams.credentials.userId, scope, "sender")
|
||||||
|
response.global.sender?.forEach { rule ->
|
||||||
|
PushRulesMapper.map(rule).also {
|
||||||
|
senders.pushRules.add(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
realm.insertOrUpdate(senders)
|
||||||
|
|
||||||
|
val underrides = PushRulesEntity(sessionParams.credentials.userId, scope, "underride")
|
||||||
|
response.global.underride?.forEach { rule ->
|
||||||
|
PushRulesMapper.map(rule).also {
|
||||||
|
underrides.pushRules.add(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
realm.insertOrUpdate(underrides)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -16,17 +16,39 @@
|
|||||||
package im.vector.matrix.android.internal.session.pushers
|
package im.vector.matrix.android.internal.session.pushers
|
||||||
|
|
||||||
import arrow.core.Try
|
import arrow.core.Try
|
||||||
|
import com.zhuinden.monarchy.Monarchy
|
||||||
|
import im.vector.matrix.android.api.auth.data.SessionParams
|
||||||
|
import im.vector.matrix.android.api.session.pushers.PusherState
|
||||||
|
import im.vector.matrix.android.internal.database.mapper.toEntity
|
||||||
|
import im.vector.matrix.android.internal.database.model.PusherEntity
|
||||||
|
import im.vector.matrix.android.internal.database.model.PusherEntityFields
|
||||||
import im.vector.matrix.android.internal.network.executeRequest
|
import im.vector.matrix.android.internal.network.executeRequest
|
||||||
import im.vector.matrix.android.internal.task.Task
|
import im.vector.matrix.android.internal.task.Task
|
||||||
|
import im.vector.matrix.android.internal.util.tryTransactionSync
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
internal interface GetPushersTask : Task<Unit, GetPushersResponse>
|
internal interface GetPushersTask : Task<Unit, Unit>
|
||||||
|
|
||||||
internal class DefaultGetPusherTask @Inject constructor(private val pushersAPI: PushersAPI) : GetPushersTask {
|
internal class DefaultGetPusherTask @Inject constructor(private val pushersAPI: PushersAPI,
|
||||||
|
private val monarchy: Monarchy,
|
||||||
|
private val sessionParams: SessionParams) : GetPushersTask {
|
||||||
|
|
||||||
override suspend fun execute(params: Unit): Try<GetPushersResponse> {
|
override suspend fun execute(params: Unit): Try<Unit> {
|
||||||
return executeRequest {
|
return executeRequest<GetPushersResponse> {
|
||||||
apiCall = pushersAPI.getPushers()
|
apiCall = pushersAPI.getPushers()
|
||||||
|
}.flatMap { response ->
|
||||||
|
monarchy.tryTransactionSync { realm ->
|
||||||
|
//clear existings?
|
||||||
|
realm.where(PusherEntity::class.java)
|
||||||
|
.equalTo(PusherEntityFields.USER_ID, sessionParams.credentials.userId)
|
||||||
|
.findAll().deleteAllFromRealm()
|
||||||
|
response.pushers?.forEach { jsonPusher ->
|
||||||
|
jsonPusher.toEntity(sessionParams.credentials.userId).also {
|
||||||
|
it.state = PusherState.REGISTERED
|
||||||
|
realm.insertOrUpdate(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -18,6 +18,7 @@ package im.vector.riotredesign.features.home.room.detail.timeline.action
|
|||||||
import com.airbnb.mvrx.*
|
import com.airbnb.mvrx.*
|
||||||
import com.squareup.inject.assisted.Assisted
|
import com.squareup.inject.assisted.Assisted
|
||||||
import com.squareup.inject.assisted.AssistedInject
|
import com.squareup.inject.assisted.AssistedInject
|
||||||
|
import dagger.Lazy
|
||||||
import im.vector.matrix.android.api.session.Session
|
import im.vector.matrix.android.api.session.Session
|
||||||
import im.vector.matrix.android.api.session.events.model.EventType
|
import im.vector.matrix.android.api.session.events.model.EventType
|
||||||
import im.vector.matrix.android.api.session.events.model.toModel
|
import im.vector.matrix.android.api.session.events.model.toModel
|
||||||
@ -84,7 +85,7 @@ data class MessageActionState(
|
|||||||
*/
|
*/
|
||||||
class MessageActionsViewModel @AssistedInject constructor(@Assisted
|
class MessageActionsViewModel @AssistedInject constructor(@Assisted
|
||||||
initialState: MessageActionState,
|
initialState: MessageActionState,
|
||||||
private val eventHtmlRenderer: EventHtmlRenderer,
|
private val eventHtmlRenderer: Lazy<EventHtmlRenderer>,
|
||||||
session: Session,
|
session: Session,
|
||||||
private val noticeEventFormatter: NoticeEventFormatter
|
private val noticeEventFormatter: NoticeEventFormatter
|
||||||
) : VectorViewModel<MessageActionState>(initialState) {
|
) : VectorViewModel<MessageActionState>(initialState) {
|
||||||
@ -121,7 +122,7 @@ class MessageActionsViewModel @AssistedInject constructor(@Assisted
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun resolveBody(state: MessageActionState): CharSequence? {
|
fun resolveBody(state: MessageActionState): CharSequence? {
|
||||||
return state.messageBody(eventHtmlRenderer, noticeEventFormatter)
|
return state.messageBody(eventHtmlRenderer.get(), noticeEventFormatter)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -23,12 +23,20 @@ import android.text.style.ClickableSpan
|
|||||||
import android.text.style.ForegroundColorSpan
|
import android.text.style.ForegroundColorSpan
|
||||||
import android.text.style.RelativeSizeSpan
|
import android.text.style.RelativeSizeSpan
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import dagger.Lazy
|
||||||
import im.vector.matrix.android.api.permalinks.MatrixLinkify
|
import im.vector.matrix.android.api.permalinks.MatrixLinkify
|
||||||
import im.vector.matrix.android.api.permalinks.MatrixPermalinkSpan
|
import im.vector.matrix.android.api.permalinks.MatrixPermalinkSpan
|
||||||
import im.vector.matrix.android.api.session.events.model.RelationType
|
import im.vector.matrix.android.api.session.events.model.RelationType
|
||||||
import im.vector.matrix.android.api.session.events.model.toModel
|
import im.vector.matrix.android.api.session.events.model.toModel
|
||||||
import im.vector.matrix.android.api.session.room.model.EditAggregatedSummary
|
import im.vector.matrix.android.api.session.room.model.EditAggregatedSummary
|
||||||
import im.vector.matrix.android.api.session.room.model.message.*
|
import im.vector.matrix.android.api.session.room.model.message.MessageAudioContent
|
||||||
|
import im.vector.matrix.android.api.session.room.model.message.MessageContent
|
||||||
|
import im.vector.matrix.android.api.session.room.model.message.MessageEmoteContent
|
||||||
|
import im.vector.matrix.android.api.session.room.model.message.MessageFileContent
|
||||||
|
import im.vector.matrix.android.api.session.room.model.message.MessageImageContent
|
||||||
|
import im.vector.matrix.android.api.session.room.model.message.MessageNoticeContent
|
||||||
|
import im.vector.matrix.android.api.session.room.model.message.MessageTextContent
|
||||||
|
import im.vector.matrix.android.api.session.room.model.message.MessageVideoContent
|
||||||
import im.vector.matrix.android.api.session.room.send.SendState
|
import im.vector.matrix.android.api.session.room.send.SendState
|
||||||
import im.vector.matrix.android.api.session.room.timeline.TimelineEvent
|
import im.vector.matrix.android.api.session.room.timeline.TimelineEvent
|
||||||
import im.vector.riotredesign.EmojiCompatFontProvider
|
import im.vector.riotredesign.EmojiCompatFontProvider
|
||||||
@ -42,7 +50,18 @@ import im.vector.riotredesign.features.home.AvatarRenderer
|
|||||||
import im.vector.riotredesign.features.home.room.detail.timeline.TimelineEventController
|
import im.vector.riotredesign.features.home.room.detail.timeline.TimelineEventController
|
||||||
import im.vector.riotredesign.features.home.room.detail.timeline.helper.ContentUploadStateTrackerBinder
|
import im.vector.riotredesign.features.home.room.detail.timeline.helper.ContentUploadStateTrackerBinder
|
||||||
import im.vector.riotredesign.features.home.room.detail.timeline.helper.TimelineMediaSizeProvider
|
import im.vector.riotredesign.features.home.room.detail.timeline.helper.TimelineMediaSizeProvider
|
||||||
import im.vector.riotredesign.features.home.room.detail.timeline.item.*
|
import im.vector.riotredesign.features.home.room.detail.timeline.item.BlankItem_
|
||||||
|
import im.vector.riotredesign.features.home.room.detail.timeline.item.DefaultItem
|
||||||
|
import im.vector.riotredesign.features.home.room.detail.timeline.item.DefaultItem_
|
||||||
|
import im.vector.riotredesign.features.home.room.detail.timeline.item.MessageFileItem
|
||||||
|
import im.vector.riotredesign.features.home.room.detail.timeline.item.MessageFileItem_
|
||||||
|
import im.vector.riotredesign.features.home.room.detail.timeline.item.MessageImageVideoItem
|
||||||
|
import im.vector.riotredesign.features.home.room.detail.timeline.item.MessageImageVideoItem_
|
||||||
|
import im.vector.riotredesign.features.home.room.detail.timeline.item.MessageInformationData
|
||||||
|
import im.vector.riotredesign.features.home.room.detail.timeline.item.MessageTextItem
|
||||||
|
import im.vector.riotredesign.features.home.room.detail.timeline.item.MessageTextItem_
|
||||||
|
import im.vector.riotredesign.features.home.room.detail.timeline.item.RedactedMessageItem
|
||||||
|
import im.vector.riotredesign.features.home.room.detail.timeline.item.RedactedMessageItem_
|
||||||
import im.vector.riotredesign.features.home.room.detail.timeline.util.MessageInformationDataFactory
|
import im.vector.riotredesign.features.home.room.detail.timeline.util.MessageInformationDataFactory
|
||||||
import im.vector.riotredesign.features.html.EventHtmlRenderer
|
import im.vector.riotredesign.features.html.EventHtmlRenderer
|
||||||
import im.vector.riotredesign.features.media.ImageContentRenderer
|
import im.vector.riotredesign.features.media.ImageContentRenderer
|
||||||
@ -54,7 +73,7 @@ class MessageItemFactory @Inject constructor(
|
|||||||
private val avatarRenderer: AvatarRenderer,
|
private val avatarRenderer: AvatarRenderer,
|
||||||
private val colorProvider: ColorProvider,
|
private val colorProvider: ColorProvider,
|
||||||
private val timelineMediaSizeProvider: TimelineMediaSizeProvider,
|
private val timelineMediaSizeProvider: TimelineMediaSizeProvider,
|
||||||
private val htmlRenderer: EventHtmlRenderer,
|
private val htmlRenderer: Lazy<EventHtmlRenderer>,
|
||||||
private val stringProvider: StringProvider,
|
private val stringProvider: StringProvider,
|
||||||
private val emojiCompatFontProvider: EmojiCompatFontProvider,
|
private val emojiCompatFontProvider: EmojiCompatFontProvider,
|
||||||
private val imageContentRenderer: ImageContentRenderer,
|
private val imageContentRenderer: ImageContentRenderer,
|
||||||
@ -78,9 +97,9 @@ class MessageItemFactory @Inject constructor(
|
|||||||
|
|
||||||
val messageContent: MessageContent =
|
val messageContent: MessageContent =
|
||||||
event.annotations?.editSummary?.aggregatedContent?.toModel()
|
event.annotations?.editSummary?.aggregatedContent?.toModel()
|
||||||
?: event.root.getClearContent().toModel()
|
?: event.root.getClearContent().toModel()
|
||||||
?: //Malformed content, we should echo something on screen
|
?: //Malformed content, we should echo something on screen
|
||||||
return DefaultItem_().text(stringProvider.getString(R.string.malformed_message))
|
return DefaultItem_().text(stringProvider.getString(R.string.malformed_message))
|
||||||
|
|
||||||
if (messageContent.relatesTo?.type == RelationType.REPLACE) {
|
if (messageContent.relatesTo?.type == RelationType.REPLACE) {
|
||||||
// ignore replace event, the targeted id is already edited
|
// ignore replace event, the targeted id is already edited
|
||||||
@ -90,16 +109,16 @@ class MessageItemFactory @Inject constructor(
|
|||||||
// val ev = all.toModel<Event>()
|
// val ev = all.toModel<Event>()
|
||||||
return when (messageContent) {
|
return when (messageContent) {
|
||||||
is MessageEmoteContent -> buildEmoteMessageItem(messageContent,
|
is MessageEmoteContent -> buildEmoteMessageItem(messageContent,
|
||||||
informationData,
|
informationData,
|
||||||
event.annotations?.editSummary,
|
event.annotations?.editSummary,
|
||||||
highlight,
|
highlight,
|
||||||
callback)
|
callback)
|
||||||
is MessageTextContent -> buildTextMessageItem(event.sendState,
|
is MessageTextContent -> buildTextMessageItem(event.sendState,
|
||||||
messageContent,
|
messageContent,
|
||||||
informationData,
|
informationData,
|
||||||
event.annotations?.editSummary,
|
event.annotations?.editSummary,
|
||||||
highlight,
|
highlight,
|
||||||
callback
|
callback
|
||||||
)
|
)
|
||||||
is MessageImageContent -> buildImageMessageItem(messageContent, informationData, highlight, callback)
|
is MessageImageContent -> buildImageMessageItem(messageContent, informationData, highlight, callback)
|
||||||
is MessageNoticeContent -> buildNoticeMessageItem(messageContent, informationData, highlight, callback)
|
is MessageNoticeContent -> buildNoticeMessageItem(messageContent, informationData, highlight, callback)
|
||||||
@ -133,7 +152,7 @@ class MessageItemFactory @Inject constructor(
|
|||||||
}))
|
}))
|
||||||
.longClickListener { view ->
|
.longClickListener { view ->
|
||||||
return@longClickListener callback?.onEventLongClicked(informationData, messageContent, view)
|
return@longClickListener callback?.onEventLongClicked(informationData, messageContent, view)
|
||||||
?: false
|
?: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -156,7 +175,7 @@ class MessageItemFactory @Inject constructor(
|
|||||||
}))
|
}))
|
||||||
.longClickListener { view ->
|
.longClickListener { view ->
|
||||||
return@longClickListener callback?.onEventLongClicked(informationData, messageContent, view)
|
return@longClickListener callback?.onEventLongClicked(informationData, messageContent, view)
|
||||||
?: false
|
?: false
|
||||||
}
|
}
|
||||||
.clickListener(
|
.clickListener(
|
||||||
DebouncedClickListener(View.OnClickListener { _ ->
|
DebouncedClickListener(View.OnClickListener { _ ->
|
||||||
@ -208,7 +227,7 @@ class MessageItemFactory @Inject constructor(
|
|||||||
}))
|
}))
|
||||||
.longClickListener { view ->
|
.longClickListener { view ->
|
||||||
return@longClickListener callback?.onEventLongClicked(informationData, messageContent, view)
|
return@longClickListener callback?.onEventLongClicked(informationData, messageContent, view)
|
||||||
?: false
|
?: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -251,7 +270,7 @@ class MessageItemFactory @Inject constructor(
|
|||||||
.clickListener { view -> callback?.onVideoMessageClicked(messageContent, videoData, view) }
|
.clickListener { view -> callback?.onVideoMessageClicked(messageContent, videoData, view) }
|
||||||
.longClickListener { view ->
|
.longClickListener { view ->
|
||||||
return@longClickListener callback?.onEventLongClicked(informationData, messageContent, view)
|
return@longClickListener callback?.onEventLongClicked(informationData, messageContent, view)
|
||||||
?: false
|
?: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -263,7 +282,7 @@ class MessageItemFactory @Inject constructor(
|
|||||||
callback: TimelineEventController.Callback?): MessageTextItem? {
|
callback: TimelineEventController.Callback?): MessageTextItem? {
|
||||||
|
|
||||||
val bodyToUse = messageContent.formattedBody?.let {
|
val bodyToUse = messageContent.formattedBody?.let {
|
||||||
htmlRenderer.render(it.trim())
|
htmlRenderer.get().render(it.trim())
|
||||||
} ?: messageContent.body
|
} ?: messageContent.body
|
||||||
|
|
||||||
val linkifiedBody = linkifyBody(bodyToUse, callback)
|
val linkifiedBody = linkifyBody(bodyToUse, callback)
|
||||||
@ -291,7 +310,7 @@ class MessageItemFactory @Inject constructor(
|
|||||||
}))
|
}))
|
||||||
.longClickListener { view ->
|
.longClickListener { view ->
|
||||||
return@longClickListener callback?.onEventLongClicked(informationData, messageContent, view)
|
return@longClickListener callback?.onEventLongClicked(informationData, messageContent, view)
|
||||||
?: false
|
?: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -323,9 +342,9 @@ class MessageItemFactory @Inject constructor(
|
|||||||
//nop
|
//nop
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
editStart,
|
editStart,
|
||||||
editEnd,
|
editEnd,
|
||||||
Spanned.SPAN_INCLUSIVE_EXCLUSIVE)
|
Spanned.SPAN_INCLUSIVE_EXCLUSIVE)
|
||||||
return spannable
|
return spannable
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -361,7 +380,7 @@ class MessageItemFactory @Inject constructor(
|
|||||||
}))
|
}))
|
||||||
.longClickListener { view ->
|
.longClickListener { view ->
|
||||||
return@longClickListener callback?.onEventLongClicked(informationData, messageContent, view)
|
return@longClickListener callback?.onEventLongClicked(informationData, messageContent, view)
|
||||||
?: false
|
?: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -397,7 +416,7 @@ class MessageItemFactory @Inject constructor(
|
|||||||
}))
|
}))
|
||||||
.longClickListener { view ->
|
.longClickListener { view ->
|
||||||
return@longClickListener callback?.onEventLongClicked(informationData, messageContent, view)
|
return@longClickListener callback?.onEventLongClicked(informationData, messageContent, view)
|
||||||
?: false
|
?: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@ import android.text.TextUtils
|
|||||||
import android.util.Pair
|
import android.util.Pair
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
import im.vector.riotredesign.R
|
import im.vector.riotredesign.R
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
@ -75,7 +76,7 @@ object VectorLocale {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// init the known locales in background, using kotlin coroutines
|
// init the known locales in background, using kotlin coroutines
|
||||||
GlobalScope.launch {
|
GlobalScope.launch(Dispatchers.IO) {
|
||||||
initApplicationLocales(context)
|
initApplicationLocales(context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user