forked from GitHub-Mirror/riotX-android
Merge branch 'feature/timeline_events' into develop
This commit is contained in:
commit
4a6b28aca1
@ -35,15 +35,6 @@ android {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
configurations.all { strategy ->
|
|
||||||
strategy.resolutionStrategy.eachDependency { details ->
|
|
||||||
if (details.requested.group == 'com.android.support') {
|
|
||||||
details.useVersion "28.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
|
||||||
def epoxy_version = "3.0.0"
|
def epoxy_version = "3.0.0"
|
||||||
|
@ -3,6 +3,7 @@ package im.vector.riotredesign.core.di
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Context.MODE_PRIVATE
|
import android.content.Context.MODE_PRIVATE
|
||||||
import im.vector.riotredesign.core.resources.LocaleProvider
|
import im.vector.riotredesign.core.resources.LocaleProvider
|
||||||
|
import im.vector.riotredesign.core.resources.StringProvider
|
||||||
import im.vector.riotredesign.features.home.room.list.RoomSelectionRepository
|
import im.vector.riotredesign.features.home.room.list.RoomSelectionRepository
|
||||||
import org.koin.dsl.module.module
|
import org.koin.dsl.module.module
|
||||||
|
|
||||||
@ -14,6 +15,10 @@ class AppModule(private val context: Context) {
|
|||||||
LocaleProvider(context.resources)
|
LocaleProvider(context.resources)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
single {
|
||||||
|
StringProvider(context.resources)
|
||||||
|
}
|
||||||
|
|
||||||
single {
|
single {
|
||||||
context.getSharedPreferences("im.vector.riot", MODE_PRIVATE)
|
context.getSharedPreferences("im.vector.riot", MODE_PRIVATE)
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
package im.vector.riotredesign.core.resources
|
||||||
|
|
||||||
|
import android.content.res.Resources
|
||||||
|
import androidx.annotation.NonNull
|
||||||
|
import androidx.annotation.StringRes
|
||||||
|
|
||||||
|
class StringProvider(private val resources: Resources) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a localized string from the application's package's
|
||||||
|
* default string table.
|
||||||
|
*
|
||||||
|
* @param resId Resource id for the string
|
||||||
|
* @return The string data associated with the resource, stripped of styled
|
||||||
|
* text information.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
fun getString(@StringRes resId: Int): String {
|
||||||
|
return resources.getString(resId)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a localized formatted string from the application's package's
|
||||||
|
* default string table, substituting the format arguments as defined in
|
||||||
|
* [java.util.Formatter] and [java.lang.String.format].
|
||||||
|
*
|
||||||
|
* @param resId Resource id for the format string
|
||||||
|
* @param formatArgs The format arguments that will be used for
|
||||||
|
* substitution.
|
||||||
|
* @return The string data associated with the resource, formatted and
|
||||||
|
* stripped of styled text information.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
fun getString(@StringRes resId: Int, vararg formatArgs: Any?): String {
|
||||||
|
return resources.getString(resId, *formatArgs)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -29,7 +29,7 @@ class HomeActivity : RiotActivity(), ToolbarConfigurable {
|
|||||||
private val homeNavigator by inject<HomeNavigator>()
|
private val homeNavigator by inject<HomeNavigator>()
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
loadKoinModules(listOf(HomeModule(this).definition))
|
loadKoinModules(listOf(HomeModule().definition))
|
||||||
homeNavigator.activity = this
|
homeNavigator.activity = this
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_home)
|
setContentView(R.layout.activity_home)
|
||||||
|
@ -2,13 +2,17 @@ package im.vector.riotredesign.features.home
|
|||||||
|
|
||||||
import im.vector.riotredesign.features.home.group.SelectedGroupHolder
|
import im.vector.riotredesign.features.home.group.SelectedGroupHolder
|
||||||
import im.vector.riotredesign.features.home.room.VisibleRoomHolder
|
import im.vector.riotredesign.features.home.room.VisibleRoomHolder
|
||||||
|
import im.vector.riotredesign.features.home.room.detail.timeline.DefaultItemFactory
|
||||||
import im.vector.riotredesign.features.home.room.detail.timeline.MessageItemFactory
|
import im.vector.riotredesign.features.home.room.detail.timeline.MessageItemFactory
|
||||||
import im.vector.riotredesign.features.home.room.detail.timeline.TextItemFactory
|
import im.vector.riotredesign.features.home.room.detail.timeline.RoomMemberItemFactory
|
||||||
|
import im.vector.riotredesign.features.home.room.detail.timeline.RoomNameItemFactory
|
||||||
|
import im.vector.riotredesign.features.home.room.detail.timeline.RoomTopicItemFactory
|
||||||
import im.vector.riotredesign.features.home.room.detail.timeline.TimelineDateFormatter
|
import im.vector.riotredesign.features.home.room.detail.timeline.TimelineDateFormatter
|
||||||
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.TimelineItemFactory
|
||||||
import org.koin.dsl.module.module
|
import org.koin.dsl.module.module
|
||||||
|
|
||||||
class HomeModule(private val homeActivity: HomeActivity) {
|
class HomeModule {
|
||||||
|
|
||||||
val definition = module(override = true) {
|
val definition = module(override = true) {
|
||||||
|
|
||||||
@ -21,7 +25,23 @@ class HomeModule(private val homeActivity: HomeActivity) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
single {
|
single {
|
||||||
TextItemFactory()
|
RoomNameItemFactory(get())
|
||||||
|
}
|
||||||
|
|
||||||
|
single {
|
||||||
|
RoomTopicItemFactory(get())
|
||||||
|
}
|
||||||
|
|
||||||
|
single {
|
||||||
|
RoomMemberItemFactory(get())
|
||||||
|
}
|
||||||
|
|
||||||
|
single {
|
||||||
|
DefaultItemFactory()
|
||||||
|
}
|
||||||
|
|
||||||
|
single {
|
||||||
|
TimelineItemFactory(get(), get(), get(), get(), get())
|
||||||
}
|
}
|
||||||
|
|
||||||
single {
|
single {
|
||||||
@ -29,7 +49,7 @@ class HomeModule(private val homeActivity: HomeActivity) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
factory { (roomId: String) ->
|
factory { (roomId: String) ->
|
||||||
TimelineEventController(roomId, get(), get(), get())
|
TimelineEventController(roomId, get(), get())
|
||||||
}
|
}
|
||||||
|
|
||||||
single {
|
single {
|
||||||
|
@ -4,7 +4,7 @@ import im.vector.riotredesign.R
|
|||||||
import im.vector.riotredesign.core.epoxy.KotlinModel
|
import im.vector.riotredesign.core.epoxy.KotlinModel
|
||||||
|
|
||||||
class BlankItem
|
class BlankItem
|
||||||
: KotlinModel(R.layout.item_event_blank) {
|
: KotlinModel(R.layout.item_timeline_event_blank) {
|
||||||
|
|
||||||
override fun bind() {
|
override fun bind() {
|
||||||
//no-op
|
//no-op
|
||||||
|
@ -6,7 +6,7 @@ import im.vector.riotredesign.core.epoxy.KotlinModel
|
|||||||
|
|
||||||
data class DaySeparatorItem(
|
data class DaySeparatorItem(
|
||||||
val formattedDay: CharSequence
|
val formattedDay: CharSequence
|
||||||
) : KotlinModel(R.layout.item_event_day_separator) {
|
) : KotlinModel(R.layout.item_timeline_event_day_separator) {
|
||||||
|
|
||||||
private val dayTextView by bind<TextView>(R.id.itemDayTextView)
|
private val dayTextView by bind<TextView>(R.id.itemDayTextView)
|
||||||
|
|
||||||
|
@ -4,9 +4,9 @@ import android.widget.TextView
|
|||||||
import im.vector.riotredesign.R
|
import im.vector.riotredesign.R
|
||||||
import im.vector.riotredesign.core.epoxy.KotlinModel
|
import im.vector.riotredesign.core.epoxy.KotlinModel
|
||||||
|
|
||||||
class TextItem(
|
class DefaultItem(
|
||||||
val text: CharSequence? = null
|
val text: CharSequence? = null
|
||||||
) : KotlinModel(R.layout.item_event_text) {
|
) : KotlinModel(R.layout.item_timeline_event_default) {
|
||||||
|
|
||||||
private val messageView by bind<TextView>(R.id.stateMessageView)
|
private val messageView by bind<TextView>(R.id.stateMessageView)
|
||||||
|
|
@ -2,11 +2,11 @@ package im.vector.riotredesign.features.home.room.detail.timeline
|
|||||||
|
|
||||||
import im.vector.matrix.android.api.session.events.model.TimelineEvent
|
import im.vector.matrix.android.api.session.events.model.TimelineEvent
|
||||||
|
|
||||||
class TextItemFactory {
|
class DefaultItemFactory {
|
||||||
|
|
||||||
fun create(event: TimelineEvent): TextItem? {
|
fun create(event: TimelineEvent): DefaultItem? {
|
||||||
val text = "${event.root.type} events are not yet handled"
|
val text = "${event.root.type} events are not yet handled"
|
||||||
return TextItem(text = text)
|
return DefaultItem(text = text)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -14,7 +14,7 @@ class MessageItem(
|
|||||||
val avatarUrl: String?,
|
val avatarUrl: String?,
|
||||||
val memberName: CharSequence? = null,
|
val memberName: CharSequence? = null,
|
||||||
val showInformation: Boolean = true
|
val showInformation: Boolean = true
|
||||||
) : KotlinModel(R.layout.item_event_message) {
|
) : KotlinModel(R.layout.item_timeline_event_message) {
|
||||||
|
|
||||||
private val avatarImageView by bind<ImageView>(R.id.messageAvatarImageView)
|
private val avatarImageView by bind<ImageView>(R.id.messageAvatarImageView)
|
||||||
private val memberNameView by bind<TextView>(R.id.messageMemberNameView)
|
private val memberNameView by bind<TextView>(R.id.messageMemberNameView)
|
||||||
|
@ -4,10 +4,11 @@ import android.text.SpannableStringBuilder
|
|||||||
import android.text.util.Linkify
|
import android.text.util.Linkify
|
||||||
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.EventType
|
||||||
import im.vector.matrix.android.api.session.events.model.TimelineEvent
|
import im.vector.matrix.android.api.session.events.model.TimelineEvent
|
||||||
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.MessageContent
|
import im.vector.matrix.android.api.session.room.model.MessageContent
|
||||||
import org.threeten.bp.LocalDateTime
|
import im.vector.riotredesign.core.extensions.localDateTime
|
||||||
|
|
||||||
class MessageItemFactory(private val timelineDateFormatter: TimelineDateFormatter) {
|
class MessageItemFactory(private val timelineDateFormatter: TimelineDateFormatter) {
|
||||||
|
|
||||||
@ -15,8 +16,6 @@ class MessageItemFactory(private val timelineDateFormatter: TimelineDateFormatte
|
|||||||
|
|
||||||
fun create(event: TimelineEvent,
|
fun create(event: TimelineEvent,
|
||||||
nextEvent: TimelineEvent?,
|
nextEvent: TimelineEvent?,
|
||||||
addDaySeparator: Boolean,
|
|
||||||
date: LocalDateTime,
|
|
||||||
callback: TimelineEventController.Callback?
|
callback: TimelineEventController.Callback?
|
||||||
): MessageItem? {
|
): MessageItem? {
|
||||||
|
|
||||||
@ -26,7 +25,17 @@ class MessageItemFactory(private val timelineDateFormatter: TimelineDateFormatte
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
val nextRoomMember = nextEvent?.roomMember
|
val nextRoomMember = nextEvent?.roomMember
|
||||||
if (addDaySeparator || nextRoomMember != roomMember) {
|
|
||||||
|
val date = event.root.localDateTime()
|
||||||
|
val nextDate = nextEvent?.root?.localDateTime()
|
||||||
|
val addDaySeparator = date.toLocalDate() != nextDate?.toLocalDate()
|
||||||
|
val isNextMessageReceivedMoreThanOneHourAgo = nextDate?.isBefore(date.minusMinutes(60))
|
||||||
|
?: false
|
||||||
|
|
||||||
|
if (addDaySeparator
|
||||||
|
|| nextRoomMember != roomMember
|
||||||
|
|| nextEvent.root.type != EventType.MESSAGE
|
||||||
|
|| isNextMessageReceivedMoreThanOneHourAgo) {
|
||||||
messagesDisplayedWithInformation.add(event.root.eventId)
|
messagesDisplayedWithInformation.add(event.root.eventId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,21 @@
|
|||||||
|
package im.vector.riotredesign.features.home.room.detail.timeline
|
||||||
|
|
||||||
|
import android.widget.ImageView
|
||||||
|
import android.widget.TextView
|
||||||
|
import im.vector.riotredesign.R
|
||||||
|
import im.vector.riotredesign.core.epoxy.KotlinModel
|
||||||
|
import im.vector.riotredesign.features.home.AvatarRenderer
|
||||||
|
|
||||||
|
class NoticeItem(private val noticeText: CharSequence? = null,
|
||||||
|
private val avatarUrl: String?,
|
||||||
|
private val memberName: CharSequence? = null)
|
||||||
|
: KotlinModel(R.layout.item_timeline_event_notice) {
|
||||||
|
|
||||||
|
private val avatarImageView by bind<ImageView>(R.id.itemNoticeAvatarView)
|
||||||
|
private val noticeTextView by bind<TextView>(R.id.itemNoticeTextView)
|
||||||
|
|
||||||
|
override fun bind() {
|
||||||
|
noticeTextView.text = noticeText
|
||||||
|
AvatarRenderer.render(avatarUrl, memberName?.toString(), avatarImageView)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,97 @@
|
|||||||
|
package im.vector.riotredesign.features.home.room.detail.timeline
|
||||||
|
|
||||||
|
import android.text.TextUtils
|
||||||
|
import im.vector.matrix.android.api.session.events.model.TimelineEvent
|
||||||
|
import im.vector.matrix.android.api.session.events.model.toModel
|
||||||
|
import im.vector.matrix.android.api.session.room.model.Membership
|
||||||
|
import im.vector.matrix.android.api.session.room.model.RoomMember
|
||||||
|
import im.vector.riotredesign.R
|
||||||
|
import im.vector.riotredesign.core.resources.StringProvider
|
||||||
|
|
||||||
|
|
||||||
|
//TODO : complete with call membership events
|
||||||
|
class RoomMemberItemFactory(private val stringProvider: StringProvider) {
|
||||||
|
|
||||||
|
fun create(event: TimelineEvent): NoticeItem? {
|
||||||
|
val roomMember = event.roomMember ?: return null
|
||||||
|
val noticeText = buildRoomMemberNotice(event) ?: return null
|
||||||
|
return NoticeItem(noticeText, roomMember.avatarUrl, roomMember.displayName)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun buildRoomMemberNotice(event: TimelineEvent): String? {
|
||||||
|
val eventContent: RoomMember? = event.root.content.toModel()
|
||||||
|
val prevEventContent: RoomMember? = event.root.prevContent.toModel()
|
||||||
|
val isMembershipEvent = prevEventContent?.membership != eventContent?.membership
|
||||||
|
return if (isMembershipEvent) {
|
||||||
|
buildMembershipNotice(event, eventContent, prevEventContent)
|
||||||
|
} else {
|
||||||
|
buildProfileNotice(event, eventContent, prevEventContent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun buildProfileNotice(event: TimelineEvent, eventContent: RoomMember?, prevEventContent: RoomMember?): String? {
|
||||||
|
val displayText = StringBuilder()
|
||||||
|
// Check display name has been changed
|
||||||
|
if (!TextUtils.equals(eventContent?.displayName, prevEventContent?.displayName)) {
|
||||||
|
val displayNameText = when {
|
||||||
|
prevEventContent?.displayName.isNullOrEmpty() -> stringProvider.getString(R.string.notice_display_name_set, event.root.sender, eventContent?.displayName)
|
||||||
|
eventContent?.displayName.isNullOrEmpty() -> stringProvider.getString(R.string.notice_display_name_removed, event.root.sender, prevEventContent?.displayName)
|
||||||
|
else -> stringProvider.getString(R.string.notice_display_name_changed_from, event.root.sender, prevEventContent?.displayName, eventContent?.displayName)
|
||||||
|
}
|
||||||
|
displayText.append(displayNameText)
|
||||||
|
}
|
||||||
|
// Check whether the avatar has been changed
|
||||||
|
if (!TextUtils.equals(eventContent?.avatarUrl, prevEventContent?.avatarUrl)) {
|
||||||
|
val displayAvatarText = if (displayText.isNotEmpty()) {
|
||||||
|
displayText.append(" ")
|
||||||
|
stringProvider.getString(R.string.notice_avatar_changed_too)
|
||||||
|
} else {
|
||||||
|
stringProvider.getString(R.string.notice_avatar_url_changed, event.roomMember?.displayName)
|
||||||
|
}
|
||||||
|
displayText.append(displayAvatarText)
|
||||||
|
}
|
||||||
|
return displayText.toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun buildMembershipNotice(event: TimelineEvent, eventContent: RoomMember?, prevEventContent: RoomMember?): String? {
|
||||||
|
val senderDisplayName = event.roomMember?.displayName ?: return null
|
||||||
|
val targetDisplayName = eventContent?.displayName ?: event.root.sender
|
||||||
|
return when {
|
||||||
|
Membership.INVITE == eventContent?.membership -> {
|
||||||
|
// TODO get userId
|
||||||
|
val selfUserId: String = ""
|
||||||
|
when {
|
||||||
|
eventContent.thirdPartyInvite != null -> stringProvider.getString(R.string.notice_room_third_party_registered_invite, targetDisplayName, eventContent.thirdPartyInvite?.displayName)
|
||||||
|
TextUtils.equals(event.root.stateKey, selfUserId)
|
||||||
|
-> stringProvider.getString(R.string.notice_room_invite_you, senderDisplayName)
|
||||||
|
event.root.stateKey.isNullOrEmpty() -> stringProvider.getString(R.string.notice_room_invite_no_invitee, senderDisplayName)
|
||||||
|
else -> stringProvider.getString(R.string.notice_room_invite, senderDisplayName, targetDisplayName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Membership.JOIN == eventContent?.membership -> stringProvider.getString(R.string.notice_room_join, senderDisplayName)
|
||||||
|
Membership.LEAVE == eventContent?.membership -> // 2 cases here: this member may have left voluntarily or they may have been "left" by someone else ie. kicked
|
||||||
|
return if (TextUtils.equals(event.root.sender, event.root.stateKey)) {
|
||||||
|
if (prevEventContent?.membership == Membership.INVITE) {
|
||||||
|
stringProvider.getString(R.string.notice_room_reject, senderDisplayName)
|
||||||
|
} else {
|
||||||
|
stringProvider.getString(R.string.notice_room_leave, senderDisplayName)
|
||||||
|
}
|
||||||
|
} else if (prevEventContent?.membership == Membership.INVITE) {
|
||||||
|
stringProvider.getString(R.string.notice_room_withdraw, senderDisplayName, targetDisplayName)
|
||||||
|
} else if (prevEventContent?.membership == Membership.JOIN) {
|
||||||
|
stringProvider.getString(R.string.notice_room_kick, senderDisplayName, targetDisplayName)
|
||||||
|
} else if (prevEventContent?.membership == Membership.BAN) {
|
||||||
|
stringProvider.getString(R.string.notice_room_unban, senderDisplayName, targetDisplayName)
|
||||||
|
} else {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
Membership.BAN == eventContent?.membership -> stringProvider.getString(R.string.notice_room_ban, senderDisplayName, targetDisplayName)
|
||||||
|
Membership.KNOCK == eventContent?.membership -> stringProvider.getString(R.string.notice_room_kick, senderDisplayName, targetDisplayName)
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
|||||||
|
package im.vector.riotredesign.features.home.room.detail.timeline
|
||||||
|
|
||||||
|
import android.text.TextUtils
|
||||||
|
import im.vector.matrix.android.api.session.events.model.TimelineEvent
|
||||||
|
import im.vector.matrix.android.api.session.events.model.toModel
|
||||||
|
import im.vector.matrix.android.api.session.room.model.RoomNameContent
|
||||||
|
import im.vector.riotredesign.R
|
||||||
|
import im.vector.riotredesign.core.resources.StringProvider
|
||||||
|
|
||||||
|
class RoomNameItemFactory(private val stringProvider: StringProvider) {
|
||||||
|
|
||||||
|
fun create(event: TimelineEvent): NoticeItem? {
|
||||||
|
|
||||||
|
val content: RoomNameContent? = event.root.content.toModel()
|
||||||
|
val roomMember = event.roomMember
|
||||||
|
if (content == null || roomMember == null) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
val text = if (!TextUtils.isEmpty(content.name)) {
|
||||||
|
stringProvider.getString(R.string.notice_room_name_changed, roomMember.displayName, content.name)
|
||||||
|
} else {
|
||||||
|
stringProvider.getString(R.string.notice_room_name_removed, roomMember.displayName)
|
||||||
|
}
|
||||||
|
return NoticeItem(text, roomMember.avatarUrl, roomMember.displayName)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package im.vector.riotredesign.features.home.room.detail.timeline
|
||||||
|
|
||||||
|
import android.text.TextUtils
|
||||||
|
import im.vector.matrix.android.api.session.events.model.TimelineEvent
|
||||||
|
import im.vector.matrix.android.api.session.events.model.toModel
|
||||||
|
import im.vector.matrix.android.api.session.room.model.RoomTopicContent
|
||||||
|
import im.vector.riotredesign.R
|
||||||
|
import im.vector.riotredesign.core.resources.StringProvider
|
||||||
|
|
||||||
|
class RoomTopicItemFactory(private val stringProvider: StringProvider) {
|
||||||
|
|
||||||
|
fun create(event: TimelineEvent): NoticeItem? {
|
||||||
|
|
||||||
|
val content: RoomTopicContent? = event.root.content.toModel()
|
||||||
|
val roomMember = event.roomMember
|
||||||
|
if (content == null || roomMember == null) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
val text = if (!TextUtils.isEmpty(content.topic)) {
|
||||||
|
stringProvider.getString(R.string.notice_room_topic_changed, roomMember.displayName, content.topic)
|
||||||
|
} else {
|
||||||
|
stringProvider.getString(R.string.notice_room_topic_removed, roomMember.displayName)
|
||||||
|
}
|
||||||
|
return NoticeItem(text, roomMember.avatarUrl, roomMember.displayName)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -2,17 +2,16 @@ package im.vector.riotredesign.features.home.room.detail.timeline
|
|||||||
|
|
||||||
import com.airbnb.epoxy.EpoxyAsyncUtil
|
import com.airbnb.epoxy.EpoxyAsyncUtil
|
||||||
import com.airbnb.epoxy.EpoxyModel
|
import com.airbnb.epoxy.EpoxyModel
|
||||||
import im.vector.matrix.android.api.session.events.model.TimelineEvent
|
|
||||||
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.TimelineEvent
|
||||||
import im.vector.matrix.android.api.session.room.timeline.TimelineData
|
import im.vector.matrix.android.api.session.room.timeline.TimelineData
|
||||||
import im.vector.riotredesign.core.extensions.localDateTime
|
import im.vector.riotredesign.core.extensions.localDateTime
|
||||||
import im.vector.riotredesign.features.home.LoadingItemModel_
|
import im.vector.riotredesign.features.home.LoadingItemModel_
|
||||||
import im.vector.riotredesign.features.home.room.detail.timeline.paging.PagedListEpoxyController
|
import im.vector.riotredesign.features.home.room.detail.timeline.paging.PagedListEpoxyController
|
||||||
|
|
||||||
class TimelineEventController(private val roomId: String,
|
class TimelineEventController(private val roomId: String,
|
||||||
private val messageItemFactory: MessageItemFactory,
|
private val dateFormatter: TimelineDateFormatter,
|
||||||
private val textItemFactory: TextItemFactory,
|
private val timelineItemFactory: TimelineItemFactory
|
||||||
private val dateFormatter: TimelineDateFormatter
|
|
||||||
) : PagedListEpoxyController<TimelineEvent>(
|
) : PagedListEpoxyController<TimelineEvent>(
|
||||||
EpoxyAsyncUtil.getAsyncBackgroundHandler(),
|
EpoxyAsyncUtil.getAsyncBackgroundHandler(),
|
||||||
EpoxyAsyncUtil.getAsyncBackgroundHandler()
|
EpoxyAsyncUtil.getAsyncBackgroundHandler()
|
||||||
@ -50,15 +49,10 @@ class TimelineEventController(private val roomId: String,
|
|||||||
val nextDate = nextEvent?.root?.localDateTime()
|
val nextDate = nextEvent?.root?.localDateTime()
|
||||||
val addDaySeparator = date.toLocalDate() != nextDate?.toLocalDate()
|
val addDaySeparator = date.toLocalDate() != nextDate?.toLocalDate()
|
||||||
|
|
||||||
val item = when (event.root.type) {
|
timelineItemFactory.create(event, nextEvent, callback)?.also {
|
||||||
EventType.MESSAGE -> messageItemFactory.create(event, nextEvent, addDaySeparator, date, callback)
|
|
||||||
else -> textItemFactory.create(event)
|
|
||||||
}
|
|
||||||
item?.also {
|
|
||||||
it.id(event.localId)
|
it.id(event.localId)
|
||||||
epoxyModels.add(it)
|
epoxyModels.add(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addDaySeparator) {
|
if (addDaySeparator) {
|
||||||
val formattedDay = dateFormatter.formatMessageDay(date)
|
val formattedDay = dateFormatter.formatMessageDay(date)
|
||||||
val daySeparatorItem = DaySeparatorItem(formattedDay).id(roomId + formattedDay)
|
val daySeparatorItem = DaySeparatorItem(formattedDay).id(roomId + formattedDay)
|
||||||
|
@ -0,0 +1,26 @@
|
|||||||
|
package im.vector.riotredesign.features.home.room.detail.timeline
|
||||||
|
|
||||||
|
import com.airbnb.epoxy.EpoxyModel
|
||||||
|
import im.vector.matrix.android.api.session.events.model.EventType
|
||||||
|
import im.vector.matrix.android.api.session.events.model.TimelineEvent
|
||||||
|
|
||||||
|
class TimelineItemFactory(private val messageItemFactory: MessageItemFactory,
|
||||||
|
private val roomNameItemFactory: RoomNameItemFactory,
|
||||||
|
private val roomTopicItemFactory: RoomTopicItemFactory,
|
||||||
|
private val roomMemberItemFactory: RoomMemberItemFactory,
|
||||||
|
private val defaultItemFactory: DefaultItemFactory) {
|
||||||
|
|
||||||
|
fun create(event: TimelineEvent,
|
||||||
|
nextEvent: TimelineEvent?,
|
||||||
|
callback: TimelineEventController.Callback?): EpoxyModel<*>? {
|
||||||
|
|
||||||
|
return when (event.root.type) {
|
||||||
|
EventType.MESSAGE -> messageItemFactory.create(event, nextEvent, callback)
|
||||||
|
EventType.STATE_ROOM_NAME -> roomNameItemFactory.create(event)
|
||||||
|
EventType.STATE_ROOM_TOPIC -> roomTopicItemFactory.create(event)
|
||||||
|
EventType.STATE_ROOM_MEMBER -> roomMemberItemFactory.create(event)
|
||||||
|
else -> defaultItemFactory.create(event)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
37
app/src/main/res/layout/item_timeline_event_notice.xml
Normal file
37
app/src/main/res/layout/item_timeline_event_notice.xml
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingLeft="16dp"
|
||||||
|
android:paddingRight="16dp">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/itemNoticeAvatarView"
|
||||||
|
android:layout_width="24dp"
|
||||||
|
android:layout_height="24dp"
|
||||||
|
android:layout_marginStart="64dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/itemNoticeTextView"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:layout_marginEnd="8dp"
|
||||||
|
android:textColor="@color/slate_grey"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:textStyle="italic"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/itemNoticeAvatarView"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:text="Mon item" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
@ -16,7 +16,7 @@
|
|||||||
<string name="notice_display_name_set">ضبط %1$s اسم العرض على %2$s</string>
|
<string name="notice_display_name_set">ضبط %1$s اسم العرض على %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">غيّر %1$s اسم العرض من %2$s إلى %3$s</string>
|
<string name="notice_display_name_changed_from">غيّر %1$s اسم العرض من %2$s إلى %3$s</string>
|
||||||
<string name="notice_display_name_removed">أزال %1$s اسم العرض (%2$s)</string>
|
<string name="notice_display_name_removed">أزال %1$s اسم العرض (%2$s)</string>
|
||||||
<string name="notice_topic_changed">غيّر %1$s الموضوع إلى: %2$s</string>
|
<string name="notice_room_topic_changed">غيّر %1$s الموضوع إلى: %2$s</string>
|
||||||
<string name="notice_room_name_changed">غيّر %1$s اسم الغرفة إلى: %2$s</string>
|
<string name="notice_room_name_changed">غيّر %1$s اسم الغرفة إلى: %2$s</string>
|
||||||
<string name="notice_answered_call">ردّ %s على المكالمة.</string>
|
<string name="notice_answered_call">ردّ %s على المكالمة.</string>
|
||||||
<string name="notice_ended_call">أنهى %s المكالمة.</string>
|
<string name="notice_ended_call">أنهى %s المكالمة.</string>
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s си сложи име %2$s</string>
|
<string name="notice_display_name_set">%1$s си сложи име %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s смени своето име от %2$s на %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s смени своето име от %2$s на %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s премахна своето име (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s премахна своето име (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s смени темата на: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s смени темата на: %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s смени името на стаята на: %2$s</string>
|
<string name="notice_room_name_changed">%1$s смени името на стаята на: %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s започна видео разговор.</string>
|
<string name="notice_placed_video_call">%s започна видео разговор.</string>
|
||||||
<string name="notice_placed_voice_call">%s започна гласов разговор.</string>
|
<string name="notice_placed_voice_call">%s започна гласов разговор.</string>
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
<string name="notice_display_name_changed_from">%1$s ha canviat el seu nom visible de %2$s a %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s ha canviat el seu nom visible de %2$s a %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s ha eliminat el seu nom visible (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s ha eliminat el seu nom visible (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s ha canviat el tema a: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s ha canviat el tema a: %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s ha canviat el nom de la sala a: %2$s</string>
|
<string name="notice_room_name_changed">%1$s ha canviat el nom de la sala a: %2$s</string>
|
||||||
<string name="notice_answered_call">%s ha contestat la trucada.</string>
|
<string name="notice_answered_call">%s ha contestat la trucada.</string>
|
||||||
<string name="notice_ended_call">%s ha finalitzat la trucada.</string>
|
<string name="notice_ended_call">%s ha finalitzat la trucada.</string>
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s satte sit viste navn til %2$s</string>
|
<string name="notice_display_name_set">%1$s satte sit viste navn til %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s ændrede sit viste navn fra %2$s til %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s ændrede sit viste navn fra %2$s til %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s fjernede sit viste navn (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s fjernede sit viste navn (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s ændrede emnet til: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s ændrede emnet til: %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s ændrede rumnavnet til: %2$s</string>
|
<string name="notice_room_name_changed">%1$s ændrede rumnavnet til: %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s startede et videoopkald.</string>
|
<string name="notice_placed_video_call">%s startede et videoopkald.</string>
|
||||||
<string name="notice_placed_voice_call">%s startede et stemmeopkald.</string>
|
<string name="notice_placed_voice_call">%s startede et stemmeopkald.</string>
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s hat den Anzeigenamen geändert in %2$s</string>
|
<string name="notice_display_name_set">%1$s hat den Anzeigenamen geändert in %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s hat den Anzeigenamen von %2$s auf %3$s geändert</string>
|
<string name="notice_display_name_changed_from">%1$s hat den Anzeigenamen von %2$s auf %3$s geändert</string>
|
||||||
<string name="notice_display_name_removed">%1$s hat den Anzeigenamen gelöscht (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s hat den Anzeigenamen gelöscht (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s hat das Raumthema geändert auf: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s hat das Raumthema geändert auf: %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s hat den Raumnamen geändert in: %2$s</string>
|
<string name="notice_room_name_changed">%1$s hat den Raumnamen geändert in: %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s hat einen Videoanruf durchgeführt.</string>
|
<string name="notice_placed_video_call">%s hat einen Videoanruf durchgeführt.</string>
|
||||||
<string name="notice_placed_voice_call">%s hat einen Sprachanruf getätigt.</string>
|
<string name="notice_placed_voice_call">%s hat einen Sprachanruf getätigt.</string>
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<string name="notice_display_name_set">Ο/Η %1$s άλλαξε το εμφανιζόμενό του/της όνομα σε %2$s</string>
|
<string name="notice_display_name_set">Ο/Η %1$s άλλαξε το εμφανιζόμενό του/της όνομα σε %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">Ο/Η %1$s άλλαξε το εμφανιζόμενό του/της όνομα από %2$s σε %3$s</string>
|
<string name="notice_display_name_changed_from">Ο/Η %1$s άλλαξε το εμφανιζόμενό του/της όνομα από %2$s σε %3$s</string>
|
||||||
<string name="notice_display_name_removed">Ο/Η %1$s αφαίρεσε το εμφανιζόμενό του/της όνομα (%2$s)</string>
|
<string name="notice_display_name_removed">Ο/Η %1$s αφαίρεσε το εμφανιζόμενό του/της όνομα (%2$s)</string>
|
||||||
<string name="notice_topic_changed">Ο/Η %1$s άλλαξε το θέμα σε: %2$s</string>
|
<string name="notice_room_topic_changed">Ο/Η %1$s άλλαξε το θέμα σε: %2$s</string>
|
||||||
<string name="notice_room_name_changed">Ο/Η %1$s άλλαξε το όνομα του δωματίου σε: %2$s</string>
|
<string name="notice_room_name_changed">Ο/Η %1$s άλλαξε το όνομα του δωματίου σε: %2$s</string>
|
||||||
<string name="notice_answered_call">Ο/Η %s απάντησε στην κλήση.</string>
|
<string name="notice_answered_call">Ο/Η %s απάντησε στην κλήση.</string>
|
||||||
<string name="notice_ended_call">Ο/Η %s τερμάτισε την κλήση.</string>
|
<string name="notice_ended_call">Ο/Η %s τερμάτισε την κλήση.</string>
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s estableció %2$s como su nombre visible</string>
|
<string name="notice_display_name_set">%1$s estableció %2$s como su nombre visible</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s cambió su nombre visible de %2$s a %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s cambió su nombre visible de %2$s a %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s retiró su nombre visible (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s retiró su nombre visible (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s cambio el tema a: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s cambio el tema a: %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s cambió el nombre de la sala a: %2$s</string>
|
<string name="notice_room_name_changed">%1$s cambió el nombre de la sala a: %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s comenzó una llamada de video.</string>
|
<string name="notice_placed_video_call">%s comenzó una llamada de video.</string>
|
||||||
<string name="notice_placed_voice_call">%s comenzó una llamada de voz.</string>
|
<string name="notice_placed_voice_call">%s comenzó una llamada de voz.</string>
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s estableció %2$s como su nombre público</string>
|
<string name="notice_display_name_set">%1$s estableció %2$s como su nombre público</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s cambió su nombre público de %2$s a %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s cambió su nombre público de %2$s a %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s eliminó su nombre público (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s eliminó su nombre público (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s cambió el tema a: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s cambió el tema a: %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s cambió el nombre de la sala a: %2$s</string>
|
<string name="notice_room_name_changed">%1$s cambió el nombre de la sala a: %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s realizó una llamada de vídeo.</string>
|
<string name="notice_placed_video_call">%s realizó una llamada de vídeo.</string>
|
||||||
<string name="notice_placed_voice_call">%s realizó una llamada de voz.</string>
|
<string name="notice_placed_voice_call">%s realizó una llamada de voz.</string>
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s erabiltzaileak bere pantaila-izena aldatu du beste honetara: %2$s</string>
|
<string name="notice_display_name_set">%1$s erabiltzaileak bere pantaila-izena aldatu du beste honetara: %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s erabiltzaileak bere pantaila-izena aldatu du, honetatik: %2$s honetara: %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s erabiltzaileak bere pantaila-izena aldatu du, honetatik: %2$s honetara: %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s erabiltzaileak bere pantaila-izena kendu du (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s erabiltzaileak bere pantaila-izena kendu du (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s erabiltzaileak mintzagaia honetara aldatu du: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s erabiltzaileak mintzagaia honetara aldatu du: %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s erabiltzaileak gelaren izena honetara aldatu du: %2$s</string>
|
<string name="notice_room_name_changed">%1$s erabiltzaileak gelaren izena honetara aldatu du: %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s erabiltzaileak bideo deia hasi du.</string>
|
<string name="notice_placed_video_call">%s erabiltzaileak bideo deia hasi du.</string>
|
||||||
<string name="notice_placed_voice_call">%s erabiltzaileak ahots deia hasi du.</string>
|
<string name="notice_placed_voice_call">%s erabiltzaileak ahots deia hasi du.</string>
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s asetti näyttönimekseen %2$s</string>
|
<string name="notice_display_name_set">%1$s asetti näyttönimekseen %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s muutti näyttönimensä %2$s -> %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s muutti näyttönimensä %2$s -> %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s poisti näyttönimensä (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s poisti näyttönimensä (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s muutti aiheeksi %2$s</string>
|
<string name="notice_room_topic_changed">%1$s muutti aiheeksi %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s muutti huoneen nimeksi %2$s</string>
|
<string name="notice_room_name_changed">%1$s muutti huoneen nimeksi %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s soitti videopuhelun.</string>
|
<string name="notice_placed_video_call">%s soitti videopuhelun.</string>
|
||||||
<string name="notice_placed_voice_call">%s soitti puhelun.</string>
|
<string name="notice_placed_voice_call">%s soitti puhelun.</string>
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s a réglé son nom affiché en %2$s</string>
|
<string name="notice_display_name_set">%1$s a réglé son nom affiché en %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s a modifié son nom affiché %2$s en %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s a modifié son nom affiché %2$s en %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s a supprimé son nom affiché (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s a supprimé son nom affiché (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s a changé le sujet en : %2$s</string>
|
<string name="notice_room_topic_changed">%1$s a changé le sujet en : %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s a changé le nom du salon en : %2$s</string>
|
<string name="notice_room_name_changed">%1$s a changé le nom du salon en : %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s a passé un appel vidéo.</string>
|
<string name="notice_placed_video_call">%s a passé un appel vidéo.</string>
|
||||||
<string name="notice_placed_voice_call">%s a passé un appel vocal.</string>
|
<string name="notice_placed_voice_call">%s a passé un appel vocal.</string>
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s cambiou o seu nome a %2$s</string>
|
<string name="notice_display_name_set">%1$s cambiou o seu nome a %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s cambiou o seu nome de %2$s a %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s cambiou o seu nome de %2$s a %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s borrou o seu nome público (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s borrou o seu nome público (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s cambiou o tema desta sala para: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s cambiou o tema desta sala para: %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s cambiou o nome desta sala para: %2$s</string>
|
<string name="notice_room_name_changed">%1$s cambiou o nome desta sala para: %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s iniciou unha chamada de vídeo.</string>
|
<string name="notice_placed_video_call">%s iniciou unha chamada de vídeo.</string>
|
||||||
<string name="notice_placed_voice_call">%s iniciou unha chamada de voz.</string>
|
<string name="notice_placed_voice_call">%s iniciou unha chamada de voz.</string>
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s megváltoztatták a megjelenő nevüket erre: %2$s</string>
|
<string name="notice_display_name_set">%1$s megváltoztatták a megjelenő nevüket erre: %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s megváltoztatták a megjelenő nevüket erről %2$s erre %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s megváltoztatták a megjelenő nevüket erről %2$s erre %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s eltávolították a megjelenő nevüket (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s eltávolították a megjelenő nevüket (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s megváltoztatta a témát erre: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s megváltoztatta a témát erre: %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s megváltoztatta a szoba nevét erre: %2$s</string>
|
<string name="notice_room_name_changed">%1$s megváltoztatta a szoba nevét erre: %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s videóhívást kezdeményezett.</string>
|
<string name="notice_placed_video_call">%s videóhívást kezdeményezett.</string>
|
||||||
<string name="notice_placed_voice_call">%s hanghívást kezdeményezett.</string>
|
<string name="notice_placed_voice_call">%s hanghívást kezdeményezett.</string>
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s setti birtingarnafn sitt sem %2$s</string>
|
<string name="notice_display_name_set">%1$s setti birtingarnafn sitt sem %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s breytti birtingarnafni sínu úr %2$s í %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s breytti birtingarnafni sínu úr %2$s í %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s fjarlægði birtingarnafn sitt (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s fjarlægði birtingarnafn sitt (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s breytti umræðuefninu í: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s breytti umræðuefninu í: %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s breytti heiti spjallrásarinnar í: %2$s</string>
|
<string name="notice_room_name_changed">%1$s breytti heiti spjallrásarinnar í: %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s hringdi myndsamtal.</string>
|
<string name="notice_placed_video_call">%s hringdi myndsamtal.</string>
|
||||||
<string name="notice_placed_voice_call">%s hringdi raddsamtal.</string>
|
<string name="notice_placed_voice_call">%s hringdi raddsamtal.</string>
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s hanno cambiato il nome visualizzato con %2$s</string>
|
<string name="notice_display_name_set">%1$s hanno cambiato il nome visualizzato con %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s ha cambiato il nome visualizzato da %2$s a %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s ha cambiato il nome visualizzato da %2$s a %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s ha rimosso il nome visibile (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s ha rimosso il nome visibile (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s ha cambiato l\'argomento con: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s ha cambiato l\'argomento con: %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s ha cambiato il nome della stanza con: %2$s</string>
|
<string name="notice_room_name_changed">%1$s ha cambiato il nome della stanza con: %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s ha iniziato una chiamata video.</string>
|
<string name="notice_placed_video_call">%s ha iniziato una chiamata video.</string>
|
||||||
<string name="notice_placed_voice_call">%s ha iniziato una chiamata vocale.</string>
|
<string name="notice_placed_voice_call">%s ha iniziato una chiamata vocale.</string>
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s uzstādīja redzamo vārdu uz %2$s</string>
|
<string name="notice_display_name_set">%1$s uzstādīja redzamo vārdu uz %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s nomainīja redzamo vārdu no %2$s uz %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s nomainīja redzamo vārdu no %2$s uz %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s dzēsa savu redzamo vārdu (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s dzēsa savu redzamo vārdu (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s nomainīja tēmas nosaukumu uz: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s nomainīja tēmas nosaukumu uz: %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s nomainīja istabas nosaukumu uz: %2$s</string>
|
<string name="notice_room_name_changed">%1$s nomainīja istabas nosaukumu uz: %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s veica video zvanu.</string>
|
<string name="notice_placed_video_call">%s veica video zvanu.</string>
|
||||||
<string name="notice_placed_voice_call">%s veica audio zvanu.</string>
|
<string name="notice_placed_voice_call">%s veica audio zvanu.</string>
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s heeft zijn of haar naam aangepast naar %2$s</string>
|
<string name="notice_display_name_set">%1$s heeft zijn of haar naam aangepast naar %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s heeft zijn of haar naam aangepast van %2$s naar %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s heeft zijn of haar naam aangepast van %2$s naar %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s heeft zijn of haar naam verwijderd (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s heeft zijn of haar naam verwijderd (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s heeft het onderwerp veranderd naar: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s heeft het onderwerp veranderd naar: %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s heeft de ruimtenaam veranderd naar: %2$s</string>
|
<string name="notice_room_name_changed">%1$s heeft de ruimtenaam veranderd naar: %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s heeft een video-oproep geplaatst.</string>
|
<string name="notice_placed_video_call">%s heeft een video-oproep geplaatst.</string>
|
||||||
<string name="notice_placed_voice_call">%s heeft een spraak-oproep geplaatst.</string>
|
<string name="notice_placed_voice_call">%s heeft een spraak-oproep geplaatst.</string>
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s sette visingsnamnet sitt som %2$s</string>
|
<string name="notice_display_name_set">%1$s sette visingsnamnet sitt som %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s endra visingsnamnet sitt frå %2$s til %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s endra visingsnamnet sitt frå %2$s til %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s fjerna visingsnamnet sitt (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s fjerna visingsnamnet sitt (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s endra emnet til: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s endra emnet til: %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s endra romnamnet til: %2$s</string>
|
<string name="notice_room_name_changed">%1$s endra romnamnet til: %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s starta ei videosamtale.</string>
|
<string name="notice_placed_video_call">%s starta ei videosamtale.</string>
|
||||||
<string name="notice_placed_voice_call">%s starta ei røystsamtale.</string>
|
<string name="notice_placed_voice_call">%s starta ei røystsamtale.</string>
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s zmienił wyświetlaną nazwę na %2$s</string>
|
<string name="notice_display_name_set">%1$s zmienił wyświetlaną nazwę na %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s zmienił wyświetlaną nazwę z %2$s na %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s zmienił wyświetlaną nazwę z %2$s na %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s usunął swoją wyświetlaną nazwę (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s usunął swoją wyświetlaną nazwę (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s zmienił temat na: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s zmienił temat na: %2$s</string>
|
||||||
<string name="unable_to_send_message">Nie udało się wysłać wiadomości</string>
|
<string name="unable_to_send_message">Nie udało się wysłać wiadomości</string>
|
||||||
|
|
||||||
<string name="message_failed_to_upload">Nie udało się wysłać zdjęcia</string>
|
<string name="message_failed_to_upload">Nie udało się wysłać zdjęcia</string>
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s definiu seu nome público como %2$s</string>
|
<string name="notice_display_name_set">%1$s definiu seu nome público como %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s alterou seu nome públido de %2$s para %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s alterou seu nome públido de %2$s para %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s apagou seu nome público (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s apagou seu nome público (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s alterou o tópico desta sala para: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s alterou o tópico desta sala para: %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s alterou o nome desta sala para: %2$s</string>
|
<string name="notice_room_name_changed">%1$s alterou o nome desta sala para: %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s iniciou uma chamada de vídeo.</string>
|
<string name="notice_placed_video_call">%s iniciou uma chamada de vídeo.</string>
|
||||||
<string name="notice_placed_voice_call">%s iniciou uma chamada de voz.</string>
|
<string name="notice_placed_voice_call">%s iniciou uma chamada de voz.</string>
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s definiu seu nome público como %2$s</string>
|
<string name="notice_display_name_set">%1$s definiu seu nome público como %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s alterou seu nome público de %2$s para %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s alterou seu nome público de %2$s para %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s apagou o seu nome público (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s apagou o seu nome público (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s alterou o tópico desta sala para: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s alterou o tópico desta sala para: %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s alterou o nome desta sala para: %2$s</string>
|
<string name="notice_room_name_changed">%1$s alterou o nome desta sala para: %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s iniciou uma chamada de vídeo.</string>
|
<string name="notice_placed_video_call">%s iniciou uma chamada de vídeo.</string>
|
||||||
<string name="notice_placed_voice_call">%s iniciou uma chamada de voz.</string>
|
<string name="notice_placed_voice_call">%s iniciou uma chamada de voz.</string>
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s установил(а) имя %2$s</string>
|
<string name="notice_display_name_set">%1$s установил(а) имя %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s изменил(а) имя с %2$s на %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s изменил(а) имя с %2$s на %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s удалил(а) свое имя (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s удалил(а) свое имя (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s изменил(а) тему на: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s изменил(а) тему на: %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s изменил(а) название комнаты: %2$s</string>
|
<string name="notice_room_name_changed">%1$s изменил(а) название комнаты: %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s начал(а) видеовызов.</string>
|
<string name="notice_placed_video_call">%s начал(а) видеовызов.</string>
|
||||||
<string name="notice_placed_voice_call">%s начал(а) голосовой вызов.</string>
|
<string name="notice_placed_voice_call">%s начал(а) голосовой вызов.</string>
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s si nastavil zobrazované meno %2$s</string>
|
<string name="notice_display_name_set">%1$s si nastavil zobrazované meno %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s si zmenil zobrazované meno z %2$s na %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s si zmenil zobrazované meno z %2$s na %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s odstránil svoje zobrazované meno (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s odstránil svoje zobrazované meno (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s zmenil tému na: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s zmenil tému na: %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s zmenil názov miestnosti na: %2$s</string>
|
<string name="notice_room_name_changed">%1$s zmenil názov miestnosti na: %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s uskutočnil video hovor.</string>
|
<string name="notice_placed_video_call">%s uskutočnil video hovor.</string>
|
||||||
<string name="notice_placed_voice_call">%s uskutočnil audio hovor.</string>
|
<string name="notice_placed_voice_call">%s uskutočnil audio hovor.</string>
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s వారి డిస్ప్లే పేరును ని సెట్ చేసారు %2$s</string>
|
<string name="notice_display_name_set">%1$s వారి డిస్ప్లే పేరును ని సెట్ చేసారు %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s వారి ప్రదర్శన పేరును %2$s నుండి %3$s మార్చారు</string>
|
<string name="notice_display_name_changed_from">%1$s వారి ప్రదర్శన పేరును %2$s నుండి %3$s మార్చారు</string>
|
||||||
<string name="notice_display_name_removed">%1$s వారి ప్రదర్శన పేరుని తీసివేసారు (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s వారి ప్రదర్శన పేరుని తీసివేసారు (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s అంశం మార్చబడింది:%2$s</string>
|
<string name="notice_room_topic_changed">%1$s అంశం మార్చబడింది:%2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s గది పెరు మార్చబడింది %2$s</string>
|
<string name="notice_room_name_changed">%1$s గది పెరు మార్చబడింది %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s ఒక వీడియో కాల్ని ఉంచింది.</string>
|
<string name="notice_placed_video_call">%s ఒక వీడియో కాల్ని ఉంచింది.</string>
|
||||||
<string name="notice_placed_voice_call">%s వాయిస్ కాల్ని ఉంచారు.</string>
|
<string name="notice_placed_voice_call">%s వాయిస్ కాల్ని ఉంచారు.</string>
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s 将他们的昵称设置为 %2$s</string>
|
<string name="notice_display_name_set">%1$s 将他们的昵称设置为 %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s 把他们的昵称从 %2$s 改为 %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s 把他们的昵称从 %2$s 改为 %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s 移除了他们的昵称 (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s 移除了他们的昵称 (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s 把主题改为: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s 把主题改为: %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s 把聊天室名称改为: %2$s</string>
|
<string name="notice_room_name_changed">%1$s 把聊天室名称改为: %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s 发起了一次视频通话。</string>
|
<string name="notice_placed_video_call">%s 发起了一次视频通话。</string>
|
||||||
<string name="notice_placed_voice_call">%s 发起了一次语音通话。</string>
|
<string name="notice_placed_voice_call">%s 发起了一次语音通话。</string>
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s 設定了他們的顯示名稱為 %2$s</string>
|
<string name="notice_display_name_set">%1$s 設定了他們的顯示名稱為 %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s 變更了他們的顯示名稱從 %2$s 到 %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s 變更了他們的顯示名稱從 %2$s 到 %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s 移除了他們的顯示名稱 (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s 移除了他們的顯示名稱 (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s 變更主題為:%2$s</string>
|
<string name="notice_room_topic_changed">%1$s 變更主題為:%2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s 變更房間名稱為:%2$s</string>
|
<string name="notice_room_name_changed">%1$s 變更房間名稱為:%2$s</string>
|
||||||
<string name="notice_placed_video_call">%s 撥出了視訊通話。</string>
|
<string name="notice_placed_video_call">%s 撥出了視訊通話。</string>
|
||||||
<string name="notice_placed_voice_call">%s 撥出了語音通話。</string>
|
<string name="notice_placed_voice_call">%s 撥出了語音通話。</string>
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<string name="notice_display_name_set">%1$s set their display name to %2$s</string>
|
<string name="notice_display_name_set">%1$s set their display name to %2$s</string>
|
||||||
<string name="notice_display_name_changed_from">%1$s changed their display name from %2$s to %3$s</string>
|
<string name="notice_display_name_changed_from">%1$s changed their display name from %2$s to %3$s</string>
|
||||||
<string name="notice_display_name_removed">%1$s removed their display name (%2$s)</string>
|
<string name="notice_display_name_removed">%1$s removed their display name (%2$s)</string>
|
||||||
<string name="notice_topic_changed">%1$s changed the topic to: %2$s</string>
|
<string name="notice_room_topic_changed">%1$s changed the topic to: %2$s</string>
|
||||||
<string name="notice_room_name_changed">%1$s changed the room name to: %2$s</string>
|
<string name="notice_room_name_changed">%1$s changed the room name to: %2$s</string>
|
||||||
<string name="notice_placed_video_call">%s placed a video call.</string>
|
<string name="notice_placed_video_call">%s placed a video call.</string>
|
||||||
<string name="notice_placed_voice_call">%s placed a voice call.</string>
|
<string name="notice_placed_voice_call">%s placed a voice call.</string>
|
||||||
|
Loading…
Reference in New Issue
Block a user