mirror of
https://github.com/oxen-io/session-android.git
synced 2024-12-24 16:57:50 +00:00
Getting the recipient from the VM (#1694)
This commit is contained in:
parent
3e17ab2b06
commit
16cca2d3cc
@ -36,6 +36,7 @@ class ProfilePictureView @JvmOverloads constructor(
|
||||
var displayName: String? = null
|
||||
var additionalPublicKey: String? = null
|
||||
var additionalDisplayName: String? = null
|
||||
var recipient: Recipient? = null
|
||||
|
||||
private val profilePicturesCache = mutableMapOf<View, Recipient>()
|
||||
private val resourcePadding by lazy {
|
||||
@ -51,6 +52,7 @@ class ProfilePictureView @JvmOverloads constructor(
|
||||
}
|
||||
|
||||
fun update(recipient: Recipient) {
|
||||
this.recipient = recipient
|
||||
recipient.run { update(address, isClosedGroupRecipient, isOpenGroupInboxRecipient) }
|
||||
}
|
||||
|
||||
@ -121,7 +123,14 @@ class ProfilePictureView @JvmOverloads constructor(
|
||||
|
||||
private fun setProfilePictureIfNeeded(imageView: ImageView, publicKey: String, displayName: String?) {
|
||||
if (publicKey.isNotEmpty()) {
|
||||
val recipient = Recipient.from(context, Address.fromSerialized(publicKey), false)
|
||||
// if we already have a recipient that matches the current key, reuse it
|
||||
val recipient = if(this.recipient != null && this.recipient?.address?.serialize() == publicKey){
|
||||
this.recipient!!
|
||||
}
|
||||
else {
|
||||
this.recipient = Recipient.from(context, Address.fromSerialized(publicKey), false)
|
||||
this.recipient!!
|
||||
}
|
||||
if (profilePicturesCache[imageView] == recipient) return
|
||||
profilePicturesCache[imageView] = recipient
|
||||
val signalProfilePicture = recipient.contactPhoto
|
||||
|
@ -173,11 +173,6 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
|
||||
}
|
||||
|
||||
binding.run {
|
||||
profilePictureView.apply {
|
||||
publicKey = viewModel.hexEncodedPublicKey
|
||||
displayName = viewModel.getDisplayName()
|
||||
update()
|
||||
}
|
||||
profilePictureView.setOnClickListener {
|
||||
binding.avatarDialog.isVisible = true
|
||||
showAvatarDialog = true
|
||||
@ -209,6 +204,18 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
|
||||
binding.profilePictureView.update()
|
||||
}
|
||||
}
|
||||
|
||||
lifecycleScope.launch {
|
||||
viewModel.avatarData.collect {
|
||||
if(it == null) return@collect
|
||||
|
||||
binding.profilePictureView.apply {
|
||||
publicKey = it.publicKey
|
||||
displayName = it.displayName
|
||||
update(it.recipient)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
|
@ -26,6 +26,7 @@ import org.session.libsession.utilities.Address
|
||||
import org.session.libsession.utilities.ProfileKeyUtil
|
||||
import org.session.libsession.utilities.ProfilePictureUtilities
|
||||
import org.session.libsession.utilities.TextSecurePreferences
|
||||
import org.session.libsession.utilities.recipients.Recipient
|
||||
import org.session.libsession.utilities.truncateIdForDisplay
|
||||
import org.session.libsignal.utilities.ExternalStorageUtil.getImageDir
|
||||
import org.session.libsignal.utilities.Log
|
||||
@ -52,7 +53,7 @@ class SettingsViewModel @Inject constructor(
|
||||
|
||||
private var tempFile: File? = null
|
||||
|
||||
val hexEncodedPublicKey: String get() = prefs.getLocalNumber() ?: ""
|
||||
val hexEncodedPublicKey: String = prefs.getLocalNumber() ?: ""
|
||||
|
||||
private val userAddress = Address.fromSerialized(hexEncodedPublicKey)
|
||||
|
||||
@ -70,6 +71,10 @@ class SettingsViewModel @Inject constructor(
|
||||
val recoveryHidden: StateFlow<Boolean>
|
||||
get() = _recoveryHidden
|
||||
|
||||
private val _avatarData: MutableStateFlow<AvatarData?> = MutableStateFlow(null)
|
||||
val avatarData: StateFlow<AvatarData?>
|
||||
get() = _avatarData
|
||||
|
||||
/**
|
||||
* Refreshes the avatar on the main settings page
|
||||
*/
|
||||
@ -77,6 +82,19 @@ class SettingsViewModel @Inject constructor(
|
||||
val refreshAvatar: SharedFlow<Unit>
|
||||
get() = _refreshAvatar.asSharedFlow()
|
||||
|
||||
init {
|
||||
viewModelScope.launch(Dispatchers.Default) {
|
||||
val recipient = Recipient.from(context, Address.fromSerialized(hexEncodedPublicKey), false)
|
||||
_avatarData.update {
|
||||
AvatarData(
|
||||
publicKey = hexEncodedPublicKey,
|
||||
displayName = getDisplayName(),
|
||||
recipient = recipient
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getDisplayName(): String =
|
||||
prefs.getProfileName() ?: truncateIdForDisplay(hexEncodedPublicKey)
|
||||
|
||||
@ -249,4 +267,10 @@ class SettingsViewModel @Inject constructor(
|
||||
val hasAvatar: Boolean // true if the user has an avatar set already but is in this temp state because they are trying out a new avatar
|
||||
) : AvatarDialogState()
|
||||
}
|
||||
|
||||
data class AvatarData(
|
||||
val publicKey: String,
|
||||
val displayName: String,
|
||||
val recipient: Recipient
|
||||
)
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user