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

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

Merge pull request #6987 from thundernest/relaxed_email_address

Change `EmailAddressParser` to support addresses violating the specification
parents 4bc2afa9 bc041376
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
package com.fsck.k9.helper

import app.k9mail.core.android.common.contact.ContactRepository
import app.k9mail.core.common.mail.toEmailAddress
import app.k9mail.core.common.mail.toEmailAddressOrNull

interface ContactNameProvider {
    fun getNameForAddress(address: String): String?
@@ -11,6 +11,8 @@ class RealContactNameProvider(
    private val contactRepository: ContactRepository,
) : ContactNameProvider {
    override fun getNameForAddress(address: String): String? {
        return contactRepository.getContactFor(address.toEmailAddress())?.name
        return address.toEmailAddressOrNull()?.let { emailAddress ->
            contactRepository.getContactFor(emailAddress)?.name
        }
    }
}
+8 −2
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ import android.text.SpannableStringBuilder
import android.text.TextUtils
import android.text.style.ForegroundColorSpan
import app.k9mail.core.android.common.contact.ContactRepository
import app.k9mail.core.common.mail.toEmailAddress
import app.k9mail.core.common.mail.toEmailAddressOrNull
import com.fsck.k9.CoreResourceProvider
import com.fsck.k9.K9.contactNameColor
import com.fsck.k9.K9.isChangeContactNameColor
@@ -101,7 +101,7 @@ class MessageHelper(
            if (!showCorrespondentNames) {
                return address.address
            } else if (contactRepository != null) {
                val name = contactRepository.getContactFor(address.address.toEmailAddress())?.name
                val name = contactRepository.getContactName(address)
                if (name != null) {
                    return if (changeContactNameColor) {
                        val coloredName = SpannableString(name)
@@ -124,6 +124,12 @@ class MessageHelper(
            }
        }

        private fun ContactRepository.getContactName(address: Address): String? {
            return address.address.toEmailAddressOrNull()?.let { emailAddress ->
                getContactFor(emailAddress)?.name
            }
        }

        private fun isSpoofAddress(displayName: String): Boolean {
            return displayName.contains("@") && SPOOF_ADDRESS_PATTERN.matcher(displayName).find()
        }
+2 −2
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@ import android.text.SpannableString
import app.k9mail.core.android.common.contact.Contact
import app.k9mail.core.android.common.contact.ContactRepository
import app.k9mail.core.common.mail.EmailAddress
import app.k9mail.core.common.mail.toEmailAddress
import app.k9mail.core.common.mail.toEmailAddressOrThrow
import assertk.assertThat
import assertk.assertions.isEqualTo
import assertk.assertions.isInstanceOf
@@ -143,6 +143,6 @@ class MessageHelperTest : RobolectricTest() {
    }

    private companion object {
        val EMAIL_ADDRESS = "test@testor.com".toEmailAddress()
        val EMAIL_ADDRESS = "test@testor.com".toEmailAddressOrThrow()
    }
}
+2 −2
Original line number Diff line number Diff line
package com.fsck.k9.notification

import app.k9mail.core.android.common.contact.ContactRepository
import app.k9mail.core.common.mail.toEmailAddress
import app.k9mail.core.common.mail.toEmailAddressOrNull
import com.fsck.k9.Account
import com.fsck.k9.K9
import com.fsck.k9.mail.Flag
@@ -88,7 +88,7 @@ class K9NotificationStrategy(
        }

        if (account.isNotifyContactsMailOnly &&
            !contactRepository.hasAnyContactFor(message.from.asList().mapNotNull { it.address.toEmailAddress() })
            !contactRepository.hasAnyContactFor(message.from.asList().mapNotNull { it.address.toEmailAddressOrNull() })
        ) {
            Timber.v("No notification: Message is not from a known contact")
            return false
+9 −2
Original line number Diff line number Diff line
@@ -3,8 +3,9 @@ package com.fsck.k9.contacts
import android.content.ContentResolver
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.net.Uri
import app.k9mail.core.android.common.contact.ContactRepository
import app.k9mail.core.common.mail.toEmailAddress
import app.k9mail.core.common.mail.toEmailAddressOrNull
import timber.log.Timber

internal class ContactPhotoLoader(
@@ -12,7 +13,7 @@ internal class ContactPhotoLoader(
    private val contactRepository: ContactRepository,
) {
    fun loadContactPhoto(emailAddress: String): Bitmap? {
        val photoUri = contactRepository.getContactFor(emailAddress.toEmailAddress())?.photoUri ?: return null
        val photoUri = getPhotoUri(emailAddress) ?: return null
        return try {
            contentResolver.openInputStream(photoUri).use { inputStream ->
                BitmapFactory.decodeStream(inputStream)
@@ -22,4 +23,10 @@ internal class ContactPhotoLoader(
            null
        }
    }

    private fun getPhotoUri(email: String): Uri? {
        return email.toEmailAddressOrNull()?.let { emailAddress ->
            contactRepository.getContactFor(emailAddress)?.photoUri
        }
    }
}
Loading