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

Commit 92ea6c16 authored by Fahim Salam Chowdhury's avatar Fahim Salam Chowdhury 👽
Browse files

Merge branch '922-Replace_accountManager_broadcast_logic' into 'main'

922-Replace_accountManager_broadcast_logic

See merge request !125
parents ce78315f c9ef9a6b
Loading
Loading
Loading
Loading
Loading
+0 −4
Original line number Original line Diff line number Diff line
@@ -360,10 +360,6 @@ class Account(override val uuid: String) : BaseAccount {
    @set:Synchronized
    @set:Synchronized
    var messagesNotificationChannelVersion = 0
    var messagesNotificationChannelVersion = 0


    @get:Synchronized
    @set:Synchronized
    var backgroundSync = true

    @get:Synchronized
    @get:Synchronized
    @set:Synchronized
    @set:Synchronized
    var isChangedVisibleLimits = false
    var isChangedVisibleLimits = false
+0 −3
Original line number Original line Diff line number Diff line
@@ -54,7 +54,6 @@ class AccountPreferenceSerializer(
            isIgnoreChatMessages = storage.getBoolean("$accountUuid.ignoreChatMessages", false)
            isIgnoreChatMessages = storage.getBoolean("$accountUuid.ignoreChatMessages", false)
            isNotifySync = storage.getBoolean("$accountUuid.notifyMailCheck", false)
            isNotifySync = storage.getBoolean("$accountUuid.notifyMailCheck", false)
            messagesNotificationChannelVersion = storage.getInt("$accountUuid.messagesNotificationChannelVersion", 0)
            messagesNotificationChannelVersion = storage.getInt("$accountUuid.messagesNotificationChannelVersion", 0)
            backgroundSync = storage.getBoolean("$accountUuid.backgroundSync", true)
            deletePolicy = DeletePolicy.fromInt(storage.getInt("$accountUuid.deletePolicy", DeletePolicy.NEVER.setting))
            deletePolicy = DeletePolicy.fromInt(storage.getInt("$accountUuid.deletePolicy", DeletePolicy.NEVER.setting))
            legacyInboxFolder = storage.getString("$accountUuid.inboxFolderName", null)
            legacyInboxFolder = storage.getString("$accountUuid.inboxFolderName", null)
            importedDraftsFolder = storage.getString("$accountUuid.draftsFolderName", null)
            importedDraftsFolder = storage.getString("$accountUuid.draftsFolderName", null)
@@ -260,7 +259,6 @@ class AccountPreferenceSerializer(
            editor.putBoolean("$accountUuid.ignoreChatMessages", isIgnoreChatMessages)
            editor.putBoolean("$accountUuid.ignoreChatMessages", isIgnoreChatMessages)
            editor.putBoolean("$accountUuid.notifyMailCheck", isNotifySync)
            editor.putBoolean("$accountUuid.notifyMailCheck", isNotifySync)
            editor.putInt("$accountUuid.messagesNotificationChannelVersion", messagesNotificationChannelVersion)
            editor.putInt("$accountUuid.messagesNotificationChannelVersion", messagesNotificationChannelVersion)
            editor.putBoolean("$accountUuid.backgroundSync", backgroundSync)
            editor.putInt("$accountUuid.deletePolicy", deletePolicy.setting)
            editor.putInt("$accountUuid.deletePolicy", deletePolicy.setting)
            editor.putString("$accountUuid.inboxFolderName", legacyInboxFolder)
            editor.putString("$accountUuid.inboxFolderName", legacyInboxFolder)
            editor.putString("$accountUuid.draftsFolderName", importedDraftsFolder)
            editor.putString("$accountUuid.draftsFolderName", importedDraftsFolder)
@@ -551,7 +549,6 @@ class AccountPreferenceSerializer(
            isNotifyContactsMailOnly = false
            isNotifyContactsMailOnly = false
            isIgnoreChatMessages = false
            isIgnoreChatMessages = false
            messagesNotificationChannelVersion = 0
            messagesNotificationChannelVersion = 0
            backgroundSync = true
            folderDisplayMode = FolderMode.NOT_SECOND_CLASS
            folderDisplayMode = FolderMode.NOT_SECOND_CLASS
            folderSyncMode = FolderMode.FIRST_CLASS
            folderSyncMode = FolderMode.FIRST_CLASS
            folderPushMode = FolderMode.ALL
            folderPushMode = FolderMode.ALL
+81 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright MURENA SAS 2022
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

package com.fsck.k9

import android.accounts.Account
import android.accounts.AccountManager
import android.content.ContentResolver
import android.content.Context
import com.fsck.k9.setup.AccountManagerConstants
import timber.log.Timber

object OsAccountManagerUtil {

    /**
     * @return syncEnable or not. If account not found in accountManager accounts,
     * means account is setup by user... so return true by default
     */
    fun isSyncEnable(context: Context, email: String): Boolean {
        val accountManager = AccountManager.get(context)

        val murenaAccounts = accountManager.getAccountsByType(AccountManagerConstants.EELO_ACCOUNT_TYPE)
        var syncEnable = isSyncEnable(accountManager, murenaAccounts, email)
        if (syncEnable.isAccountFound()) {
            return syncEnable.getStatus()
        }

        val googleAccounts = accountManager.getAccountsByType(AccountManagerConstants.GOOGLE_ACCOUNT_TYPE)
        syncEnable = isSyncEnable(accountManager, googleAccounts, email)
        if (syncEnable.isAccountFound()) {
            return syncEnable.getStatus()
        }

        return true
    }

    private fun isSyncEnable(accountManager: AccountManager, accounts: Array<out Account>, email: String): Syncable {
        accounts.forEach {
            try {
                val accountEmail: String = accountManager.getUserData(it, AccountManagerConstants.ACCOUNT_EMAIL_ADDRESS_KEY)
                if (accountEmail == email) {
                    // if master sync disable, then account sync is disable
                    return if (!ContentResolver.getMasterSyncAutomatically()) {
                        Syncable.NOT_SYNCABLE
                    } else Syncable.getSyncable(ContentResolver.getSyncAutomatically(it, AccountManagerConstants.MAIL_CONTENT_AUTHORITY))
                }
            } catch (e: Throwable) {
                Timber.e(e)
            }
        }

        return Syncable.ACCOUNT_NOT_FOUND
    }

    private enum class Syncable {
        SYNCABLE,
        NOT_SYNCABLE,
        ACCOUNT_NOT_FOUND;

        companion object {
            fun getSyncable(status: Boolean) = if (status) SYNCABLE else NOT_SYNCABLE
        }

        fun getStatus() = this == SYNCABLE

        fun isAccountFound() = this != ACCOUNT_NOT_FOUND
    }
}
 No newline at end of file
+2 −1
Original line number Original line Diff line number Diff line
@@ -24,7 +24,8 @@ internal val controllerPushModule = module {
            autoSyncManager = get(),
            autoSyncManager = get(),
            pushNotificationManager = get(),
            pushNotificationManager = get(),
            connectivityManager = get(),
            connectivityManager = get(),
            accountPushControllerFactory = get()
            accountPushControllerFactory = get(),
            context = get()
        )
        )
    }
    }
}
}
+5 −2
Original line number Original line Diff line number Diff line
package com.fsck.k9.controller.push
package com.fsck.k9.controller.push


import android.content.Context
import com.fsck.k9.Account
import com.fsck.k9.Account
import com.fsck.k9.Account.FolderMode
import com.fsck.k9.Account.FolderMode
import com.fsck.k9.OsAccountManagerUtil
import com.fsck.k9.Preferences
import com.fsck.k9.Preferences
import com.fsck.k9.backend.BackendManager
import com.fsck.k9.backend.BackendManager
import com.fsck.k9.network.ConnectivityChangeListener
import com.fsck.k9.network.ConnectivityChangeListener
@@ -39,7 +41,8 @@ class PushController internal constructor(
    private val connectivityManager: ConnectivityManager,
    private val connectivityManager: ConnectivityManager,
    private val accountPushControllerFactory: AccountPushControllerFactory,
    private val accountPushControllerFactory: AccountPushControllerFactory,
    private val coroutineScope: CoroutineScope = GlobalScope,
    private val coroutineScope: CoroutineScope = GlobalScope,
    private val coroutineDispatcher: CoroutineDispatcher = Executors.newSingleThreadExecutor().asCoroutineDispatcher()
    private val coroutineDispatcher: CoroutineDispatcher = Executors.newSingleThreadExecutor().asCoroutineDispatcher(),
    private val context: Context
) {
) {
    private val lock = Any()
    private val lock = Any()
    private var initializationStarted = false
    private var initializationStarted = false
@@ -211,7 +214,7 @@ class PushController internal constructor(


    private fun getPushAccounts(): List<Account> {
    private fun getPushAccounts(): List<Account> {
        return preferences.accounts.filter { account ->
        return preferences.accounts.filter { account ->
            account.folderPushMode != FolderMode.NONE && account.backgroundSync && backendManager.getBackend(account)?.isPushCapable ?: false
            account.folderPushMode != FolderMode.NONE && OsAccountManagerUtil.isSyncEnable(context, account.email) && backendManager.getBackend(account)?.isPushCapable ?: false
        }
        }
    }
    }
    private fun setPushNotificationState(notificationState: PushNotificationState) {
    private fun setPushNotificationState(notificationState: PushNotificationState) {
Loading