Merge branch 'fix_approved_and_invalidating_options' into calls
# Conflicts: # app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt # libsession/src/main/java/org/session/libsession/database/StorageProtocol.kt
This commit is contained in:
commit
04e40df9f5
|
@ -388,7 +388,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
|||
|
||||
// called from onCreate
|
||||
private fun setUpToolBar() {
|
||||
val actionBar = supportActionBar!!
|
||||
val actionBar = supportActionBar ?: return
|
||||
actionBarBinding = ActivityConversationV2ActionBarBinding.inflate(layoutInflater)
|
||||
actionBar.title = ""
|
||||
actionBar.customView = actionBarBinding!!.root
|
||||
|
@ -581,9 +581,11 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
|||
if (viewModel.recipient.isContactRecipient) {
|
||||
binding?.blockedBanner?.isVisible = viewModel.recipient.isBlocked
|
||||
}
|
||||
invalidateOptionsMenu()
|
||||
updateSubtitle()
|
||||
showOrHideInputIfNeeded()
|
||||
actionBarBinding?.profilePictureView?.update(recipient)
|
||||
actionBarBinding?.conversationTitleView?.text = recipient.toShortString()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -623,9 +625,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
|||
}
|
||||
|
||||
private fun isMessageRequestThread(): Boolean {
|
||||
val hasSent = threadDb.getLastSeenAndHasSent(viewModel.threadId).second()
|
||||
return (!viewModel.recipient.isGroupRecipient && !hasSent) ||
|
||||
(!viewModel.recipient.isGroupRecipient && hasSent && !(viewModel.recipient.hasApprovedMe() || viewModel.hasReceived()))
|
||||
return !viewModel.recipient.isGroupRecipient && !viewModel.recipient.isApproved
|
||||
}
|
||||
|
||||
private fun isOutgoingMessageRequestThread(): Boolean {
|
||||
|
@ -1001,6 +1001,9 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
|||
override fun sendMessage() {
|
||||
if (isIncomingMessageRequestThread()) {
|
||||
acceptMessageRequest()
|
||||
} else if (!viewModel.recipient.isApproved) {
|
||||
// edge case for new outgoing thread on new recipient without sending approval messages
|
||||
viewModel.setRecipientApproved()
|
||||
}
|
||||
if (viewModel.recipient.isContactRecipient && viewModel.recipient.isBlocked) {
|
||||
BlockedDialog(viewModel.recipient).show(supportFragmentManager, "Blocked Dialog")
|
||||
|
|
|
@ -53,6 +53,10 @@ class ConversationViewModel(
|
|||
repository.deleteLocally(recipient, message)
|
||||
}
|
||||
|
||||
fun setRecipientApproved() {
|
||||
repository.setApproved(recipient, true)
|
||||
}
|
||||
|
||||
fun deleteForEveryone(message: MessageRecord) = viewModelScope.launch {
|
||||
repository.deleteForEveryone(threadId, recipient, message)
|
||||
.onFailure {
|
||||
|
|
|
@ -238,10 +238,15 @@ public class RecipientDatabase extends Database {
|
|||
public void setApproved(@NonNull Recipient recipient, boolean approved) {
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(APPROVED, approved ? 1 : 0);
|
||||
values.put(APPROVED_ME, approved ? 1 : 0);
|
||||
updateOrInsert(recipient.getAddress(), values);
|
||||
recipient.resolve().setApproved(approved);
|
||||
recipient.resolve().setHasApprovedMe(approved);
|
||||
}
|
||||
|
||||
public void setApprovedMe(@NonNull Recipient recipient, boolean approvedMe) {
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(APPROVED_ME, approvedMe ? 1 : 0);
|
||||
updateOrInsert(recipient.getAddress(), values);
|
||||
recipient.resolve().setHasApprovedMe(approvedMe);
|
||||
}
|
||||
|
||||
public void setBlocked(@NonNull Recipient recipient, boolean blocked) {
|
||||
|
|
|
@ -5,11 +5,22 @@ import android.net.Uri
|
|||
import org.session.libsession.database.StorageProtocol
|
||||
import org.session.libsession.messaging.calls.CallMessageType
|
||||
import org.session.libsession.messaging.contacts.Contact
|
||||
import org.session.libsession.messaging.jobs.*
|
||||
import org.session.libsession.messaging.jobs.AttachmentUploadJob
|
||||
import org.session.libsession.messaging.jobs.GroupAvatarDownloadJob
|
||||
import org.session.libsession.messaging.jobs.Job
|
||||
import org.session.libsession.messaging.jobs.JobQueue
|
||||
import org.session.libsession.messaging.jobs.MessageReceiveJob
|
||||
import org.session.libsession.messaging.jobs.MessageSendJob
|
||||
import org.session.libsession.messaging.jobs.TrimThreadJob
|
||||
import org.session.libsession.messaging.messages.control.ConfigurationMessage
|
||||
import org.session.libsession.messaging.messages.control.MessageRequestResponse
|
||||
import org.session.libsession.messaging.messages.signal.*
|
||||
import org.session.libsession.messaging.messages.signal.IncomingEncryptedMessage
|
||||
import org.session.libsession.messaging.messages.signal.IncomingGroupMessage
|
||||
import org.session.libsession.messaging.messages.signal.IncomingMediaMessage
|
||||
import org.session.libsession.messaging.messages.signal.IncomingTextMessage
|
||||
import org.session.libsession.messaging.messages.signal.OutgoingGroupMediaMessage
|
||||
import org.session.libsession.messaging.messages.signal.OutgoingMediaMessage
|
||||
import org.session.libsession.messaging.messages.signal.OutgoingTextMessage
|
||||
import org.session.libsession.messaging.messages.visible.Attachment
|
||||
import org.session.libsession.messaging.messages.visible.VisibleMessage
|
||||
import org.session.libsession.messaging.open_groups.OpenGroupV2
|
||||
|
@ -20,14 +31,17 @@ import org.session.libsession.messaging.sending_receiving.link_preview.LinkPrevi
|
|||
import org.session.libsession.messaging.sending_receiving.quotes.QuoteModel
|
||||
import org.session.libsession.messaging.utilities.UpdateMessageData
|
||||
import org.session.libsession.snode.OnionRequestAPI
|
||||
import org.session.libsession.utilities.*
|
||||
import org.session.libsession.utilities.Address
|
||||
import org.session.libsession.utilities.Address.Companion.fromSerialized
|
||||
import org.session.libsession.utilities.GroupRecord
|
||||
import org.session.libsession.utilities.GroupUtil
|
||||
import org.session.libsession.utilities.ProfileKeyUtil
|
||||
import org.session.libsession.utilities.TextSecurePreferences
|
||||
import org.session.libsession.utilities.recipients.Recipient
|
||||
import org.session.libsignal.crypto.ecc.ECKeyPair
|
||||
import org.session.libsignal.messages.SignalServiceAttachmentPointer
|
||||
import org.session.libsignal.messages.SignalServiceGroup
|
||||
import org.session.libsignal.utilities.KeyHelper
|
||||
import org.session.libsignal.utilities.Log
|
||||
import org.session.libsignal.utilities.guava.Optional
|
||||
import org.thoughtcrime.securesms.ApplicationContext
|
||||
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper
|
||||
|
@ -111,6 +125,14 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context,
|
|||
senderAddress
|
||||
}
|
||||
val targetRecipient = Recipient.from(context, targetAddress, false)
|
||||
if (!targetRecipient.isGroupRecipient) {
|
||||
val recipientDb = DatabaseComponent.get(context).recipientDatabase()
|
||||
if (isUserSender) {
|
||||
recipientDb.setApproved(targetRecipient, true)
|
||||
} else {
|
||||
recipientDb.setApprovedMe(targetRecipient, true)
|
||||
}
|
||||
}
|
||||
if (message.isMediaMessage() || attachments.isNotEmpty()) {
|
||||
val quote: Optional<QuoteModel> = if (quotes != null) Optional.of(quotes) else Optional.absent()
|
||||
val linkPreviews: Optional<List<LinkPreview>> = if (linkPreview.isEmpty()) Optional.absent() else Optional.of(linkPreview.mapNotNull { it!! })
|
||||
|
@ -586,7 +608,7 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context,
|
|||
// create Thread if needed
|
||||
val threadId = threadDatabase.getOrCreateThreadIdFor(recipient)
|
||||
if (contact.didApproveMe == true) {
|
||||
recipientDatabase.setApproved(recipient, true)
|
||||
recipientDatabase.setApprovedMe(recipient, true)
|
||||
threadDatabase.setHasSent(threadId, true)
|
||||
}
|
||||
if (contact.isApproved == true) {
|
||||
|
@ -664,7 +686,7 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context,
|
|||
val mmsDb = DatabaseComponent.get(context).mmsDatabase()
|
||||
val senderAddress = fromSerialized(senderPublicKey)
|
||||
val requestSender = Recipient.from(context, senderAddress, false)
|
||||
recipientDb.setApproved(requestSender, true)
|
||||
recipientDb.setApprovedMe(requestSender, true)
|
||||
|
||||
val message = IncomingMediaMessage(
|
||||
senderAddress,
|
||||
|
@ -687,6 +709,14 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context,
|
|||
}
|
||||
}
|
||||
|
||||
override fun setRecipientApproved(recipient: Recipient, approved: Boolean) {
|
||||
DatabaseComponent.get(context).recipientDatabase().setApproved(recipient, approved)
|
||||
}
|
||||
|
||||
override fun setRecipientApprovedMe(recipient: Recipient, approvedMe: Boolean) {
|
||||
DatabaseComponent.get(context).recipientDatabase().setApprovedMe(recipient, approvedMe)
|
||||
}
|
||||
|
||||
|
||||
override fun insertCallMessage(senderPublicKey: String, callMessageType: CallMessageType, sentTimestamp: Long) {
|
||||
val database = DatabaseComponent.get(context).smsDatabase()
|
||||
|
|
|
@ -39,6 +39,7 @@ interface ConversationRepository {
|
|||
fun inviteContacts(threadId: Long, contacts: List<Recipient>)
|
||||
fun unblock(recipient: Recipient)
|
||||
fun deleteLocally(recipient: Recipient, message: MessageRecord)
|
||||
fun setApproved(recipient: Recipient, isApproved: Boolean)
|
||||
|
||||
suspend fun deleteForEveryone(
|
||||
threadId: Long,
|
||||
|
@ -138,6 +139,10 @@ class DefaultConversationRepository @Inject constructor(
|
|||
messageDataProvider.deleteMessage(message.id, !message.isMms)
|
||||
}
|
||||
|
||||
override fun setApproved(recipient: Recipient, isApproved: Boolean) {
|
||||
recipientDb.setApproved(recipient, isApproved)
|
||||
}
|
||||
|
||||
override suspend fun deleteForEveryone(
|
||||
threadId: Long,
|
||||
recipient: Recipient,
|
||||
|
|
|
@ -158,5 +158,7 @@ interface StorageProtocol {
|
|||
fun persist(message: VisibleMessage, quotes: QuoteModel?, linkPreview: List<LinkPreview?>, groupPublicKey: String?, openGroupID: String?, attachments: List<Attachment>): Long?
|
||||
fun insertDataExtractionNotificationMessage(senderPublicKey: String, message: DataExtractionNotificationInfoMessage, sentTimestamp: Long)
|
||||
fun insertMessageRequestResponse(response: MessageRequestResponse)
|
||||
fun setRecipientApproved(recipient: Recipient, approved: Boolean)
|
||||
fun setRecipientApprovedMe(recipient: Recipient, approvedMe: Boolean)
|
||||
fun insertCallMessage(senderPublicKey: String, callMessageType: CallMessageType, sentTimestamp: Long)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue