mirror of
https://github.com/oxen-io/session-android.git
synced 2024-11-30 13:35:18 +00:00
Refactor ProfilePictureView
This commit is contained in:
parent
6d596226b3
commit
876e12c411
@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.components
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.RelativeLayout
|
import android.widget.RelativeLayout
|
||||||
@ -9,6 +10,7 @@ import androidx.annotation.DimenRes
|
|||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
import network.loki.messenger.R
|
import network.loki.messenger.R
|
||||||
import network.loki.messenger.databinding.ViewProfilePictureBinding
|
import network.loki.messenger.databinding.ViewProfilePictureBinding
|
||||||
|
import network.loki.messenger.databinding.ViewUserBinding
|
||||||
import org.session.libsession.avatars.ContactColors
|
import org.session.libsession.avatars.ContactColors
|
||||||
import org.session.libsession.avatars.PlaceholderAvatarPhoto
|
import org.session.libsession.avatars.PlaceholderAvatarPhoto
|
||||||
import org.session.libsession.avatars.ProfileContactPhoto
|
import org.session.libsession.avatars.ProfileContactPhoto
|
||||||
@ -23,7 +25,7 @@ import org.thoughtcrime.securesms.mms.GlideRequests
|
|||||||
class ProfilePictureView @JvmOverloads constructor(
|
class ProfilePictureView @JvmOverloads constructor(
|
||||||
context: Context, attrs: AttributeSet? = null
|
context: Context, attrs: AttributeSet? = null
|
||||||
) : RelativeLayout(context, attrs) {
|
) : RelativeLayout(context, attrs) {
|
||||||
private val binding: ViewProfilePictureBinding by lazy { ViewProfilePictureBinding.bind(this) }
|
private val binding = ViewProfilePictureBinding.inflate(LayoutInflater.from(context), this)
|
||||||
lateinit var glide: GlideRequests
|
lateinit var glide: GlideRequests
|
||||||
var publicKey: String? = null
|
var publicKey: String? = null
|
||||||
var displayName: String? = null
|
var displayName: String? = null
|
||||||
@ -37,6 +39,7 @@ class ProfilePictureView @JvmOverloads constructor(
|
|||||||
private val unknownOpenGroupDrawable = ResourceContactPhoto(R.drawable.ic_notification)
|
private val unknownOpenGroupDrawable = ResourceContactPhoto(R.drawable.ic_notification)
|
||||||
.asDrawable(context, ContactColors.UNKNOWN_COLOR.toConversationColor(context), false)
|
.asDrawable(context, ContactColors.UNKNOWN_COLOR.toConversationColor(context), false)
|
||||||
|
|
||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
// region Updating
|
// region Updating
|
||||||
|
@ -54,8 +54,8 @@ class UserView : LinearLayout {
|
|||||||
val threadID = DatabaseComponent.get(context).threadDatabase().getOrCreateThreadIdFor(user)
|
val threadID = DatabaseComponent.get(context).threadDatabase().getOrCreateThreadIdFor(user)
|
||||||
MentionManagerUtilities.populateUserPublicKeyCacheIfNeeded(threadID, context) // FIXME: This is a bad place to do this
|
MentionManagerUtilities.populateUserPublicKeyCacheIfNeeded(threadID, context) // FIXME: This is a bad place to do this
|
||||||
val address = user.address.serialize()
|
val address = user.address.serialize()
|
||||||
binding.profilePictureView.root.glide = glide
|
binding.profilePictureView.glide = glide
|
||||||
binding.profilePictureView.root.update(user)
|
binding.profilePictureView.update(user)
|
||||||
binding.actionIndicatorImageView.setImageResource(R.drawable.ic_baseline_edit_24)
|
binding.actionIndicatorImageView.setImageResource(R.drawable.ic_baseline_edit_24)
|
||||||
binding.nameTextView.text = if (user.isGroupRecipient) user.name else getUserDisplayName(address)
|
binding.nameTextView.text = if (user.isGroupRecipient) user.name else getUserDisplayName(address)
|
||||||
when (actionIndicator) {
|
when (actionIndicator) {
|
||||||
@ -87,7 +87,7 @@ class UserView : LinearLayout {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun unbind() {
|
fun unbind() {
|
||||||
binding.profilePictureView.root.recycle()
|
binding.profilePictureView.recycle()
|
||||||
}
|
}
|
||||||
// endregion
|
// endregion
|
||||||
}
|
}
|
||||||
|
@ -32,14 +32,14 @@ class ContactListAdapter(
|
|||||||
|
|
||||||
class ContactViewHolder(private val binding: ViewContactBinding) : RecyclerView.ViewHolder(binding.root) {
|
class ContactViewHolder(private val binding: ViewContactBinding) : RecyclerView.ViewHolder(binding.root) {
|
||||||
fun bind(contact: ContactListItem.Contact, glide: GlideRequests, listener: (Recipient) -> Unit) {
|
fun bind(contact: ContactListItem.Contact, glide: GlideRequests, listener: (Recipient) -> Unit) {
|
||||||
binding.profilePictureView.root.glide = glide
|
binding.profilePictureView.glide = glide
|
||||||
binding.profilePictureView.root.update(contact.recipient)
|
binding.profilePictureView.update(contact.recipient)
|
||||||
binding.nameTextView.text = contact.displayName
|
binding.nameTextView.text = contact.displayName
|
||||||
binding.root.setOnClickListener { listener(contact.recipient) }
|
binding.root.setOnClickListener { listener(contact.recipient) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun unbind() {
|
fun unbind() {
|
||||||
binding.profilePictureView.root.recycle()
|
binding.profilePictureView.recycle()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -467,10 +467,10 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
|||||||
R.dimen.small_profile_picture_size
|
R.dimen.small_profile_picture_size
|
||||||
}
|
}
|
||||||
val size = resources.getDimension(sizeID).roundToInt()
|
val size = resources.getDimension(sizeID).roundToInt()
|
||||||
binding.toolbarContent.profilePictureView.root.layoutParams = LinearLayout.LayoutParams(size, size)
|
binding.toolbarContent.profilePictureView.layoutParams = LinearLayout.LayoutParams(size, size)
|
||||||
binding.toolbarContent.profilePictureView.root.glide = glide
|
binding.toolbarContent.profilePictureView.glide = glide
|
||||||
MentionManagerUtilities.populateUserPublicKeyCacheIfNeeded(viewModel.threadId, this)
|
MentionManagerUtilities.populateUserPublicKeyCacheIfNeeded(viewModel.threadId, this)
|
||||||
val profilePictureView = binding.toolbarContent.profilePictureView.root
|
val profilePictureView = binding.toolbarContent.profilePictureView
|
||||||
viewModel.recipient?.let(profilePictureView::update)
|
viewModel.recipient?.let(profilePictureView::update)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -658,7 +658,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
|||||||
updateSendAfterApprovalText()
|
updateSendAfterApprovalText()
|
||||||
showOrHideInputIfNeeded()
|
showOrHideInputIfNeeded()
|
||||||
|
|
||||||
binding?.toolbarContent?.profilePictureView?.root?.update(threadRecipient)
|
binding?.toolbarContent?.profilePictureView?.update(threadRecipient)
|
||||||
binding?.toolbarContent?.conversationTitleView?.text = when {
|
binding?.toolbarContent?.conversationTitleView?.text = when {
|
||||||
threadRecipient.isLocalNumber -> getString(R.string.note_to_self)
|
threadRecipient.isLocalNumber -> getString(R.string.note_to_self)
|
||||||
else -> threadRecipient.toShortString()
|
else -> threadRecipient.toShortString()
|
||||||
|
@ -26,6 +26,7 @@ import androidx.compose.ui.text.font.FontFamily
|
|||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.compose.ui.viewinterop.AndroidView
|
||||||
import androidx.lifecycle.LiveData
|
import androidx.lifecycle.LiveData
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
@ -185,7 +186,9 @@ class MessageDetailActivity: PassphraseRequiredActionBarActivity() {
|
|||||||
Row {
|
Row {
|
||||||
Box(modifier = Modifier
|
Box(modifier = Modifier
|
||||||
.width(60.dp)
|
.width(60.dp)
|
||||||
.height(60.dp))
|
.height(60.dp)) {
|
||||||
|
|
||||||
|
}
|
||||||
Column {
|
Column {
|
||||||
titledText(it, valueStyle = LocalTextStyle.current.copy(fontFamily = FontFamily.Monospace))
|
titledText(it, valueStyle = LocalTextStyle.current.copy(fontFamily = FontFamily.Monospace))
|
||||||
}
|
}
|
||||||
|
@ -28,11 +28,11 @@ class MentionCandidateView : LinearLayout {
|
|||||||
|
|
||||||
private fun update() = with(binding) {
|
private fun update() = with(binding) {
|
||||||
mentionCandidateNameTextView.text = mentionCandidate.displayName
|
mentionCandidateNameTextView.text = mentionCandidate.displayName
|
||||||
profilePictureView.root.publicKey = mentionCandidate.publicKey
|
profilePictureView.publicKey = mentionCandidate.publicKey
|
||||||
profilePictureView.root.displayName = mentionCandidate.displayName
|
profilePictureView.displayName = mentionCandidate.displayName
|
||||||
profilePictureView.root.additionalPublicKey = null
|
profilePictureView.additionalPublicKey = null
|
||||||
profilePictureView.root.glide = glide!!
|
profilePictureView.glide = glide!!
|
||||||
profilePictureView.root.update()
|
profilePictureView.update()
|
||||||
if (openGroupServer != null && openGroupRoom != null) {
|
if (openGroupServer != null && openGroupRoom != null) {
|
||||||
val isUserModerator = OpenGroupManager.isUserModerator(context, "$openGroupRoom.$openGroupServer", mentionCandidate.publicKey)
|
val isUserModerator = OpenGroupManager.isUserModerator(context, "$openGroupRoom.$openGroupServer", mentionCandidate.publicKey)
|
||||||
moderatorIconImageView.visibility = if (isUserModerator) View.VISIBLE else View.GONE
|
moderatorIconImageView.visibility = if (isUserModerator) View.VISIBLE else View.GONE
|
||||||
|
@ -28,11 +28,11 @@ class MentionCandidateView : RelativeLayout {
|
|||||||
|
|
||||||
private fun update() = with(binding) {
|
private fun update() = with(binding) {
|
||||||
mentionCandidateNameTextView.text = candidate.displayName
|
mentionCandidateNameTextView.text = candidate.displayName
|
||||||
profilePictureView.root.publicKey = candidate.publicKey
|
profilePictureView.publicKey = candidate.publicKey
|
||||||
profilePictureView.root.displayName = candidate.displayName
|
profilePictureView.displayName = candidate.displayName
|
||||||
profilePictureView.root.additionalPublicKey = null
|
profilePictureView.additionalPublicKey = null
|
||||||
profilePictureView.root.glide = glide!!
|
profilePictureView.glide = glide!!
|
||||||
profilePictureView.root.update()
|
profilePictureView.update()
|
||||||
if (openGroupServer != null && openGroupRoom != null) {
|
if (openGroupServer != null && openGroupRoom != null) {
|
||||||
val isUserModerator = OpenGroupManager.isUserModerator(context, "$openGroupRoom.$openGroupServer", candidate.publicKey)
|
val isUserModerator = OpenGroupManager.isUserModerator(context, "$openGroupRoom.$openGroupServer", candidate.publicKey)
|
||||||
moderatorIconImageView.visibility = if (isUserModerator) View.VISIBLE else View.GONE
|
moderatorIconImageView.visibility = if (isUserModerator) View.VISIBLE else View.GONE
|
||||||
|
@ -136,7 +136,7 @@ class VisibleMessageView : LinearLayout {
|
|||||||
// Show profile picture and sender name if this is a group thread AND
|
// Show profile picture and sender name if this is a group thread AND
|
||||||
// the message is incoming
|
// the message is incoming
|
||||||
binding.moderatorIconImageView.isVisible = false
|
binding.moderatorIconImageView.isVisible = false
|
||||||
binding.profilePictureView.root.visibility = when {
|
binding.profilePictureView.visibility = when {
|
||||||
thread.isGroupRecipient && !message.isOutgoing && isEndOfMessageCluster -> View.VISIBLE
|
thread.isGroupRecipient && !message.isOutgoing && isEndOfMessageCluster -> View.VISIBLE
|
||||||
thread.isGroupRecipient -> View.INVISIBLE
|
thread.isGroupRecipient -> View.INVISIBLE
|
||||||
else -> View.GONE
|
else -> View.GONE
|
||||||
@ -145,22 +145,22 @@ class VisibleMessageView : LinearLayout {
|
|||||||
val bottomMargin = if (isEndOfMessageCluster) resources.getDimensionPixelSize(R.dimen.small_spacing)
|
val bottomMargin = if (isEndOfMessageCluster) resources.getDimensionPixelSize(R.dimen.small_spacing)
|
||||||
else ViewUtil.dpToPx(context,2)
|
else ViewUtil.dpToPx(context,2)
|
||||||
|
|
||||||
if (binding.profilePictureView.root.visibility == View.GONE) {
|
if (binding.profilePictureView.visibility == View.GONE) {
|
||||||
val expirationParams = binding.messageInnerContainer.layoutParams as MarginLayoutParams
|
val expirationParams = binding.messageInnerContainer.layoutParams as MarginLayoutParams
|
||||||
expirationParams.bottomMargin = bottomMargin
|
expirationParams.bottomMargin = bottomMargin
|
||||||
binding.messageInnerContainer.layoutParams = expirationParams
|
binding.messageInnerContainer.layoutParams = expirationParams
|
||||||
} else {
|
} else {
|
||||||
val avatarLayoutParams = binding.profilePictureView.root.layoutParams as MarginLayoutParams
|
val avatarLayoutParams = binding.profilePictureView.layoutParams as MarginLayoutParams
|
||||||
avatarLayoutParams.bottomMargin = bottomMargin
|
avatarLayoutParams.bottomMargin = bottomMargin
|
||||||
binding.profilePictureView.root.layoutParams = avatarLayoutParams
|
binding.profilePictureView.layoutParams = avatarLayoutParams
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isGroupThread && !message.isOutgoing) {
|
if (isGroupThread && !message.isOutgoing) {
|
||||||
if (isEndOfMessageCluster) {
|
if (isEndOfMessageCluster) {
|
||||||
binding.profilePictureView.root.publicKey = senderSessionID
|
binding.profilePictureView.publicKey = senderSessionID
|
||||||
binding.profilePictureView.root.glide = glide
|
binding.profilePictureView.glide = glide
|
||||||
binding.profilePictureView.root.update(message.individualRecipient)
|
binding.profilePictureView.update(message.individualRecipient)
|
||||||
binding.profilePictureView.root.setOnClickListener {
|
binding.profilePictureView.setOnClickListener {
|
||||||
if (thread.isOpenGroupRecipient) {
|
if (thread.isOpenGroupRecipient) {
|
||||||
val openGroup = lokiThreadDb.getOpenGroupChat(threadID)
|
val openGroup = lokiThreadDb.getOpenGroupChat(threadID)
|
||||||
if (IdPrefix.fromValue(senderSessionID) == IdPrefix.BLINDED && openGroup?.canWrite == true) {
|
if (IdPrefix.fromValue(senderSessionID) == IdPrefix.BLINDED && openGroup?.canWrite == true) {
|
||||||
@ -386,7 +386,7 @@ class VisibleMessageView : LinearLayout {
|
|||||||
val spacing = context.resources.getDimensionPixelSize(R.dimen.small_spacing)
|
val spacing = context.resources.getDimensionPixelSize(R.dimen.small_spacing)
|
||||||
val iconSize = toPx(24, context.resources)
|
val iconSize = toPx(24, context.resources)
|
||||||
val left = binding.messageInnerContainer.left + binding.messageContentView.root.right + spacing
|
val left = binding.messageInnerContainer.left + binding.messageContentView.root.right + spacing
|
||||||
val top = height - (binding.messageInnerContainer.height / 2) - binding.profilePictureView.root.marginBottom - (iconSize / 2)
|
val top = height - (binding.messageInnerContainer.height / 2) - binding.profilePictureView.marginBottom - (iconSize / 2)
|
||||||
val right = left + iconSize
|
val right = left + iconSize
|
||||||
val bottom = top + iconSize
|
val bottom = top + iconSize
|
||||||
swipeToReplyIconRect.left = left
|
swipeToReplyIconRect.left = left
|
||||||
@ -406,7 +406,7 @@ class VisibleMessageView : LinearLayout {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun recycle() {
|
fun recycle() {
|
||||||
binding.profilePictureView.root.recycle()
|
binding.profilePictureView.recycle()
|
||||||
binding.messageContentView.root.recycle()
|
binding.messageContentView.root.recycle()
|
||||||
}
|
}
|
||||||
// endregion
|
// endregion
|
||||||
|
@ -58,7 +58,7 @@ class ConversationView : LinearLayout {
|
|||||||
} else {
|
} else {
|
||||||
ContextCompat.getDrawable(context, R.drawable.conversation_view_background)
|
ContextCompat.getDrawable(context, R.drawable.conversation_view_background)
|
||||||
}
|
}
|
||||||
binding.profilePictureView.root.glide = glide
|
binding.profilePictureView.glide = glide
|
||||||
val unreadCount = thread.unreadCount
|
val unreadCount = thread.unreadCount
|
||||||
if (thread.recipient.isBlocked) {
|
if (thread.recipient.isBlocked) {
|
||||||
binding.accentView.setBackgroundResource(R.color.destructive)
|
binding.accentView.setBackgroundResource(R.color.destructive)
|
||||||
@ -117,11 +117,11 @@ class ConversationView : LinearLayout {
|
|||||||
thread.isRead -> binding.statusIndicatorImageView.setImageResource(R.drawable.ic_filled_circle_check)
|
thread.isRead -> binding.statusIndicatorImageView.setImageResource(R.drawable.ic_filled_circle_check)
|
||||||
else -> binding.statusIndicatorImageView.setImageResource(R.drawable.ic_circle_check)
|
else -> binding.statusIndicatorImageView.setImageResource(R.drawable.ic_circle_check)
|
||||||
}
|
}
|
||||||
binding.profilePictureView.root.update(thread.recipient)
|
binding.profilePictureView.update(thread.recipient)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun recycle() {
|
fun recycle() {
|
||||||
binding.profilePictureView.root.recycle()
|
binding.profilePictureView.recycle()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getUserDisplayName(recipient: Recipient): String? {
|
private fun getUserDisplayName(recipient: Recipient): String? {
|
||||||
|
@ -151,8 +151,8 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
|
|||||||
// Set up Glide
|
// Set up Glide
|
||||||
glide = GlideApp.with(this)
|
glide = GlideApp.with(this)
|
||||||
// Set up toolbar buttons
|
// Set up toolbar buttons
|
||||||
binding.profileButton.root.glide = glide
|
binding.profileButton.glide = glide
|
||||||
binding.profileButton.root.setOnClickListener { openSettings() }
|
binding.profileButton.setOnClickListener { openSettings() }
|
||||||
binding.searchViewContainer.setOnClickListener {
|
binding.searchViewContainer.setOnClickListener {
|
||||||
binding.globalSearchInputLayout.requestFocus()
|
binding.globalSearchInputLayout.requestFocus()
|
||||||
}
|
}
|
||||||
@ -317,8 +317,8 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
|
|||||||
ApplicationContext.getInstance(this).messageNotifier.setHomeScreenVisible(true)
|
ApplicationContext.getInstance(this).messageNotifier.setHomeScreenVisible(true)
|
||||||
if (textSecurePreferences.getLocalNumber() == null) { return; } // This can be the case after a secondary device is auto-cleared
|
if (textSecurePreferences.getLocalNumber() == null) { return; } // This can be the case after a secondary device is auto-cleared
|
||||||
IdentityKeyUtil.checkUpdate(this)
|
IdentityKeyUtil.checkUpdate(this)
|
||||||
binding.profileButton.root.recycle() // clear cached image before update tje profilePictureView
|
binding.profileButton.recycle() // clear cached image before update tje profilePictureView
|
||||||
binding.profileButton.root.update()
|
binding.profileButton.update()
|
||||||
if (textSecurePreferences.getHasViewedSeed()) {
|
if (textSecurePreferences.getHasViewedSeed()) {
|
||||||
binding.seedReminderView.isVisible = false
|
binding.seedReminderView.isVisible = false
|
||||||
}
|
}
|
||||||
@ -388,10 +388,10 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun updateProfileButton() {
|
private fun updateProfileButton() {
|
||||||
binding.profileButton.root.publicKey = publicKey
|
binding.profileButton.publicKey = publicKey
|
||||||
binding.profileButton.root.displayName = textSecurePreferences.getProfileName()
|
binding.profileButton.displayName = textSecurePreferences.getProfileName()
|
||||||
binding.profileButton.root.recycle()
|
binding.profileButton.recycle()
|
||||||
binding.profileButton.root.update()
|
binding.profileButton.update()
|
||||||
}
|
}
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
|
@ -55,10 +55,10 @@ class UserDetailsBottomSheet: BottomSheetDialogFragment() {
|
|||||||
val recipient = Recipient.from(requireContext(), Address.fromSerialized(publicKey), false)
|
val recipient = Recipient.from(requireContext(), Address.fromSerialized(publicKey), false)
|
||||||
val threadRecipient = threadDb.getRecipientForThreadId(threadID) ?: return dismiss()
|
val threadRecipient = threadDb.getRecipientForThreadId(threadID) ?: return dismiss()
|
||||||
with(binding) {
|
with(binding) {
|
||||||
profilePictureView.root.publicKey = publicKey
|
profilePictureView.publicKey = publicKey
|
||||||
profilePictureView.root.glide = GlideApp.with(this@UserDetailsBottomSheet)
|
profilePictureView.glide = GlideApp.with(this@UserDetailsBottomSheet)
|
||||||
profilePictureView.root.isLarge = true
|
profilePictureView.isLarge = true
|
||||||
profilePictureView.root.update(recipient)
|
profilePictureView.update(recipient)
|
||||||
nameTextViewContainer.visibility = View.VISIBLE
|
nameTextViewContainer.visibility = View.VISIBLE
|
||||||
nameTextViewContainer.setOnClickListener {
|
nameTextViewContainer.setOnClickListener {
|
||||||
nameTextViewContainer.visibility = View.INVISIBLE
|
nameTextViewContainer.visibility = View.INVISIBLE
|
||||||
|
@ -83,14 +83,14 @@ class GlobalSearchAdapter (private val modelCallback: (Model)->Unit): RecyclerVi
|
|||||||
|
|
||||||
override fun onViewRecycled(holder: RecyclerView.ViewHolder) {
|
override fun onViewRecycled(holder: RecyclerView.ViewHolder) {
|
||||||
if (holder is ContentView) {
|
if (holder is ContentView) {
|
||||||
holder.binding.searchResultProfilePicture.root.recycle()
|
holder.binding.searchResultProfilePicture.recycle()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ContentView(view: View, private val modelCallback: (Model) -> Unit) : RecyclerView.ViewHolder(view) {
|
class ContentView(view: View, private val modelCallback: (Model) -> Unit) : RecyclerView.ViewHolder(view) {
|
||||||
|
|
||||||
val binding = ViewGlobalSearchResultBinding.bind(view).apply {
|
val binding = ViewGlobalSearchResultBinding.bind(view).apply {
|
||||||
searchResultProfilePicture.root.glide = GlideApp.with(root)
|
searchResultProfilePicture.glide = GlideApp.with(root)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun bindPayload(newQuery: String, model: Model) {
|
fun bindPayload(newQuery: String, model: Model) {
|
||||||
@ -98,7 +98,7 @@ class GlobalSearchAdapter (private val modelCallback: (Model)->Unit): RecyclerVi
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun bind(query: String, model: Model) {
|
fun bind(query: String, model: Model) {
|
||||||
binding.searchResultProfilePicture.root.recycle()
|
binding.searchResultProfilePicture.recycle()
|
||||||
when (model) {
|
when (model) {
|
||||||
is Model.GroupConversation -> bindModel(query, model)
|
is Model.GroupConversation -> bindModel(query, model)
|
||||||
is Model.Contact -> bindModel(query, model)
|
is Model.Contact -> bindModel(query, model)
|
||||||
|
@ -85,12 +85,12 @@ private fun getHighlight(query: String?, toSearch: String): Spannable? {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun ContentView.bindModel(query: String?, model: GroupConversation) {
|
fun ContentView.bindModel(query: String?, model: GroupConversation) {
|
||||||
binding.searchResultProfilePicture.root.isVisible = true
|
binding.searchResultProfilePicture.isVisible = true
|
||||||
binding.searchResultSavedMessages.isVisible = false
|
binding.searchResultSavedMessages.isVisible = false
|
||||||
binding.searchResultSubtitle.isVisible = model.groupRecord.isClosedGroup
|
binding.searchResultSubtitle.isVisible = model.groupRecord.isClosedGroup
|
||||||
binding.searchResultTimestamp.isVisible = false
|
binding.searchResultTimestamp.isVisible = false
|
||||||
val threadRecipient = Recipient.from(binding.root.context, Address.fromSerialized(model.groupRecord.encodedId), false)
|
val threadRecipient = Recipient.from(binding.root.context, Address.fromSerialized(model.groupRecord.encodedId), false)
|
||||||
binding.searchResultProfilePicture.root.update(threadRecipient)
|
binding.searchResultProfilePicture.update(threadRecipient)
|
||||||
val nameString = model.groupRecord.title
|
val nameString = model.groupRecord.title
|
||||||
binding.searchResultTitle.text = getHighlight(query, nameString)
|
binding.searchResultTitle.text = getHighlight(query, nameString)
|
||||||
|
|
||||||
@ -106,14 +106,14 @@ fun ContentView.bindModel(query: String?, model: GroupConversation) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun ContentView.bindModel(query: String?, model: ContactModel) {
|
fun ContentView.bindModel(query: String?, model: ContactModel) {
|
||||||
binding.searchResultProfilePicture.root.isVisible = true
|
binding.searchResultProfilePicture.isVisible = true
|
||||||
binding.searchResultSavedMessages.isVisible = false
|
binding.searchResultSavedMessages.isVisible = false
|
||||||
binding.searchResultSubtitle.isVisible = false
|
binding.searchResultSubtitle.isVisible = false
|
||||||
binding.searchResultTimestamp.isVisible = false
|
binding.searchResultTimestamp.isVisible = false
|
||||||
binding.searchResultSubtitle.text = null
|
binding.searchResultSubtitle.text = null
|
||||||
val recipient =
|
val recipient =
|
||||||
Recipient.from(binding.root.context, Address.fromSerialized(model.contact.sessionID), false)
|
Recipient.from(binding.root.context, Address.fromSerialized(model.contact.sessionID), false)
|
||||||
binding.searchResultProfilePicture.root.update(recipient)
|
binding.searchResultProfilePicture.update(recipient)
|
||||||
val nameString = model.contact.getSearchName()
|
val nameString = model.contact.getSearchName()
|
||||||
binding.searchResultTitle.text = getHighlight(query, nameString)
|
binding.searchResultTitle.text = getHighlight(query, nameString)
|
||||||
}
|
}
|
||||||
@ -122,12 +122,12 @@ fun ContentView.bindModel(model: SavedMessages) {
|
|||||||
binding.searchResultSubtitle.isVisible = false
|
binding.searchResultSubtitle.isVisible = false
|
||||||
binding.searchResultTimestamp.isVisible = false
|
binding.searchResultTimestamp.isVisible = false
|
||||||
binding.searchResultTitle.setText(R.string.note_to_self)
|
binding.searchResultTitle.setText(R.string.note_to_self)
|
||||||
binding.searchResultProfilePicture.root.isVisible = false
|
binding.searchResultProfilePicture.isVisible = false
|
||||||
binding.searchResultSavedMessages.isVisible = true
|
binding.searchResultSavedMessages.isVisible = true
|
||||||
}
|
}
|
||||||
|
|
||||||
fun ContentView.bindModel(query: String?, model: Message) {
|
fun ContentView.bindModel(query: String?, model: Message) {
|
||||||
binding.searchResultProfilePicture.root.isVisible = true
|
binding.searchResultProfilePicture.isVisible = true
|
||||||
binding.searchResultSavedMessages.isVisible = false
|
binding.searchResultSavedMessages.isVisible = false
|
||||||
binding.searchResultTimestamp.isVisible = true
|
binding.searchResultTimestamp.isVisible = true
|
||||||
// val hasUnreads = model.unread > 0
|
// val hasUnreads = model.unread > 0
|
||||||
@ -136,7 +136,7 @@ fun ContentView.bindModel(query: String?, model: Message) {
|
|||||||
// binding.unreadCountTextView.text = model.unread.toString()
|
// binding.unreadCountTextView.text = model.unread.toString()
|
||||||
// }
|
// }
|
||||||
binding.searchResultTimestamp.text = DateUtils.getDisplayFormattedTimeSpanString(binding.root.context, Locale.getDefault(), model.messageResult.sentTimestampMs)
|
binding.searchResultTimestamp.text = DateUtils.getDisplayFormattedTimeSpanString(binding.root.context, Locale.getDefault(), model.messageResult.sentTimestampMs)
|
||||||
binding.searchResultProfilePicture.root.update(model.messageResult.conversationRecipient)
|
binding.searchResultProfilePicture.update(model.messageResult.conversationRecipient)
|
||||||
val textSpannable = SpannableStringBuilder()
|
val textSpannable = SpannableStringBuilder()
|
||||||
if (model.messageResult.conversationRecipient != model.messageResult.messageRecipient) {
|
if (model.messageResult.conversationRecipient != model.messageResult.messageRecipient) {
|
||||||
// group chat, bind
|
// group chat, bind
|
||||||
|
@ -34,7 +34,7 @@ class MessageRequestView : LinearLayout {
|
|||||||
// region Updating
|
// region Updating
|
||||||
fun bind(thread: ThreadRecord, glide: GlideRequests) {
|
fun bind(thread: ThreadRecord, glide: GlideRequests) {
|
||||||
this.thread = thread
|
this.thread = thread
|
||||||
binding.profilePictureView.root.glide = glide
|
binding.profilePictureView.glide = glide
|
||||||
val senderDisplayName = getUserDisplayName(thread.recipient)
|
val senderDisplayName = getUserDisplayName(thread.recipient)
|
||||||
?: thread.recipient.address.toString()
|
?: thread.recipient.address.toString()
|
||||||
binding.displayNameTextView.text = senderDisplayName
|
binding.displayNameTextView.text = senderDisplayName
|
||||||
@ -44,12 +44,12 @@ class MessageRequestView : LinearLayout {
|
|||||||
binding.snippetTextView.text = snippet
|
binding.snippetTextView.text = snippet
|
||||||
|
|
||||||
post {
|
post {
|
||||||
binding.profilePictureView.root.update(thread.recipient)
|
binding.profilePictureView.update(thread.recipient)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun recycle() {
|
fun recycle() {
|
||||||
binding.profilePictureView.root.recycle()
|
binding.profilePictureView.recycle()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getUserDisplayName(recipient: Recipient): String? {
|
private fun getUserDisplayName(recipient: Recipient): String? {
|
||||||
|
@ -38,7 +38,7 @@ class BlockedContactsAdapter(val viewModel: BlockedContactsViewModel) : ListAdap
|
|||||||
|
|
||||||
override fun onViewRecycled(holder: ViewHolder) {
|
override fun onViewRecycled(holder: ViewHolder) {
|
||||||
super.onViewRecycled(holder)
|
super.onViewRecycled(holder)
|
||||||
holder.binding.profilePictureView.root.recycle()
|
holder.binding.profilePictureView.recycle()
|
||||||
}
|
}
|
||||||
|
|
||||||
class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
|
class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
|
||||||
@ -48,7 +48,7 @@ class BlockedContactsAdapter(val viewModel: BlockedContactsViewModel) : ListAdap
|
|||||||
|
|
||||||
fun bind(selectable: SelectableRecipient, toggle: (SelectableRecipient) -> Unit) {
|
fun bind(selectable: SelectableRecipient, toggle: (SelectableRecipient) -> Unit) {
|
||||||
binding.recipientName.text = selectable.item.name
|
binding.recipientName.text = selectable.item.name
|
||||||
with (binding.profilePictureView.root) {
|
with (binding.profilePictureView) {
|
||||||
glide = this@ViewHolder.glide
|
glide = this@ViewHolder.glide
|
||||||
update(selectable.item)
|
update(selectable.item)
|
||||||
}
|
}
|
||||||
|
@ -75,8 +75,8 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
|
|||||||
val displayName = getDisplayName()
|
val displayName = getDisplayName()
|
||||||
glide = GlideApp.with(this)
|
glide = GlideApp.with(this)
|
||||||
with(binding) {
|
with(binding) {
|
||||||
setupProfilePictureView(profilePictureView.root)
|
setupProfilePictureView(profilePictureView)
|
||||||
profilePictureView.root.setOnClickListener { showEditProfilePictureUI() }
|
profilePictureView.setOnClickListener { showEditProfilePictureUI() }
|
||||||
ctnGroupNameSection.setOnClickListener { startActionMode(DisplayNameEditActionModeCallback()) }
|
ctnGroupNameSection.setOnClickListener { startActionMode(DisplayNameEditActionModeCallback()) }
|
||||||
btnGroupNameDisplay.text = displayName
|
btnGroupNameDisplay.text = displayName
|
||||||
publicKeyTextView.text = hexEncodedPublicKey
|
publicKeyTextView.text = hexEncodedPublicKey
|
||||||
@ -231,8 +231,8 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
|
|||||||
binding.btnGroupNameDisplay.text = displayName
|
binding.btnGroupNameDisplay.text = displayName
|
||||||
}
|
}
|
||||||
if (isUpdatingProfilePicture) {
|
if (isUpdatingProfilePicture) {
|
||||||
binding.profilePictureView.root.recycle() // Clear the cached image before updating
|
binding.profilePictureView.recycle() // Clear the cached image before updating
|
||||||
binding.profilePictureView.root.update()
|
binding.profilePictureView.update()
|
||||||
}
|
}
|
||||||
binding.loader.isVisible = false
|
binding.loader.isVisible = false
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:gravity="center_vertical">
|
android:gravity="center_vertical">
|
||||||
|
|
||||||
<include layout="@layout/view_profile_picture"
|
<org.thoughtcrime.securesms.components.ProfilePictureView
|
||||||
android:id="@+id/profilePictureView"
|
android:id="@+id/profilePictureView"
|
||||||
android:layout_width="@dimen/medium_profile_picture_size"
|
android:layout_width="@dimen/medium_profile_picture_size"
|
||||||
android:layout_height="@dimen/medium_profile_picture_size" />
|
android:layout_height="@dimen/medium_profile_picture_size" />
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
android:layout_marginLeft="20dp"
|
android:layout_marginLeft="20dp"
|
||||||
android:layout_marginRight="20dp">
|
android:layout_marginRight="20dp">
|
||||||
|
|
||||||
<include layout="@layout/view_profile_picture"
|
<org.thoughtcrime.securesms.components.ProfilePictureView
|
||||||
android:id="@+id/profileButton"
|
android:id="@+id/profileButton"
|
||||||
android:layout_width="@dimen/small_profile_picture_size"
|
android:layout_width="@dimen/small_profile_picture_size"
|
||||||
android:layout_height="@dimen/small_profile_picture_size"
|
android:layout_height="@dimen/small_profile_picture_size"
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:gravity="center_horizontal">
|
android:gravity="center_horizontal">
|
||||||
|
|
||||||
<include layout="@layout/view_profile_picture"
|
<org.thoughtcrime.securesms.components.ProfilePictureView
|
||||||
android:id="@+id/profilePictureView"
|
android:id="@+id/profilePictureView"
|
||||||
android:layout_width="@dimen/large_profile_picture_size"
|
android:layout_width="@dimen/large_profile_picture_size"
|
||||||
android:layout_height="@dimen/large_profile_picture_size"
|
android:layout_height="@dimen/large_profile_picture_size"
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:background="?selectableItemBackground"
|
android:background="?selectableItemBackground"
|
||||||
android:id="@+id/backgroundContainer">
|
android:id="@+id/backgroundContainer">
|
||||||
<include layout="@layout/view_profile_picture"
|
<org.thoughtcrime.securesms.components.ProfilePictureView
|
||||||
android:id="@+id/profilePictureView"
|
android:id="@+id/profilePictureView"
|
||||||
android:layout_height="@dimen/small_profile_picture_size"
|
android:layout_height="@dimen/small_profile_picture_size"
|
||||||
android:layout_width="@dimen/small_profile_picture_size"
|
android:layout_width="@dimen/small_profile_picture_size"
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
<include layout="@layout/view_profile_picture"
|
<org.thoughtcrime.securesms.components.ProfilePictureView
|
||||||
android:layout_margin="30dp"
|
android:layout_margin="30dp"
|
||||||
android:id="@+id/profile_picture_view"
|
android:id="@+id/profile_picture_view"
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
app:behavior_hideable="true"
|
app:behavior_hideable="true"
|
||||||
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
|
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
|
||||||
|
|
||||||
<include layout="@layout/view_profile_picture"
|
<org.thoughtcrime.securesms.components.ProfilePictureView
|
||||||
android:id="@+id/profilePictureView"
|
android:id="@+id/profilePictureView"
|
||||||
android:layout_width="@dimen/large_profile_picture_size"
|
android:layout_width="@dimen/large_profile_picture_size"
|
||||||
android:layout_height="@dimen/large_profile_picture_size"
|
android:layout_height="@dimen/large_profile_picture_size"
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
app:behavior_hideable="true"
|
app:behavior_hideable="true"
|
||||||
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
|
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
|
||||||
|
|
||||||
<include layout="@layout/view_profile_picture"
|
<org.thoughtcrime.securesms.components.ProfilePictureView
|
||||||
android:id="@+id/profilePictureView"
|
android:id="@+id/profilePictureView"
|
||||||
android:layout_width="@dimen/large_profile_picture_size"
|
android:layout_width="@dimen/large_profile_picture_size"
|
||||||
android:layout_height="@dimen/large_profile_picture_size"
|
android:layout_height="@dimen/large_profile_picture_size"
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="52dp">
|
android:layout_height="52dp">
|
||||||
|
|
||||||
<include layout="@layout/view_profile_picture"
|
<org.thoughtcrime.securesms.components.ProfilePictureView
|
||||||
android:id="@+id/reactions_bottom_view_avatar"
|
android:id="@+id/reactions_bottom_view_avatar"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
android:paddingHorizontal="@dimen/large_spacing"
|
android:paddingHorizontal="@dimen/large_spacing"
|
||||||
android:paddingVertical="@dimen/small_spacing">
|
android:paddingVertical="@dimen/small_spacing">
|
||||||
|
|
||||||
<include layout="@layout/view_profile_picture"
|
<org.thoughtcrime.securesms.components.ProfilePictureView
|
||||||
android:id="@+id/profilePictureView"
|
android:id="@+id/profilePictureView"
|
||||||
android:layout_width="@dimen/small_profile_picture_size"
|
android:layout_width="@dimen/small_profile_picture_size"
|
||||||
android:layout_height="@dimen/small_profile_picture_size" />
|
android:layout_height="@dimen/small_profile_picture_size" />
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="?colorAccent" />
|
android:background="?colorAccent" />
|
||||||
|
|
||||||
<include layout="@layout/view_profile_picture"
|
<org.thoughtcrime.securesms.components.ProfilePictureView
|
||||||
android:id="@+id/profilePictureView"
|
android:id="@+id/profilePictureView"
|
||||||
android:layout_width="@dimen/medium_profile_picture_size"
|
android:layout_width="@dimen/medium_profile_picture_size"
|
||||||
android:layout_height="@dimen/medium_profile_picture_size"
|
android:layout_height="@dimen/medium_profile_picture_size"
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
android:id="@+id/search_result_profile_picture_parent"
|
android:id="@+id/search_result_profile_picture_parent"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
<include layout="@layout/view_profile_picture"
|
<org.thoughtcrime.securesms.components.ProfilePictureView
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
android:id="@+id/search_result_profile_picture"
|
android:id="@+id/search_result_profile_picture"
|
||||||
android:layout_width="@dimen/medium_profile_picture_size"
|
android:layout_width="@dimen/medium_profile_picture_size"
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
android:layout_width="26dp"
|
android:layout_width="26dp"
|
||||||
android:layout_height="32dp">
|
android:layout_height="32dp">
|
||||||
|
|
||||||
<include layout="@layout/view_profile_picture"
|
<org.thoughtcrime.securesms.components.ProfilePictureView
|
||||||
android:id="@+id/profilePictureView"
|
android:id="@+id/profilePictureView"
|
||||||
android:layout_width="@dimen/very_small_profile_picture_size"
|
android:layout_width="@dimen/very_small_profile_picture_size"
|
||||||
android:layout_height="@dimen/very_small_profile_picture_size"
|
android:layout_height="@dimen/very_small_profile_picture_size"
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
android:layout_width="26dp"
|
android:layout_width="26dp"
|
||||||
android:layout_height="32dp">
|
android:layout_height="32dp">
|
||||||
|
|
||||||
<include layout="@layout/view_profile_picture"
|
<org.thoughtcrime.securesms.components.ProfilePictureView
|
||||||
android:id="@+id/profilePictureView"
|
android:id="@+id/profilePictureView"
|
||||||
android:layout_width="@dimen/very_small_profile_picture_size"
|
android:layout_width="@dimen/very_small_profile_picture_size"
|
||||||
android:layout_height="@dimen/very_small_profile_picture_size"
|
android:layout_height="@dimen/very_small_profile_picture_size"
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<include layout="@layout/view_profile_picture"
|
<org.thoughtcrime.securesms.components.ProfilePictureView
|
||||||
android:id="@+id/profilePictureView"
|
android:id="@+id/profilePictureView"
|
||||||
android:layout_width="@dimen/medium_profile_picture_size"
|
android:layout_width="@dimen/medium_profile_picture_size"
|
||||||
android:layout_height="@dimen/medium_profile_picture_size"
|
android:layout_height="@dimen/medium_profile_picture_size"
|
||||||
|
@ -1,9 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<org.thoughtcrime.securesms.components.ProfilePictureView
|
<merge xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
android:contentDescription="@string/AccessibilityId_profile_picture"
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/doubleModeImageViewContainer"
|
android:id="@+id/doubleModeImageViewContainer"
|
||||||
@ -40,4 +36,4 @@
|
|||||||
android:layout_height="@dimen/large_profile_picture_size"
|
android:layout_height="@dimen/large_profile_picture_size"
|
||||||
android:background="@drawable/profile_picture_view_large_background" />
|
android:background="@drawable/profile_picture_view_large_background" />
|
||||||
|
|
||||||
</org.thoughtcrime.securesms.components.ProfilePictureView>
|
</merge>
|
@ -15,7 +15,7 @@
|
|||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:paddingHorizontal="@dimen/medium_spacing">
|
android:paddingHorizontal="@dimen/medium_spacing">
|
||||||
|
|
||||||
<include layout="@layout/view_profile_picture"
|
<org.thoughtcrime.securesms.components.ProfilePictureView
|
||||||
android:id="@+id/profilePictureView"
|
android:id="@+id/profilePictureView"
|
||||||
android:layout_width="@dimen/small_profile_picture_size"
|
android:layout_width="@dimen/small_profile_picture_size"
|
||||||
android:layout_height="@dimen/small_profile_picture_size"
|
android:layout_height="@dimen/small_profile_picture_size"
|
||||||
|
@ -27,9 +27,8 @@
|
|||||||
android:gravity="bottom"
|
android:gravity="bottom"
|
||||||
android:paddingBottom="@dimen/small_spacing">
|
android:paddingBottom="@dimen/small_spacing">
|
||||||
|
|
||||||
<include
|
<org.thoughtcrime.securesms.components.ProfilePictureView
|
||||||
android:id="@+id/profilePictureView"
|
android:id="@+id/profilePictureView"
|
||||||
layout="@layout/view_profile_picture"
|
|
||||||
android:layout_marginBottom="@dimen/small_spacing"
|
android:layout_marginBottom="@dimen/small_spacing"
|
||||||
android:layout_marginEnd="@dimen/small_spacing"
|
android:layout_marginEnd="@dimen/small_spacing"
|
||||||
android:layout_width="@dimen/very_small_profile_picture_size"
|
android:layout_width="@dimen/very_small_profile_picture_size"
|
||||||
|
Loading…
Reference in New Issue
Block a user