Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit cbea30e5 authored by cketti's avatar cketti Committed by GitHub
Browse files

Merge pull request #6746 from thundernest/contact_permission

Message details: Hide "Add to contacts" button when contacts permission is missing
parents 9900fd43 3edb93e5
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ val messageDetailsUiModule = module {
            folderRepository = get(),
            contactSettingsProvider = get(),
            contactRepository = get(),
            contactPermissionResolver = get(),
            clipboardManager = get(),
            accountManager = get(),
            participantFormatter = get(),
+6 −0
Original line number Diff line number Diff line
package com.fsck.k9.ui.messagedetails

data class MessageDetailsAppearance(
    val showContactPicture: Boolean,
    val alwaysHideAddToContactsButton: Boolean,
)
+21 −10
Original line number Diff line number Diff line
@@ -121,13 +121,17 @@ class MessageDetailsFragment : ToolbarBottomSheetDialogFragment() {
                    progressBar.isVisible = false
                    errorView.isVisible = false
                    recyclerView.isVisible = true
                    setMessageDetails(recyclerView, state.details, state.showContactPicture)
                    setMessageDetails(recyclerView, state.details, state.appearance)
                }
            }
        }
    }

    private fun setMessageDetails(recyclerView: RecyclerView, details: MessageDetailsUi, showContactPicture: Boolean) {
    private fun setMessageDetails(
        recyclerView: RecyclerView,
        details: MessageDetailsUi,
        appearance: MessageDetailsAppearance,
    ) {
        val itemAdapter = ItemAdapter<GenericItem>().apply {
            add(MessageDateItem(details.date ?: getString(R.string.message_details_missing_date)))

@@ -135,15 +139,15 @@ class MessageDetailsFragment : ToolbarBottomSheetDialogFragment() {
                add(CryptoStatusItem(details.cryptoDetails))
            }

            addParticipants(details.from, R.string.message_details_from_section_title, showContactPicture)
            addParticipants(details.sender, R.string.message_details_sender_section_title, showContactPicture)
            addParticipants(details.replyTo, R.string.message_details_replyto_section_title, showContactPicture)
            addParticipants(details.from, R.string.message_details_from_section_title, appearance)
            addParticipants(details.sender, R.string.message_details_sender_section_title, appearance)
            addParticipants(details.replyTo, R.string.message_details_replyto_section_title, appearance)

            add(MessageDetailsDividerItem())

            addParticipants(details.to, R.string.message_details_to_section_title, showContactPicture)
            addParticipants(details.cc, R.string.message_details_cc_section_title, showContactPicture)
            addParticipants(details.bcc, R.string.message_details_bcc_section_title, showContactPicture)
            addParticipants(details.to, R.string.message_details_to_section_title, appearance)
            addParticipants(details.cc, R.string.message_details_cc_section_title, appearance)
            addParticipants(details.bcc, R.string.message_details_bcc_section_title, appearance)

            if (details.folder != null) {
                addFolderName(details.folder)
@@ -163,14 +167,21 @@ class MessageDetailsFragment : ToolbarBottomSheetDialogFragment() {
    private fun ItemAdapter<GenericItem>.addParticipants(
        participants: List<Participant>,
        @StringRes title: Int,
        showContactPicture: Boolean,
        appearance: MessageDetailsAppearance,
    ) {
        if (participants.isNotEmpty()) {
            val extraText = if (participants.size > 1) participants.size.toString() else null
            add(SectionHeaderItem(title = getString(title), extra = extraText))

            for (participant in participants) {
                add(ParticipantItem(contactPictureLoader, showContactPicture, participant))
                add(
                    ParticipantItem(
                        contactPictureLoader,
                        appearance.showContactPicture,
                        appearance.alwaysHideAddToContactsButton,
                        participant,
                    ),
                )
            }
        }
    }
+9 −2
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ import android.app.PendingIntent
import android.content.res.Resources
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import app.k9mail.core.android.common.contact.ContactPermissionResolver
import app.k9mail.core.android.common.contact.ContactRepository
import app.k9mail.core.common.mail.EmailAddress
import com.fsck.k9.Account
@@ -34,6 +35,7 @@ internal class MessageDetailsViewModel(
    private val folderRepository: FolderRepository,
    private val contactSettingsProvider: ContactSettingsProvider,
    private val contactRepository: ContactRepository,
    private val contactPermissionResolver: ContactPermissionResolver,
    private val clipboardManager: ClipboardManager,
    private val accountManager: AccountManager,
    private val participantFormatter: MessageDetailsParticipantFormatter,
@@ -67,8 +69,13 @@ internal class MessageDetailsViewModel(
                    folder = folder?.toFolderInfo(),
                )

                MessageDetailsState.DataLoaded(
                val messageDetailsAppearance = MessageDetailsAppearance(
                    showContactPicture = contactSettingsProvider.isShowContactPicture,
                    alwaysHideAddToContactsButton = !contactPermissionResolver.hasContactPermission(),
                )

                MessageDetailsState.DataLoaded(
                    appearance = messageDetailsAppearance,
                    details = messageDetailsUi,
                )
            } catch (e: Exception) {
@@ -155,7 +162,7 @@ sealed interface MessageDetailsState {
    object Loading : MessageDetailsState
    object Error : MessageDetailsState
    data class DataLoaded(
        val showContactPicture: Boolean,
        val appearance: MessageDetailsAppearance,
        val details: MessageDetailsUi,
    ) : MessageDetailsState
}
+2 −1
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ import com.mikepenz.fastadapter.items.AbstractItem
internal class ParticipantItem(
    private val contactPictureLoader: ContactPictureLoader,
    private val showContactsPicture: Boolean,
    private val alwaysHideAddContactsButton: Boolean,
    val participant: Participant,
) : AbstractItem<ParticipantItem.ViewHolder>() {
    override val type: Int = R.id.message_details_participant
@@ -44,7 +45,7 @@ internal class ParticipantItem(
            }
            email.text = participant.emailAddress

            menuAddContact.isVisible = !participant.isInContacts
            menuAddContact.isVisible = !item.alwaysHideAddContactsButton && !participant.isInContacts

            if (item.showContactsPicture) {
                item.contactPictureLoader.setContactPicture(contactPicture, participant.address)
Loading