2021-07-09 03:14:21 +02:00
|
|
|
package org.thoughtcrime.securesms.contacts
|
2020-01-31 03:57:24 +01:00
|
|
|
|
|
|
|
import android.content.Context
|
|
|
|
import android.util.AttributeSet
|
|
|
|
import android.view.LayoutInflater
|
2020-04-15 08:37:41 +02:00
|
|
|
import android.view.View
|
2020-01-31 03:57:24 +01:00
|
|
|
import android.widget.LinearLayout
|
|
|
|
import network.loki.messenger.R
|
2022-01-14 06:56:15 +01:00
|
|
|
import network.loki.messenger.databinding.ViewUserBinding
|
2021-05-20 04:01:08 +02:00
|
|
|
import org.session.libsession.messaging.contacts.Contact
|
2021-10-04 09:51:19 +02:00
|
|
|
import org.session.libsession.utilities.recipients.Recipient
|
2021-07-09 05:18:48 +02:00
|
|
|
import org.thoughtcrime.securesms.conversation.v2.utilities.MentionManagerUtilities
|
2021-10-04 09:51:19 +02:00
|
|
|
import org.thoughtcrime.securesms.dependencies.DatabaseComponent
|
2020-01-31 03:57:24 +01:00
|
|
|
import org.thoughtcrime.securesms.mms.GlideRequests
|
|
|
|
|
|
|
|
class UserView : LinearLayout {
|
2022-01-14 06:56:15 +01:00
|
|
|
private lateinit var binding: ViewUserBinding
|
2020-09-17 03:39:34 +02:00
|
|
|
var openGroupThreadID: Long = -1 // FIXME: This is a bit ugly
|
2020-01-31 03:57:24 +01:00
|
|
|
|
2020-08-18 00:55:17 +02:00
|
|
|
enum class ActionIndicator {
|
|
|
|
None,
|
|
|
|
Menu,
|
|
|
|
Tick
|
|
|
|
}
|
|
|
|
|
2020-01-31 03:57:24 +01:00
|
|
|
// region Lifecycle
|
|
|
|
constructor(context: Context) : super(context) {
|
|
|
|
setUpViewHierarchy()
|
|
|
|
}
|
|
|
|
|
|
|
|
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
|
|
|
|
setUpViewHierarchy()
|
|
|
|
}
|
|
|
|
|
|
|
|
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
|
|
|
|
setUpViewHierarchy()
|
|
|
|
}
|
|
|
|
|
|
|
|
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) {
|
|
|
|
setUpViewHierarchy()
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun setUpViewHierarchy() {
|
2022-01-14 06:56:15 +01:00
|
|
|
binding = ViewUserBinding.inflate(LayoutInflater.from(context), this, true)
|
2020-01-31 03:57:24 +01:00
|
|
|
}
|
|
|
|
// endregion
|
|
|
|
|
|
|
|
// region Updating
|
2020-08-17 04:12:25 +02:00
|
|
|
fun bind(user: Recipient, glide: GlideRequests, actionIndicator: ActionIndicator, isSelected: Boolean = false) {
|
2021-05-24 02:27:31 +02:00
|
|
|
fun getUserDisplayName(publicKey: String): String {
|
2021-10-04 09:51:19 +02:00
|
|
|
val contact = DatabaseComponent.get(context).sessionContactDatabase().getContactWithSessionID(publicKey)
|
2021-05-24 02:27:31 +02:00
|
|
|
return contact?.displayName(Contact.ContactContext.REGULAR) ?: publicKey
|
2020-09-09 05:57:22 +02:00
|
|
|
}
|
2021-10-04 09:51:19 +02:00
|
|
|
val threadID = DatabaseComponent.get(context).threadDatabase().getOrCreateThreadIdFor(user)
|
2020-10-30 01:56:46 +01:00
|
|
|
MentionManagerUtilities.populateUserPublicKeyCacheIfNeeded(threadID, context) // FIXME: This is a bad place to do this
|
2020-04-15 05:06:10 +02:00
|
|
|
val address = user.address.serialize()
|
2022-01-14 06:56:15 +01:00
|
|
|
binding.profilePictureView.glide = glide
|
|
|
|
binding.profilePictureView.update(user)
|
|
|
|
binding.actionIndicatorImageView.setImageResource(R.drawable.ic_baseline_edit_24)
|
|
|
|
binding.nameTextView.text = if (user.isGroupRecipient) user.name else getUserDisplayName(address)
|
2020-08-17 04:12:25 +02:00
|
|
|
when (actionIndicator) {
|
2020-08-18 00:55:17 +02:00
|
|
|
ActionIndicator.None -> {
|
2022-01-14 06:56:15 +01:00
|
|
|
binding.actionIndicatorImageView.visibility = View.GONE
|
2020-08-17 04:12:25 +02:00
|
|
|
}
|
2020-08-18 00:55:17 +02:00
|
|
|
ActionIndicator.Menu -> {
|
2022-01-14 06:56:15 +01:00
|
|
|
binding.actionIndicatorImageView.visibility = View.VISIBLE
|
|
|
|
binding.actionIndicatorImageView.setImageResource(R.drawable.ic_more_horiz_white)
|
2020-08-17 04:12:25 +02:00
|
|
|
}
|
2020-08-18 00:55:17 +02:00
|
|
|
ActionIndicator.Tick -> {
|
2022-01-14 06:56:15 +01:00
|
|
|
binding.actionIndicatorImageView.visibility = View.VISIBLE
|
|
|
|
binding.actionIndicatorImageView.setImageResource(
|
|
|
|
if (isSelected) R.drawable.ic_circle_check else R.drawable.ic_circle
|
|
|
|
)
|
2020-08-17 04:12:25 +02:00
|
|
|
}
|
2020-06-09 05:58:01 +02:00
|
|
|
}
|
2020-01-31 03:57:24 +01:00
|
|
|
}
|
2020-12-07 03:30:52 +01:00
|
|
|
|
2021-04-19 02:46:19 +02:00
|
|
|
fun toggleCheckbox(isSelected: Boolean = false) {
|
2022-01-14 06:56:15 +01:00
|
|
|
binding.actionIndicatorImageView.visibility = View.VISIBLE
|
|
|
|
binding.actionIndicatorImageView.setImageResource(
|
|
|
|
if (isSelected) R.drawable.ic_circle_check else R.drawable.ic_circle
|
|
|
|
)
|
2021-04-19 02:46:19 +02:00
|
|
|
}
|
|
|
|
|
2020-12-07 03:30:52 +01:00
|
|
|
fun unbind() {
|
|
|
|
|
|
|
|
}
|
2020-01-31 03:57:24 +01:00
|
|
|
// endregion
|
2021-04-19 05:36:42 +02:00
|
|
|
}
|