Loading app/core/src/main/java/com/fsck/k9/K9.kt +5 −0 Original line number Diff line number Diff line Loading @@ -206,6 +206,9 @@ object K9 : EarlyInit { @JvmStatic var isShowUnifiedInbox = true @JvmStatic var isShowStarredCount = false @JvmStatic var isAutoFitWidth: Boolean = false Loading Loading @@ -307,6 +310,7 @@ object K9 : EarlyInit { isUseVolumeKeysForNavigation = storage.getBoolean("useVolumeKeysForNavigation", false) isUseVolumeKeysForListNavigation = storage.getBoolean("useVolumeKeysForListNavigation", false) isShowUnifiedInbox = storage.getBoolean("showUnifiedInbox", true) isShowStarredCount = storage.getBoolean("showStarredCount", false) isMessageListSenderAboveSubject = storage.getBoolean("messageListSenderAboveSubject", false) isShowMessageListStars = storage.getBoolean("messageListStars", true) messageListPreviewLines = storage.getInt("messageListPreviewLines", 2) Loading Loading @@ -392,6 +396,7 @@ object K9 : EarlyInit { editor.putBoolean("messageListSenderAboveSubject", isMessageListSenderAboveSubject) editor.putBoolean("showUnifiedInbox", isShowUnifiedInbox) editor.putBoolean("showStarredCount", isShowStarredCount) editor.putBoolean("messageListStars", isShowMessageListStars) editor.putInt("messageListPreviewLines", messageListPreviewLines) editor.putBoolean("showCorrespondentNames", isShowCorrespondentNames) Loading app/core/src/main/java/com/fsck/k9/controller/KoinModule.kt +4 −0 Original line number Diff line number Diff line package com.fsck.k9.controller import android.content.Context import com.fsck.k9.DefaultMessageCountsProvider import com.fsck.k9.MessageCountsProvider import com.fsck.k9.Preferences import com.fsck.k9.backend.BackendManager import com.fsck.k9.mailstore.LocalStoreProvider Loading @@ -19,6 +21,7 @@ val controllerModule = module { get<NotificationStrategy>(), get<LocalStoreProvider>(), get<UnreadMessageCountProvider>(), get<MessageCountsProvider>(), get<BackendManager>(), get<Preferences>(), get<MessageStoreManager>(), Loading @@ -27,4 +30,5 @@ val controllerModule = module { ) } single<UnreadMessageCountProvider> { DefaultUnreadMessageCountProvider(get(), get(), get(), get()) } single<MessageCountsProvider> { DefaultMessageCountsProvider(get(), get(), get(), get()) } } app/core/src/main/java/com/fsck/k9/controller/MessageCountsProvider.kt 0 → 100644 +68 −0 Original line number Diff line number Diff line package com.fsck.k9 import android.content.Context import com.fsck.k9.mail.MessagingException import com.fsck.k9.mailstore.LocalStoreProvider import com.fsck.k9.search.AccountSearchConditions import com.fsck.k9.search.LocalSearch import com.fsck.k9.search.SearchAccount import com.fsck.k9.search.getAccounts import timber.log.Timber interface MessageCountsProvider { fun getMessageCounts(account: Account): MessageCounts fun getMessageCounts(searchAccount: SearchAccount): MessageCounts } data class MessageCounts(val unread: Int, val starred: Int) internal class DefaultMessageCountsProvider( private val context: Context, private val preferences: Preferences, private val accountSearchConditions: AccountSearchConditions, private val localStoreProvider: LocalStoreProvider ) : MessageCountsProvider { override fun getMessageCounts(account: Account): MessageCounts { if (!account.isAvailable(context)) { return MessageCounts(0, 0) } return try { val localStore = localStoreProvider.getInstance(account) val search = LocalSearch() accountSearchConditions.excludeSpecialFolders(account, search) accountSearchConditions.limitToDisplayableFolders(account, search) localStore.getMessageCounts(search) } catch (e: MessagingException) { Timber.e(e, "Unable to getMessageCounts for account: %s", account) return MessageCounts(0, 0) } } override fun getMessageCounts(searchAccount: SearchAccount): MessageCounts { val search = searchAccount.relatedSearch val accounts = search.getAccounts(preferences) var unreadCount = 0 var starredCount = 0 for (account in accounts) { var accountMessageCount = getMessageCountsWithLocalSearch(account, search) unreadCount += accountMessageCount.unread starredCount += accountMessageCount.starred } return MessageCounts(unreadCount, starredCount) } private fun getMessageCountsWithLocalSearch(account: Account, search: LocalSearch): MessageCounts { return try { val localStore = localStoreProvider.getInstance(account) localStore.getMessageCounts(search) } catch (e: MessagingException) { Timber.e(e, "Unable to getMessageCounts for account: %s", account) return MessageCounts(0, 0) } } } app/core/src/main/java/com/fsck/k9/controller/MessagingController.java +14 −2 Original line number Diff line number Diff line Loading @@ -34,6 +34,8 @@ import com.fsck.k9.Account.DeletePolicy; import com.fsck.k9.Account.Expunge; import com.fsck.k9.DI; import com.fsck.k9.K9; import com.fsck.k9.MessageCounts; import com.fsck.k9.MessageCountsProvider; import com.fsck.k9.Preferences; import com.fsck.k9.backend.BackendManager; import com.fsck.k9.backend.api.Backend; Loading Loading @@ -126,6 +128,7 @@ public class MessagingController { private final ExecutorService threadPool = Executors.newCachedThreadPool(); private final MemorizingMessagingListener memorizingMessagingListener = new MemorizingMessagingListener(); private final UnreadMessageCountProvider unreadMessageCountProvider; private final MessageCountsProvider messageCountsProvider; private final DraftOperations draftOperations; Loading @@ -140,14 +143,15 @@ public class MessagingController { MessagingController(Context context, NotificationController notificationController, NotificationStrategy notificationStrategy, LocalStoreProvider localStoreProvider, UnreadMessageCountProvider unreadMessageCountProvider, BackendManager backendManager, Preferences preferences, MessageStoreManager messageStoreManager, UnreadMessageCountProvider unreadMessageCountProvider, MessageCountsProvider messageCountsProvider, BackendManager backendManager, Preferences preferences, MessageStoreManager messageStoreManager, SaveMessageDataCreator saveMessageDataCreator, List<ControllerExtension> controllerExtensions) { this.context = context; this.notificationController = notificationController; this.notificationStrategy = notificationStrategy; this.localStoreProvider = localStoreProvider; this.unreadMessageCountProvider = unreadMessageCountProvider; this.messageCountsProvider = messageCountsProvider; this.backendManager = backendManager; this.preferences = preferences; this.messageStoreManager = messageStoreManager; Loading Loading @@ -1683,6 +1687,14 @@ public class MessagingController { return unreadMessageCountProvider.getUnreadMessageCount(searchAccount); } public MessageCounts getMessageCounts(Account account) { return messageCountsProvider.getMessageCounts(account); } public MessageCounts getMessageCounts(SearchAccount searchAccount) { return messageCountsProvider.getMessageCounts(searchAccount); } public int getFolderUnreadMessageCount(Account account, Long folderId) throws MessagingException { LocalStore localStore = localStoreProvider.getInstance(account); LocalFolder localFolder = localStore.getFolder(folderId); Loading app/core/src/main/java/com/fsck/k9/mailstore/FolderMapper.kt +2 −1 Original line number Diff line number Diff line Loading @@ -21,7 +21,8 @@ interface FolderDetailsAccessor { val pushClass: FolderClass val visibleLimit: Int val moreMessages: MoreMessages val messageCount: Int val unreadMessageCount: Int val starredMessageCount: Int fun serverIdOrThrow(): String } Loading
app/core/src/main/java/com/fsck/k9/K9.kt +5 −0 Original line number Diff line number Diff line Loading @@ -206,6 +206,9 @@ object K9 : EarlyInit { @JvmStatic var isShowUnifiedInbox = true @JvmStatic var isShowStarredCount = false @JvmStatic var isAutoFitWidth: Boolean = false Loading Loading @@ -307,6 +310,7 @@ object K9 : EarlyInit { isUseVolumeKeysForNavigation = storage.getBoolean("useVolumeKeysForNavigation", false) isUseVolumeKeysForListNavigation = storage.getBoolean("useVolumeKeysForListNavigation", false) isShowUnifiedInbox = storage.getBoolean("showUnifiedInbox", true) isShowStarredCount = storage.getBoolean("showStarredCount", false) isMessageListSenderAboveSubject = storage.getBoolean("messageListSenderAboveSubject", false) isShowMessageListStars = storage.getBoolean("messageListStars", true) messageListPreviewLines = storage.getInt("messageListPreviewLines", 2) Loading Loading @@ -392,6 +396,7 @@ object K9 : EarlyInit { editor.putBoolean("messageListSenderAboveSubject", isMessageListSenderAboveSubject) editor.putBoolean("showUnifiedInbox", isShowUnifiedInbox) editor.putBoolean("showStarredCount", isShowStarredCount) editor.putBoolean("messageListStars", isShowMessageListStars) editor.putInt("messageListPreviewLines", messageListPreviewLines) editor.putBoolean("showCorrespondentNames", isShowCorrespondentNames) Loading
app/core/src/main/java/com/fsck/k9/controller/KoinModule.kt +4 −0 Original line number Diff line number Diff line package com.fsck.k9.controller import android.content.Context import com.fsck.k9.DefaultMessageCountsProvider import com.fsck.k9.MessageCountsProvider import com.fsck.k9.Preferences import com.fsck.k9.backend.BackendManager import com.fsck.k9.mailstore.LocalStoreProvider Loading @@ -19,6 +21,7 @@ val controllerModule = module { get<NotificationStrategy>(), get<LocalStoreProvider>(), get<UnreadMessageCountProvider>(), get<MessageCountsProvider>(), get<BackendManager>(), get<Preferences>(), get<MessageStoreManager>(), Loading @@ -27,4 +30,5 @@ val controllerModule = module { ) } single<UnreadMessageCountProvider> { DefaultUnreadMessageCountProvider(get(), get(), get(), get()) } single<MessageCountsProvider> { DefaultMessageCountsProvider(get(), get(), get(), get()) } }
app/core/src/main/java/com/fsck/k9/controller/MessageCountsProvider.kt 0 → 100644 +68 −0 Original line number Diff line number Diff line package com.fsck.k9 import android.content.Context import com.fsck.k9.mail.MessagingException import com.fsck.k9.mailstore.LocalStoreProvider import com.fsck.k9.search.AccountSearchConditions import com.fsck.k9.search.LocalSearch import com.fsck.k9.search.SearchAccount import com.fsck.k9.search.getAccounts import timber.log.Timber interface MessageCountsProvider { fun getMessageCounts(account: Account): MessageCounts fun getMessageCounts(searchAccount: SearchAccount): MessageCounts } data class MessageCounts(val unread: Int, val starred: Int) internal class DefaultMessageCountsProvider( private val context: Context, private val preferences: Preferences, private val accountSearchConditions: AccountSearchConditions, private val localStoreProvider: LocalStoreProvider ) : MessageCountsProvider { override fun getMessageCounts(account: Account): MessageCounts { if (!account.isAvailable(context)) { return MessageCounts(0, 0) } return try { val localStore = localStoreProvider.getInstance(account) val search = LocalSearch() accountSearchConditions.excludeSpecialFolders(account, search) accountSearchConditions.limitToDisplayableFolders(account, search) localStore.getMessageCounts(search) } catch (e: MessagingException) { Timber.e(e, "Unable to getMessageCounts for account: %s", account) return MessageCounts(0, 0) } } override fun getMessageCounts(searchAccount: SearchAccount): MessageCounts { val search = searchAccount.relatedSearch val accounts = search.getAccounts(preferences) var unreadCount = 0 var starredCount = 0 for (account in accounts) { var accountMessageCount = getMessageCountsWithLocalSearch(account, search) unreadCount += accountMessageCount.unread starredCount += accountMessageCount.starred } return MessageCounts(unreadCount, starredCount) } private fun getMessageCountsWithLocalSearch(account: Account, search: LocalSearch): MessageCounts { return try { val localStore = localStoreProvider.getInstance(account) localStore.getMessageCounts(search) } catch (e: MessagingException) { Timber.e(e, "Unable to getMessageCounts for account: %s", account) return MessageCounts(0, 0) } } }
app/core/src/main/java/com/fsck/k9/controller/MessagingController.java +14 −2 Original line number Diff line number Diff line Loading @@ -34,6 +34,8 @@ import com.fsck.k9.Account.DeletePolicy; import com.fsck.k9.Account.Expunge; import com.fsck.k9.DI; import com.fsck.k9.K9; import com.fsck.k9.MessageCounts; import com.fsck.k9.MessageCountsProvider; import com.fsck.k9.Preferences; import com.fsck.k9.backend.BackendManager; import com.fsck.k9.backend.api.Backend; Loading Loading @@ -126,6 +128,7 @@ public class MessagingController { private final ExecutorService threadPool = Executors.newCachedThreadPool(); private final MemorizingMessagingListener memorizingMessagingListener = new MemorizingMessagingListener(); private final UnreadMessageCountProvider unreadMessageCountProvider; private final MessageCountsProvider messageCountsProvider; private final DraftOperations draftOperations; Loading @@ -140,14 +143,15 @@ public class MessagingController { MessagingController(Context context, NotificationController notificationController, NotificationStrategy notificationStrategy, LocalStoreProvider localStoreProvider, UnreadMessageCountProvider unreadMessageCountProvider, BackendManager backendManager, Preferences preferences, MessageStoreManager messageStoreManager, UnreadMessageCountProvider unreadMessageCountProvider, MessageCountsProvider messageCountsProvider, BackendManager backendManager, Preferences preferences, MessageStoreManager messageStoreManager, SaveMessageDataCreator saveMessageDataCreator, List<ControllerExtension> controllerExtensions) { this.context = context; this.notificationController = notificationController; this.notificationStrategy = notificationStrategy; this.localStoreProvider = localStoreProvider; this.unreadMessageCountProvider = unreadMessageCountProvider; this.messageCountsProvider = messageCountsProvider; this.backendManager = backendManager; this.preferences = preferences; this.messageStoreManager = messageStoreManager; Loading Loading @@ -1683,6 +1687,14 @@ public class MessagingController { return unreadMessageCountProvider.getUnreadMessageCount(searchAccount); } public MessageCounts getMessageCounts(Account account) { return messageCountsProvider.getMessageCounts(account); } public MessageCounts getMessageCounts(SearchAccount searchAccount) { return messageCountsProvider.getMessageCounts(searchAccount); } public int getFolderUnreadMessageCount(Account account, Long folderId) throws MessagingException { LocalStore localStore = localStoreProvider.getInstance(account); LocalFolder localFolder = localStore.getFolder(folderId); Loading
app/core/src/main/java/com/fsck/k9/mailstore/FolderMapper.kt +2 −1 Original line number Diff line number Diff line Loading @@ -21,7 +21,8 @@ interface FolderDetailsAccessor { val pushClass: FolderClass val visibleLimit: Int val moreMessages: MoreMessages val messageCount: Int val unreadMessageCount: Int val starredMessageCount: Int fun serverIdOrThrow(): String }