Twidere-App-Android-Twitter.../twidere/src/main/kotlin/org/mariotaku/twidere/view/holder/message/MessageEntryViewHolder.kt

120 lines
4.7 KiB
Kotlin

/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.view.holder.message
import android.support.v7.widget.RecyclerView
import android.view.View
import kotlinx.android.synthetic.main.list_item_message_entry.view.*
import org.mariotaku.ktextension.spannable
import org.mariotaku.twidere.R
import org.mariotaku.twidere.adapter.MessagesEntriesAdapter
import org.mariotaku.twidere.extension.loadProfileImage
import org.mariotaku.twidere.extension.model.getSummaryText
import org.mariotaku.twidere.extension.model.getTitle
import org.mariotaku.twidere.extension.model.notificationDisabled
import org.mariotaku.twidere.extension.model.timestamp
import org.mariotaku.twidere.model.ParcelableMessageConversation
import org.mariotaku.twidere.model.ParcelableMessageConversation.ConversationType
/**
* Created by mariotaku on 2017/2/9.
*/
class MessageEntryViewHolder(itemView: View, val adapter: MessagesEntriesAdapter) : RecyclerView.ViewHolder(itemView) {
private val content by lazy { itemView.content }
private val time by lazy { itemView.time }
private val name by lazy { itemView.name }
private val text by lazy { itemView.text }
private val profileImage by lazy { itemView.profileImage }
private val typeIndicator by lazy { itemView.typeIndicator }
private val stateIndicator by lazy { itemView.stateIndicator }
private val readIndicator by lazy { itemView.readIndicator }
private val unreadCount by lazy { itemView.unreadCount }
init {
val textSize = adapter.textSize
name.setPrimaryTextSize(textSize * 1.05f)
name.setSecondaryTextSize(textSize * 0.95f)
text.textSize = textSize
time.textSize = textSize * 0.85f
profileImage.style = adapter.profileImageStyle
itemView.setOnClickListener {
adapter.listener?.onConversationClick(layoutPosition)
}
itemView.setOnLongClickListener {
adapter.listener?.onConversationLongClick(layoutPosition) ?: false
}
profileImage.setOnClickListener {
adapter.listener?.onProfileImageClick(layoutPosition)
}
}
fun display(conversation: ParcelableMessageConversation) {
if (adapter.drawAccountColors) {
content.drawEnd(conversation.account_color)
} else {
content.drawEnd()
}
val (name, secondaryName) = conversation.getTitle(itemView.context,
adapter.userColorNameManager, adapter.nameFirst)
this.time.time = conversation.timestamp
this.name.name = name
this.name.screenName = secondaryName
this.name.updateText(adapter.bidiFormatter)
this.text.spannable = conversation.getSummaryText(itemView.context,
adapter.userColorNameManager, adapter.nameFirst)
if (conversation.is_outgoing) {
readIndicator.visibility = View.VISIBLE
readIndicator.setImageResource(R.drawable.ic_message_type_outgoing)
} else {
readIndicator.visibility = View.GONE
}
if (conversation.conversation_type == ConversationType.ONE_TO_ONE) {
typeIndicator.visibility = View.GONE
} else {
typeIndicator.visibility = View.VISIBLE
}
if (conversation.notificationDisabled) {
stateIndicator.visibility = View.VISIBLE
stateIndicator.setImageResource(R.drawable.ic_message_type_speaker_muted)
} else {
stateIndicator.visibility = View.GONE
}
adapter.requestManager.loadProfileImage(adapter.context, conversation,
adapter.profileImageStyle, profileImage.cornerRadius,
profileImage.cornerRadiusRatio).into(profileImage)
if (conversation.unread_count > 0) {
unreadCount.visibility = View.VISIBLE
unreadCount.text = conversation.unread_count.toString()
} else {
unreadCount.visibility = View.GONE
}
}
companion object {
const val layoutResource = R.layout.list_item_message_entry
}
}