63 lines
2.5 KiB
Kotlin
63 lines
2.5 KiB
Kotlin
package org.thoughtcrime.securesms.messagerequests
|
|
|
|
import android.content.Context
|
|
import android.content.res.Resources
|
|
import android.util.AttributeSet
|
|
import android.view.LayoutInflater
|
|
import android.widget.LinearLayout
|
|
import androidx.recyclerview.widget.RecyclerView
|
|
import network.loki.messenger.R
|
|
import network.loki.messenger.databinding.ViewMessageRequestBinding
|
|
import org.session.libsession.utilities.recipients.Recipient
|
|
import org.thoughtcrime.securesms.conversation.v2.utilities.MentionUtilities.highlightMentions
|
|
import org.thoughtcrime.securesms.database.model.ThreadRecord
|
|
import org.thoughtcrime.securesms.mms.GlideRequests
|
|
import org.thoughtcrime.securesms.util.DateUtils
|
|
import java.util.Locale
|
|
|
|
class MessageRequestView : LinearLayout {
|
|
private lateinit var binding: ViewMessageRequestBinding
|
|
private val screenWidth = Resources.getSystem().displayMetrics.widthPixels
|
|
var thread: ThreadRecord? = null
|
|
|
|
// region Lifecycle
|
|
constructor(context: Context) : super(context) { initialize() }
|
|
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { initialize() }
|
|
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { initialize() }
|
|
|
|
private fun initialize() {
|
|
binding = ViewMessageRequestBinding.inflate(LayoutInflater.from(context), this, true)
|
|
layoutParams = RecyclerView.LayoutParams(screenWidth, RecyclerView.LayoutParams.WRAP_CONTENT)
|
|
}
|
|
// endregion
|
|
|
|
// region Updating
|
|
fun bind(thread: ThreadRecord, glide: GlideRequests) {
|
|
this.thread = thread
|
|
val senderDisplayName = getUserDisplayName(thread.recipient)
|
|
?: thread.recipient.address.toString()
|
|
binding.displayNameTextView.text = senderDisplayName
|
|
binding.timestampTextView.text = DateUtils.getDisplayFormattedTimeSpanString(context, Locale.getDefault(), thread.date)
|
|
val rawSnippet = thread.getDisplayBody(context)
|
|
val snippet = highlightMentions(rawSnippet, thread.threadId, context)
|
|
binding.snippetTextView.text = snippet
|
|
|
|
post {
|
|
binding.profilePictureView.update(thread.recipient)
|
|
}
|
|
}
|
|
|
|
fun recycle() {
|
|
binding.profilePictureView.recycle()
|
|
}
|
|
|
|
private fun getUserDisplayName(recipient: Recipient): String? {
|
|
return if (recipient.isLocalNumber) {
|
|
context.getString(R.string.note_to_self)
|
|
} else {
|
|
recipient.name // Internally uses the Contact API
|
|
}
|
|
}
|
|
// endregion
|
|
}
|