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

Commit 45bc00b5 authored by Fahim M. Choudhury's avatar Fahim M. Choudhury
Browse files

Merge branch '3485-remove-mail-account-on-sso-log-out' into 'main'

fix: remove Mail account on SSO logout

See merge request !176
parents f6a26b4f aee30974
Loading
Loading
Loading
Loading
Loading
+20 −11
Original line number Original line Diff line number Diff line
@@ -20,8 +20,7 @@ import android.accounts.AccountManager
import android.content.BroadcastReceiver
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Context
import android.content.Intent
import android.content.Intent
import android.os.Build
import android.util.Patterns
import androidx.annotation.RequiresApi
import app.k9mail.core.android.common.accountmanager.AccountManagerConstants
import app.k9mail.core.android.common.accountmanager.AccountManagerConstants
import com.fsck.k9.Account
import com.fsck.k9.Account
import com.fsck.k9.Preferences
import com.fsck.k9.Preferences
@@ -47,7 +46,6 @@ class AccountSyncReceiver : BroadcastReceiver(), KoinComponent {
    private val accountRemover: BackgroundAccountRemover by inject()
    private val accountRemover: BackgroundAccountRemover by inject()
    private val jobManager: K9JobManager by inject()
    private val jobManager: K9JobManager by inject()


    @RequiresApi(Build.VERSION_CODES.N)
    override fun onReceive(context: Context?, intent: Intent?) {
    override fun onReceive(context: Context?, intent: Intent?) {
        if (intent == null) {
        if (intent == null) {
            return
            return
@@ -59,7 +57,6 @@ class AccountSyncReceiver : BroadcastReceiver(), KoinComponent {
        }
        }
    }
    }


    @RequiresApi(Build.VERSION_CODES.N)
    private fun createNewAccount(context: Context?) {
    private fun createNewAccount(context: Context?) {
        pushController.init()
        pushController.init()
        context?.let {
        context?.let {
@@ -87,14 +84,26 @@ class AccountSyncReceiver : BroadcastReceiver(), KoinComponent {
            return null
            return null
        }
        }


        val account = intent.extras?.getString(AccountManager.KEY_ACCOUNT_NAME) ?: return null
        val accountName = intent.extras?.getString(AccountManager.KEY_ACCOUNT_NAME) ?: return null


        preferences.accounts.forEach {
        return findAccount(accountName)
            if (it.email == account) {
                return it
            }
    }
    }


        return null
    private fun findAccount(accountName: String): Account? = preferences.accounts
        .firstOrNull { account -> matchesAccount(accountName, account) }

    private fun matchesAccount(accountName: String, account: Account) = when {
        isEmail(accountName) -> matchesEmail(account, accountName)
        else -> matchesUserName(account, accountName)
    }
    }

    private fun isEmail(accountName: String) = Patterns.EMAIL_ADDRESS.matcher(accountName).matches()

    private fun matchesEmail(account: Account, accountName: String) = account.email == accountName

    private fun matchesUserName(account: Account, accountName: String) =
        account.email.substringBefore("@").equals(
            accountName.substringBefore("@"),
            ignoreCase = true,
        )
}
}