forked from GitHub-Mirror/riotX-android
Show preview for notice events in context menu + fix merge issues
This commit is contained in:
parent
5cf9deb329
commit
651d0472cd
@ -85,7 +85,7 @@ android {
|
|||||||
resValue "bool", "debug_mode", "true"
|
resValue "bool", "debug_mode", "true"
|
||||||
buildConfigField "boolean", "LOW_PRIVACY_LOG_ENABLE", "false"
|
buildConfigField "boolean", "LOW_PRIVACY_LOG_ENABLE", "false"
|
||||||
buildConfigField "boolean", "SHOW_HIDDEN_TIMELINE_EVENTS", "false"
|
buildConfigField "boolean", "SHOW_HIDDEN_TIMELINE_EVENTS", "false"
|
||||||
|
|
||||||
signingConfig signingConfigs.debug
|
signingConfig signingConfigs.debug
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ class HomeDrawerFragment : VectorBaseFragment() {
|
|||||||
|
|
||||||
// Debug menu
|
// Debug menu
|
||||||
homeDrawerHeaderDebugView.setOnClickListener {
|
homeDrawerHeaderDebugView.setOnClickListener {
|
||||||
navigator.openDebug()
|
navigator.openDebug(requireActivity())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package im.vector.riotredesign.features.home.room.detail.timeline.action
|
package im.vector.riotredesign.features.home.room.detail.timeline.action
|
||||||
|
|
||||||
|
import com.airbnb.mvrx.FragmentViewModelContext
|
||||||
import com.airbnb.mvrx.MvRxState
|
import com.airbnb.mvrx.MvRxState
|
||||||
import com.airbnb.mvrx.MvRxViewModelFactory
|
import com.airbnb.mvrx.MvRxViewModelFactory
|
||||||
import com.airbnb.mvrx.ViewModelContext
|
import com.airbnb.mvrx.ViewModelContext
|
||||||
@ -25,8 +26,10 @@ import im.vector.matrix.android.api.session.room.model.message.MessageContent
|
|||||||
import im.vector.matrix.android.api.session.room.model.message.MessageTextContent
|
import im.vector.matrix.android.api.session.room.model.message.MessageTextContent
|
||||||
import im.vector.matrix.android.api.session.room.model.message.MessageType
|
import im.vector.matrix.android.api.session.room.model.message.MessageType
|
||||||
import im.vector.riotredesign.core.platform.VectorViewModel
|
import im.vector.riotredesign.core.platform.VectorViewModel
|
||||||
|
import im.vector.riotredesign.features.home.room.detail.timeline.format.NoticeEventFormatter
|
||||||
import org.commonmark.parser.Parser
|
import org.commonmark.parser.Parser
|
||||||
import org.koin.android.ext.android.get
|
import org.koin.android.ext.android.get
|
||||||
|
import org.koin.core.parameter.parametersOf
|
||||||
import ru.noties.markwon.Markwon
|
import ru.noties.markwon.Markwon
|
||||||
import ru.noties.markwon.html.HtmlPlugin
|
import ru.noties.markwon.html.HtmlPlugin
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
@ -53,28 +56,45 @@ class MessageActionsViewModel(initialState: MessageActionState) : VectorViewMode
|
|||||||
|
|
||||||
override fun initialState(viewModelContext: ViewModelContext): MessageActionState? {
|
override fun initialState(viewModelContext: ViewModelContext): MessageActionState? {
|
||||||
val currentSession = viewModelContext.activity.get<Session>()
|
val currentSession = viewModelContext.activity.get<Session>()
|
||||||
|
val fragment = (viewModelContext as? FragmentViewModelContext)?.fragment
|
||||||
|
val noticeFormatter = fragment?.get<NoticeEventFormatter>(parameters = { parametersOf(fragment) })
|
||||||
val parcel = viewModelContext.args as TimelineEventFragmentArgs
|
val parcel = viewModelContext.args as TimelineEventFragmentArgs
|
||||||
|
|
||||||
val dateFormat = SimpleDateFormat("EEE, d MMM yyyy HH:mm", Locale.getDefault())
|
val dateFormat = SimpleDateFormat("EEE, d MMM yyyy HH:mm", Locale.getDefault())
|
||||||
|
|
||||||
val event = currentSession.getRoom(parcel.roomId)?.getTimeLineEvent(parcel.eventId)
|
val event = currentSession.getRoom(parcel.roomId)?.getTimeLineEvent(parcel.eventId)
|
||||||
|
var body: CharSequence? = null
|
||||||
|
val originTs = event?.root?.originServerTs
|
||||||
return if (event != null) {
|
return if (event != null) {
|
||||||
val messageContent: MessageContent? = event.annotations?.editSummary?.aggregatedContent?.toModel()
|
when (event.root.type) {
|
||||||
?: event.root.content.toModel()
|
EventType.MESSAGE -> {
|
||||||
val originTs = event.root.originServerTs
|
val messageContent: MessageContent? = event.annotations?.editSummary?.aggregatedContent?.toModel()
|
||||||
var body: CharSequence? = messageContent?.body
|
?: event.root.content.toModel()
|
||||||
if (messageContent is MessageTextContent && messageContent.format == MessageType.FORMAT_MATRIX_HTML) {
|
body = messageContent?.body
|
||||||
val parser = Parser.builder().build()
|
if (messageContent is MessageTextContent && messageContent.format == MessageType.FORMAT_MATRIX_HTML) {
|
||||||
val document = parser.parse(messageContent.formattedBody ?: messageContent.body)
|
val parser = Parser.builder().build()
|
||||||
body = Markwon.builder(viewModelContext.activity)
|
val document = parser.parse(messageContent.formattedBody
|
||||||
.usePlugin(HtmlPlugin.create()).build().render(document)
|
?: messageContent.body)
|
||||||
|
body = Markwon.builder(viewModelContext.activity)
|
||||||
|
.usePlugin(HtmlPlugin.create()).build().render(document)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EventType.STATE_ROOM_NAME,
|
||||||
|
EventType.STATE_ROOM_TOPIC,
|
||||||
|
EventType.STATE_ROOM_MEMBER,
|
||||||
|
EventType.STATE_HISTORY_VISIBILITY,
|
||||||
|
EventType.CALL_INVITE,
|
||||||
|
EventType.CALL_HANGUP,
|
||||||
|
EventType.CALL_ANSWER -> {
|
||||||
|
body = noticeFormatter?.format(event)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
MessageActionState(
|
MessageActionState(
|
||||||
userId = event.root.sender ?: "",
|
userId = event.root.sender ?: "",
|
||||||
senderName = parcel.informationData.memberName.toString(),
|
senderName = parcel.informationData.memberName?.toString() ?: "",
|
||||||
messageBody = body,
|
messageBody = body,
|
||||||
ts = dateFormat.format(Date(originTs ?: 0)),
|
ts = dateFormat.format(Date(originTs ?: 0)),
|
||||||
showPreview = event.root.type == EventType.MESSAGE,
|
showPreview = body != null,
|
||||||
canReact = event.root.type == EventType.MESSAGE,
|
canReact = event.root.type == EventType.MESSAGE,
|
||||||
senderAvatarPath = currentSession.contentUrlResolver().resolveFullSize(parcel.informationData.avatarUrl)
|
senderAvatarPath = currentSession.contentUrlResolver().resolveFullSize(parcel.informationData.avatarUrl)
|
||||||
)
|
)
|
||||||
|
@ -52,7 +52,7 @@ class DefaultNavigator : Navigator {
|
|||||||
context.startActivity(intent)
|
context.startActivity(intent)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun openDebug() {
|
override fun openDebug(context: Context) {
|
||||||
activity.startActivity(Intent(activity, DebugMenuActivity::class.java))
|
context.startActivity(Intent(context, DebugMenuActivity::class.java))
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -29,6 +29,6 @@ interface Navigator {
|
|||||||
|
|
||||||
fun openSettings(context: Context)
|
fun openSettings(context: Context)
|
||||||
|
|
||||||
fun openDebug()
|
fun openDebug(context: Context)
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user