session-android/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/ControlMessageView.kt

100 lines
4.8 KiB
Kotlin

package org.thoughtcrime.securesms.conversation.v2.messages
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.LinearLayout
import androidx.core.content.res.ResourcesCompat
import androidx.core.view.isGone
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import network.loki.messenger.R
import network.loki.messenger.databinding.ViewControlMessageBinding
import org.session.libsession.messaging.messages.ExpirationConfiguration
import org.session.libsession.utilities.ExpirationUtil.getExpirationDisplayValue
import org.session.libsession.utilities.getExpirationTypeDisplayValue
import org.thoughtcrime.securesms.database.model.MessageRecord
import org.thoughtcrime.securesms.showSessionDialog
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.Duration.Companion.seconds
class ControlMessageView : LinearLayout {
private lateinit var binding: ViewControlMessageBinding
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 = ViewControlMessageBinding.inflate(LayoutInflater.from(context), this, true)
layoutParams = RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT)
}
fun bind(message: MessageRecord, previous: MessageRecord?) {
binding.dateBreakTextView.showDateBreak(message, previous)
binding.iconImageView.isGone = true
binding.expirationTimerView.isGone = true
binding.followSetting.isGone = true
var messageBody: CharSequence = message.getDisplayBody(context)
binding.root.contentDescription = null
when {
message.isExpirationTimerUpdate -> {
binding.apply {
expirationTimerView.isVisible = true
expirationTimerView.setExpirationTime(message.expireStarted, message.expiresIn)
followSetting.isVisible = ExpirationConfiguration.isNewConfigEnabled && !message.isOutgoing
followSetting.setOnClickListener {
context.showSessionDialog {
val isOff = message.expiresIn == 0L
title(R.string.dialog_disappearing_messages_follow_setting_title)
if (isOff) {
text(R.string.dialog_disappearing_messages_follow_setting_off_body)
} else {
text(
context.getString(
R.string.dialog_disappearing_messages_follow_setting_on_body,
getExpirationDisplayValue(context, message.expiresIn.milliseconds),
context.getExpirationTypeDisplayValue(message.expireStarted == message.timestamp)
)
)
}
destructiveButton(if (isOff) R.string.dialog_disappearing_messages_follow_setting_confirm else R.string.dialog_disappearing_messages_follow_setting_set) { }
cancelButton()
}
}
}
}
message.isMediaSavedNotification -> {
binding.iconImageView.apply {
setImageDrawable(
ResourcesCompat.getDrawable(resources, R.drawable.ic_file_download_white_36dp, context.theme)
)
isVisible = true
}
}
message.isMessageRequestResponse -> {
messageBody = context.getString(R.string.message_requests_accepted)
binding.root.contentDescription=context.getString(R.string.AccessibilityId_message_request_config_message)
}
message.isCallLog -> {
val drawable = when {
message.isIncomingCall -> R.drawable.ic_incoming_call
message.isOutgoingCall -> R.drawable.ic_outgoing_call
message.isFirstMissedCall -> R.drawable.ic_info_outline_light
else -> R.drawable.ic_missed_call
}
binding.iconImageView.apply {
setImageDrawable(ResourcesCompat.getDrawable(resources, drawable, context.theme))
isVisible = true
}
}
}
binding.textView.text = messageBody
}
fun recycle() {
}
}