fix: recipient blinded checks from open group message for blocking community requests on blinded ID version of recipient, use correct (inverted) values from before for checking polling and empty states etc
This commit is contained in:
parent
3269cfa4de
commit
afbc635d17
|
@ -10,7 +10,6 @@ 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
|
||||||
|
@ -74,7 +73,7 @@ class ProfilePictureView @JvmOverloads constructor(
|
||||||
additionalDisplayName = getUserDisplayName(apk)
|
additionalDisplayName = getUserDisplayName(apk)
|
||||||
}
|
}
|
||||||
} else if(recipient.isOpenGroupInboxRecipient) {
|
} else if(recipient.isOpenGroupInboxRecipient) {
|
||||||
val publicKey = GroupUtil.getDecodedOpenGroupInbox(recipient.address.serialize())
|
val publicKey = GroupUtil.getDecodedOpenGroupInboxSessionId(recipient.address.serialize())
|
||||||
this.publicKey = publicKey
|
this.publicKey = publicKey
|
||||||
displayName = getUserDisplayName(publicKey)
|
displayName = getUserDisplayName(publicKey)
|
||||||
additionalPublicKey = null
|
additionalPublicKey = null
|
||||||
|
|
|
@ -87,6 +87,7 @@ import org.session.libsession.messaging.utilities.SessionId
|
||||||
import org.session.libsession.snode.SnodeAPI
|
import org.session.libsession.snode.SnodeAPI
|
||||||
import org.session.libsession.utilities.Address
|
import org.session.libsession.utilities.Address
|
||||||
import org.session.libsession.utilities.Address.Companion.fromSerialized
|
import org.session.libsession.utilities.Address.Companion.fromSerialized
|
||||||
|
import org.session.libsession.utilities.GroupUtil
|
||||||
import org.session.libsession.utilities.MediaTypes
|
import org.session.libsession.utilities.MediaTypes
|
||||||
import org.session.libsession.utilities.Stub
|
import org.session.libsession.utilities.Stub
|
||||||
import org.session.libsession.utilities.TextSecurePreferences
|
import org.session.libsession.utilities.TextSecurePreferences
|
||||||
|
@ -239,7 +240,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
||||||
val address = if (sessionId.prefix == IdPrefix.BLINDED && openGroup != null) {
|
val address = if (sessionId.prefix == IdPrefix.BLINDED && openGroup != null) {
|
||||||
storage.getOrCreateBlindedIdMapping(sessionId.hexString, openGroup.server, openGroup.publicKey).sessionId?.let {
|
storage.getOrCreateBlindedIdMapping(sessionId.hexString, openGroup.server, openGroup.publicKey).sessionId?.let {
|
||||||
fromSerialized(it)
|
fromSerialized(it)
|
||||||
} ?: fromSerialized(sessionId.hexString)
|
} ?: GroupUtil.getEncodedOpenGroupInboxID(openGroup, sessionId)
|
||||||
} else {
|
} else {
|
||||||
it
|
it
|
||||||
}
|
}
|
||||||
|
@ -248,7 +249,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
||||||
}
|
}
|
||||||
} ?: finish()
|
} ?: finish()
|
||||||
}
|
}
|
||||||
viewModelFactory.create(threadId, MessagingModuleConfiguration.shared.getUserED25519KeyPair(), contentResolver)
|
viewModelFactory.create(this@ConversationActivityV2, threadId, MessagingModuleConfiguration.shared.getUserED25519KeyPair(), contentResolver)
|
||||||
}
|
}
|
||||||
private var actionMode: ActionMode? = null
|
private var actionMode: ActionMode? = null
|
||||||
private var unreadCount = 0
|
private var unreadCount = 0
|
||||||
|
@ -591,10 +592,10 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
||||||
|
|
||||||
// called from onCreate
|
// called from onCreate
|
||||||
private fun setUpInputBar() {
|
private fun setUpInputBar() {
|
||||||
val recipient = viewModel.recipient ?: return
|
val blindedRecipient = viewModel.blindedRecipient
|
||||||
binding!!.inputBar.isVisible =
|
binding!!.inputBar.isVisible =
|
||||||
viewModel.openGroup?.canWrite == true
|
viewModel.openGroup?.canWrite == true
|
||||||
|| (viewModel.openGroup == null && !recipient.blocksCommunityMessageRequests)
|
|| (blindedRecipient == null || !blindedRecipient.blocksCommunityMessageRequests)
|
||||||
binding!!.inputBar.delegate = this
|
binding!!.inputBar.delegate = this
|
||||||
binding!!.inputBarRecordingView.delegate = this
|
binding!!.inputBarRecordingView.delegate = this
|
||||||
// GIF button
|
// GIF button
|
||||||
|
@ -1068,12 +1069,13 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
||||||
private fun updatePlaceholder() {
|
private fun updatePlaceholder() {
|
||||||
val recipient = viewModel.recipient
|
val recipient = viewModel.recipient
|
||||||
?: return Log.w("Loki", "recipient was null in placeholder update")
|
?: return Log.w("Loki", "recipient was null in placeholder update")
|
||||||
|
val blindedRecipient = viewModel.blindedRecipient
|
||||||
val binding = binding ?: return
|
val binding = binding ?: return
|
||||||
val openGroup = viewModel.openGroup
|
val openGroup = viewModel.openGroup
|
||||||
val (textResource, insertParam) = when {
|
val (textResource, insertParam) = when {
|
||||||
recipient.isLocalNumber -> R.string.activity_conversation_empty_state_note_to_self to null
|
recipient.isLocalNumber -> R.string.activity_conversation_empty_state_note_to_self to null
|
||||||
openGroup != null && !openGroup.canWrite -> R.string.activity_conversation_empty_state_read_only to recipient.toShortString()
|
openGroup != null && !openGroup.canWrite -> R.string.activity_conversation_empty_state_read_only to recipient.toShortString()
|
||||||
openGroup == null && recipient.blocksCommunityMessageRequests -> R.string.activity_conversation_empty_state_blocks_community_requests to recipient.toShortString()
|
blindedRecipient != null && blindedRecipient.blocksCommunityMessageRequests -> R.string.activity_conversation_empty_state_blocks_community_requests to recipient.toShortString()
|
||||||
else -> R.string.activity_conversation_empty_state_default to recipient.toShortString()
|
else -> R.string.activity_conversation_empty_state_default to recipient.toShortString()
|
||||||
}
|
}
|
||||||
val showPlaceholder = adapter.itemCount == 0
|
val showPlaceholder = adapter.itemCount == 0
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package org.thoughtcrime.securesms.conversation.v2
|
package org.thoughtcrime.securesms.conversation.v2
|
||||||
|
|
||||||
import android.content.ContentResolver
|
import android.content.ContentResolver
|
||||||
|
import android.content.Context
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
|
@ -8,6 +9,7 @@ import app.cash.copper.flow.observeQuery
|
||||||
import com.goterl.lazysodium.utils.KeyPair
|
import com.goterl.lazysodium.utils.KeyPair
|
||||||
import dagger.assisted.Assisted
|
import dagger.assisted.Assisted
|
||||||
import dagger.assisted.AssistedInject
|
import dagger.assisted.AssistedInject
|
||||||
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
@ -18,6 +20,8 @@ import org.session.libsession.messaging.open_groups.OpenGroup
|
||||||
import org.session.libsession.messaging.open_groups.OpenGroupApi
|
import org.session.libsession.messaging.open_groups.OpenGroupApi
|
||||||
import org.session.libsession.messaging.utilities.SessionId
|
import org.session.libsession.messaging.utilities.SessionId
|
||||||
import org.session.libsession.messaging.utilities.SodiumUtilities
|
import org.session.libsession.messaging.utilities.SodiumUtilities
|
||||||
|
import org.session.libsession.utilities.Address
|
||||||
|
import org.session.libsession.utilities.GroupUtil
|
||||||
import org.session.libsession.utilities.recipients.Recipient
|
import org.session.libsession.utilities.recipients.Recipient
|
||||||
import org.session.libsignal.utilities.IdPrefix
|
import org.session.libsignal.utilities.IdPrefix
|
||||||
import org.session.libsignal.utilities.Log
|
import org.session.libsignal.utilities.Log
|
||||||
|
@ -28,6 +32,7 @@ import org.thoughtcrime.securesms.repository.ConversationRepository
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
class ConversationViewModel(
|
class ConversationViewModel(
|
||||||
|
private val context: Context,
|
||||||
val threadId: Long,
|
val threadId: Long,
|
||||||
val edKeyPair: KeyPair?,
|
val edKeyPair: KeyPair?,
|
||||||
private val contentResolver: ContentResolver,
|
private val contentResolver: ContentResolver,
|
||||||
|
@ -47,6 +52,19 @@ class ConversationViewModel(
|
||||||
val recipient: Recipient?
|
val recipient: Recipient?
|
||||||
get() = _recipient.value
|
get() = _recipient.value
|
||||||
|
|
||||||
|
val blindedRecipient: Recipient?
|
||||||
|
get() = _recipient.value?.let { recipient ->
|
||||||
|
when {
|
||||||
|
recipient.isOpenGroupOutboxRecipient -> recipient
|
||||||
|
recipient.isOpenGroupInboxRecipient -> Recipient.from(
|
||||||
|
context,
|
||||||
|
Address.fromSerialized(GroupUtil.getDecodedOpenGroupInboxSessionId(recipient.address.serialize())),
|
||||||
|
false
|
||||||
|
)
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private var _openGroup: RetrieveOnce<OpenGroup> = RetrieveOnce {
|
private var _openGroup: RetrieveOnce<OpenGroup> = RetrieveOnce {
|
||||||
storage.getOpenGroup(threadId)
|
storage.getOpenGroup(threadId)
|
||||||
}
|
}
|
||||||
|
@ -201,7 +219,7 @@ class ConversationViewModel(
|
||||||
|
|
||||||
@dagger.assisted.AssistedFactory
|
@dagger.assisted.AssistedFactory
|
||||||
interface AssistedFactory {
|
interface AssistedFactory {
|
||||||
fun create(threadId: Long, edKeyPair: KeyPair?, contentResolver: ContentResolver): Factory
|
fun create(context: Context, threadId: Long, edKeyPair: KeyPair?, contentResolver: ContentResolver): Factory
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
@ -209,12 +227,13 @@ class ConversationViewModel(
|
||||||
@Assisted private val threadId: Long,
|
@Assisted private val threadId: Long,
|
||||||
@Assisted private val edKeyPair: KeyPair?,
|
@Assisted private val edKeyPair: KeyPair?,
|
||||||
@Assisted private val contentResolver: ContentResolver,
|
@Assisted private val contentResolver: ContentResolver,
|
||||||
|
@Assisted private val context: Context,
|
||||||
private val repository: ConversationRepository,
|
private val repository: ConversationRepository,
|
||||||
private val storage: Storage
|
private val storage: Storage
|
||||||
) : ViewModelProvider.Factory {
|
) : ViewModelProvider.Factory {
|
||||||
|
|
||||||
override fun <T : ViewModel> create(modelClass: Class<T>): T {
|
override fun <T : ViewModel> create(modelClass: Class<T>): T {
|
||||||
return ConversationViewModel(threadId, edKeyPair, contentResolver, repository, storage) as T
|
return ConversationViewModel(context, threadId, edKeyPair, contentResolver, repository, storage) as T
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -436,7 +436,7 @@ open class Storage(context: Context, helper: SQLCipherOpenHelper, private val co
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isCheckingCommunityRequests(): Boolean {
|
override fun isCheckingCommunityRequests(): Boolean {
|
||||||
return configFactory.user?.getCommunityMessageRequests() != true
|
return configFactory.user?.getCommunityMessageRequests() == true
|
||||||
}
|
}
|
||||||
|
|
||||||
fun notifyUpdates(forConfigObject: ConfigBase) {
|
fun notifyUpdates(forConfigObject: ConfigBase) {
|
||||||
|
@ -1414,7 +1414,7 @@ open class Storage(context: Context, helper: SQLCipherOpenHelper, private val co
|
||||||
val blindedId = when {
|
val blindedId = when {
|
||||||
recipient.isGroupRecipient -> null
|
recipient.isGroupRecipient -> null
|
||||||
recipient.isOpenGroupInboxRecipient -> {
|
recipient.isOpenGroupInboxRecipient -> {
|
||||||
GroupUtil.getDecodedOpenGroupInbox(address)
|
GroupUtil.getDecodedOpenGroupInboxSessionId(address)
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
if (SessionId(address).prefix == IdPrefix.BLINDED) {
|
if (SessionId(address).prefix == IdPrefix.BLINDED) {
|
||||||
|
|
|
@ -245,9 +245,10 @@ object MessageSender {
|
||||||
if (message.sentTimestamp == null) {
|
if (message.sentTimestamp == null) {
|
||||||
message.sentTimestamp = SnodeAPI.nowWithOffset
|
message.sentTimestamp = SnodeAPI.nowWithOffset
|
||||||
}
|
}
|
||||||
|
// Attach the blocks message requests info
|
||||||
configFactory.user?.let { user ->
|
configFactory.user?.let { user ->
|
||||||
if (message is VisibleMessage) {
|
if (message is VisibleMessage) {
|
||||||
message.blocksMessageRequests = user.getCommunityMessageRequests()
|
message.blocksMessageRequests = !user.getCommunityMessageRequests()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val userEdKeyPair = MessagingModuleConfiguration.shared.getUserED25519KeyPair()!!
|
val userEdKeyPair = MessagingModuleConfiguration.shared.getUserED25519KeyPair()!!
|
||||||
|
|
|
@ -60,7 +60,7 @@ object GroupUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun getDecodedOpenGroupInbox(groupID: String): String {
|
fun getDecodedOpenGroupInboxSessionId(groupID: String): String {
|
||||||
val decodedGroupId = getDecodedGroupID(groupID)
|
val decodedGroupId = getDecodedGroupID(groupID)
|
||||||
if (decodedGroupId.split("!").count() > 2) {
|
if (decodedGroupId.split("!").count() > 2) {
|
||||||
return decodedGroupId.split("!", limit = 3)[2]
|
return decodedGroupId.split("!", limit = 3)[2]
|
||||||
|
|
|
@ -325,7 +325,7 @@ public class Recipient implements RecipientModifiedListener {
|
||||||
return this.name;
|
return this.name;
|
||||||
}
|
}
|
||||||
} else if (isOpenGroupInboxRecipient()){
|
} else if (isOpenGroupInboxRecipient()){
|
||||||
String inboxID = GroupUtil.getDecodedOpenGroupInbox(sessionID);
|
String inboxID = GroupUtil.getDecodedOpenGroupInboxSessionId(sessionID);
|
||||||
Contact contact = storage.getContactWithSessionID(inboxID);
|
Contact contact = storage.getContactWithSessionID(inboxID);
|
||||||
if (contact == null) { return sessionID; }
|
if (contact == null) { return sessionID; }
|
||||||
return contact.displayName(Contact.ContactContext.REGULAR);
|
return contact.displayName(Contact.ContactContext.REGULAR);
|
||||||
|
|
Loading…
Reference in New Issue