Loading app/ui/legacy/src/main/java/com/fsck/k9/ui/messagedetails/KoinModule.kt +1 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ val messageDetailsUiModule = module { folderRepository = get(), contactSettingsProvider = get(), contactRepository = get(), contactPermissionResolver = get(), clipboardManager = get(), accountManager = get(), participantFormatter = get(), Loading app/ui/legacy/src/main/java/com/fsck/k9/ui/messagedetails/MessageDetailsAppearance.kt 0 → 100644 +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, ) app/ui/legacy/src/main/java/com/fsck/k9/ui/messagedetails/MessageDetailsFragment.kt +21 −10 Original line number Diff line number Diff line Loading @@ -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))) Loading @@ -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) Loading @@ -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, ), ) } } } Loading app/ui/legacy/src/main/java/com/fsck/k9/ui/messagedetails/MessageDetailsViewModel.kt +9 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, Loading Loading @@ -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) { Loading Loading @@ -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 } Loading app/ui/legacy/src/main/java/com/fsck/k9/ui/messagedetails/ParticipantItem.kt +2 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading
app/ui/legacy/src/main/java/com/fsck/k9/ui/messagedetails/KoinModule.kt +1 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ val messageDetailsUiModule = module { folderRepository = get(), contactSettingsProvider = get(), contactRepository = get(), contactPermissionResolver = get(), clipboardManager = get(), accountManager = get(), participantFormatter = get(), Loading
app/ui/legacy/src/main/java/com/fsck/k9/ui/messagedetails/MessageDetailsAppearance.kt 0 → 100644 +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, )
app/ui/legacy/src/main/java/com/fsck/k9/ui/messagedetails/MessageDetailsFragment.kt +21 −10 Original line number Diff line number Diff line Loading @@ -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))) Loading @@ -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) Loading @@ -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, ), ) } } } Loading
app/ui/legacy/src/main/java/com/fsck/k9/ui/messagedetails/MessageDetailsViewModel.kt +9 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, Loading Loading @@ -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) { Loading Loading @@ -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 } Loading
app/ui/legacy/src/main/java/com/fsck/k9/ui/messagedetails/ParticipantItem.kt +2 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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