diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/start/ContactListAdapter.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/start/ContactListAdapter.kt index 68e2f975c9..29a94cdcd4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/start/ContactListAdapter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/start/ContactListAdapter.kt @@ -4,10 +4,15 @@ import android.content.Context import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView +import network.loki.messenger.R import network.loki.messenger.databinding.ContactSectionHeaderBinding import network.loki.messenger.databinding.ViewContactBinding import org.session.libsession.utilities.recipients.Recipient +import org.session.libsignal.utilities.Log +import org.thoughtcrime.securesms.database.Storage import org.thoughtcrime.securesms.mms.GlideRequests +import org.thoughtcrime.securesms.showSessionDialog +import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities sealed class ContactListItem { class Header(val name: String) : ContactListItem() @@ -35,11 +40,28 @@ class ContactListAdapter( binding.profilePictureView.update(contact.recipient) binding.nameTextView.text = contact.displayName binding.root.setOnClickListener { listener(contact.recipient) } + + // TODO: When we implement deleting contacts then probably do it here w/ something like: + /* + binding.root.setOnLongClickListener { + Log.w("[ACL]", "Long clicked on contact ${contact.recipient.name}") + binding.contentView.context.showSessionDialog { + title("Delete Contact") + text("Are you sure you want to delete this contact?") + button(R.string.delete) { + val contacts = configFactory.contacts ?: return + contacts.upsertContact(contact.recipient.address.serialize()) { priority = PRIORITY_HIDDEN } + ConfigurationMessageUtilities.forceSyncConfigurationNowIfNeeded(context) + endActionMode() + } + cancelButton(::endActionMode) + } + true + } + */ } - fun unbind() { - binding.profilePictureView.recycle() - } + fun unbind() { binding.profilePictureView.recycle() } } class HeaderViewHolder( @@ -52,15 +74,11 @@ class ContactListAdapter( } } - override fun getItemCount(): Int { - return items.size - } + override fun getItemCount(): Int { return items.size } override fun onViewRecycled(holder: RecyclerView.ViewHolder) { super.onViewRecycled(holder) - if (holder is ContactViewHolder) { - holder.unbind() - } + if (holder is ContactViewHolder) { holder.unbind() } } override fun getItemViewType(position: Int): Int { @@ -72,13 +90,9 @@ class ContactListAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return if (viewType == ViewType.Contact) { - ContactViewHolder( - ViewContactBinding.inflate(LayoutInflater.from(context), parent, false) - ) + ContactViewHolder(ViewContactBinding.inflate(LayoutInflater.from(context), parent, false)) } else { - HeaderViewHolder( - ContactSectionHeaderBinding.inflate(LayoutInflater.from(context), parent, false) - ) + HeaderViewHolder(ContactSectionHeaderBinding.inflate(LayoutInflater.from(context), parent, false)) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt b/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt index 78e1814d51..380b816f24 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt @@ -99,7 +99,7 @@ private const val TAG = "Storage" open class Storage( context: Context, helper: SQLCipherOpenHelper, - private val configFactory: ConfigFactory + val configFactory: ConfigFactory ) : Database(context, helper), StorageProtocol, ThreadDatabase.ConversationThreadUpdateListener { override fun threadCreated(address: Address, threadId: Long) { @@ -1378,12 +1378,9 @@ open class Storage( Log.w("[ACL]", "When deleting conversation, recipient is: ${recipient.name}") when { - recipient.isContactRecipient -> { - if (recipient.isLocalNumber) return - val contacts = configFactory.contacts ?: return - contacts.upsertContact(recipient.address.serialize()) { priority = PRIORITY_HIDDEN } - ConfigurationMessageUtilities.forceSyncConfigurationNowIfNeeded(context) - } + // Note: We don't do anything if the thread is a 1-on-1 and the recipient is a contact + // of ours (i.e., when recipient.isContactRecipient) + recipient.isClosedGroupRecipient -> { // TODO: handle closed group val volatile = configFactory.convoVolatile ?: return diff --git a/app/src/main/java/org/thoughtcrime/securesms/repository/ConversationRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/repository/ConversationRepository.kt index 384f47d4d6..8a7a2dfd0f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/repository/ConversationRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/repository/ConversationRepository.kt @@ -4,19 +4,14 @@ import network.loki.messenger.libsession_util.util.ExpiryMode import android.content.ContentResolver import android.content.Context - import app.cash.copper.Query import app.cash.copper.flow.observeQuery - import dagger.hilt.android.qualifiers.ApplicationContext - import kotlin.coroutines.resume import kotlin.coroutines.resumeWithException import kotlin.coroutines.suspendCoroutine - import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map - import org.session.libsession.database.MessageDataProvider import org.session.libsession.messaging.messages.Destination import org.session.libsession.messaging.messages.control.MessageRequestResponse @@ -32,9 +27,7 @@ import org.session.libsession.utilities.GroupUtil import org.session.libsession.utilities.TextSecurePreferences import org.session.libsession.utilities.recipients.Recipient import org.session.libsignal.utilities.Log - import org.session.libsignal.utilities.toHexString - import org.thoughtcrime.securesms.database.DatabaseContentProviders import org.thoughtcrime.securesms.database.DraftDatabase import org.thoughtcrime.securesms.database.ExpirationConfigurationDatabase @@ -51,7 +44,6 @@ import org.thoughtcrime.securesms.database.model.MessageRecord import org.thoughtcrime.securesms.database.model.ThreadRecord import org.thoughtcrime.securesms.dependencies.ConfigFactory import org.thoughtcrime.securesms.dependencies.DatabaseComponent - import javax.inject.Inject interface ConversationRepository { @@ -239,7 +231,7 @@ class DefaultConversationRepository @Inject constructor( .success { continuation.resume(ResultOf.Success(Unit)) }.fail { error -> - Log.w("[onversationRepository", "Call to SnodeAPI.deleteMessage failed - attempting to resume..") + Log.w("ConversationRepository", "Call to SnodeAPI.deleteMessage failed - attempting to resume..") continuation.resumeWithException(error) } } @@ -330,9 +322,7 @@ class DefaultConversationRepository @Inject constructor( while (reader.next != null) { deleteMessageRequest(reader.current) val recipient = reader.current.recipient - if (block) { - setBlocked(recipient, true) - } + if (block) { setBlocked(recipient, true) } } } return ResultOf.Success(Unit) @@ -359,9 +349,7 @@ class DefaultConversationRepository @Inject constructor( val cursor = mmsSmsDb.getConversation(threadId, true) mmsSmsDb.readerFor(cursor).use { reader -> while (reader.next != null) { - if (!reader.current.isOutgoing) { - return true - } + if (!reader.current.isOutgoing) { return true } } } return false