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

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

Merge pull request #5519 from andrewfg/starred-unread-count

Display both unread and starred message counts in navigation drawer
parents 1c922e81 74a0ed8b
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -206,6 +206,9 @@ object K9 : EarlyInit {
    @JvmStatic
    var isShowUnifiedInbox = true

    @JvmStatic
    var isShowStarredCount = false

    @JvmStatic
    var isAutoFitWidth: Boolean = false

@@ -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)
@@ -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)
+9 −2
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ val controllerModule = module {
            get<NotificationController>(),
            get<NotificationStrategy>(),
            get<LocalStoreProvider>(),
            get<UnreadMessageCountProvider>(),
            get<MessageCountsProvider>(),
            get<BackendManager>(),
            get<Preferences>(),
            get<MessageStoreManager>(),
@@ -26,5 +26,12 @@ val controllerModule = module {
            get(named("controllerExtensions"))
        )
    }
    single<UnreadMessageCountProvider> { DefaultUnreadMessageCountProvider(get(), get(), get(), get()) }
    single<MessageCountsProvider> {
        DefaultMessageCountsProvider(
            context = get(),
            preferences = get(),
            accountSearchConditions = get(),
            localStoreProvider = get()
        )
    }
}
+23 −18
Original line number Diff line number Diff line
@@ -11,20 +11,22 @@ import com.fsck.k9.search.SearchAccount
import com.fsck.k9.search.getAccounts
import timber.log.Timber

interface UnreadMessageCountProvider {
    fun getUnreadMessageCount(account: Account): Int
    fun getUnreadMessageCount(searchAccount: SearchAccount): Int
interface MessageCountsProvider {
    fun getMessageCounts(account: Account): MessageCounts
    fun getMessageCounts(searchAccount: SearchAccount): MessageCounts
}

internal class DefaultUnreadMessageCountProvider(
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
) : UnreadMessageCountProvider {
    override fun getUnreadMessageCount(account: Account): Int {
) : MessageCountsProvider {
    override fun getMessageCounts(account: Account): MessageCounts {
        if (!account.isAvailable(context)) {
            return 0
            return MessageCounts(0, 0)
        }

        return try {
@@ -34,32 +36,35 @@ internal class DefaultUnreadMessageCountProvider(
            accountSearchConditions.excludeSpecialFolders(account, search)
            accountSearchConditions.limitToDisplayableFolders(account, search)

            localStore.getUnreadMessageCount(search)
            localStore.getMessageCounts(search)
        } catch (e: MessagingException) {
            Timber.e(e, "Unable to getUnreadMessageCount for account: %s", account)
            0
            Timber.e(e, "Unable to getMessageCounts for account: %s", account)
            MessageCounts(0, 0)
        }
    }

    override fun getUnreadMessageCount(searchAccount: SearchAccount): Int {
    override fun getMessageCounts(searchAccount: SearchAccount): MessageCounts {
        val search = searchAccount.relatedSearch
        val accounts = search.getAccounts(preferences)

        var unreadMessageCount = 0
        var unreadCount = 0
        var starredCount = 0
        for (account in accounts) {
            unreadMessageCount += getUnreadMessageCountWithLocalSearch(account, search)
            val accountMessageCount = getMessageCountsWithLocalSearch(account, search)
            unreadCount += accountMessageCount.unread
            starredCount += accountMessageCount.starred
        }

        return unreadMessageCount
        return MessageCounts(unreadCount, starredCount)
    }

    private fun getUnreadMessageCountWithLocalSearch(account: Account, search: LocalSearch): Int {
    private fun getMessageCountsWithLocalSearch(account: Account, search: LocalSearch): MessageCounts {
        return try {
            val localStore = localStoreProvider.getInstance(account)
            localStore.getUnreadMessageCount(search)
            localStore.getMessageCounts(search)
        } catch (e: MessagingException) {
            Timber.e(e, "Unable to getUnreadMessageCount for account: %s", account)
            0
            Timber.e(e, "Unable to getMessageCounts for account: %s", account)
            MessageCounts(0, 0)
        }
    }
}
+7 −5
Original line number Diff line number Diff line
@@ -126,7 +126,7 @@ public class MessagingController {
    private final Set<MessagingListener> listeners = new CopyOnWriteArraySet<>();
    private final ExecutorService threadPool = Executors.newCachedThreadPool();
    private final MemorizingMessagingListener memorizingMessagingListener = new MemorizingMessagingListener();
    private final UnreadMessageCountProvider unreadMessageCountProvider;
    private final MessageCountsProvider messageCountsProvider;
    private final DraftOperations draftOperations;


@@ -141,14 +141,14 @@ public class MessagingController {

    MessagingController(Context context, NotificationController notificationController,
            NotificationStrategy notificationStrategy, LocalStoreProvider localStoreProvider,
            UnreadMessageCountProvider unreadMessageCountProvider, BackendManager backendManager,
            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;
@@ -1695,11 +1695,13 @@ public class MessagingController {
    }

    public int getUnreadMessageCount(Account account) {
        return unreadMessageCountProvider.getUnreadMessageCount(account);
        MessageCounts messageCounts = messageCountsProvider.getMessageCounts(account);
        return messageCounts.getUnread();
    }

    public int getUnreadMessageCount(SearchAccount searchAccount) {
        return unreadMessageCountProvider.getUnreadMessageCount(searchAccount);
        MessageCounts messageCounts = messageCountsProvider.getMessageCounts(searchAccount);
        return messageCounts.getUnread();
    }

    public int getFolderUnreadMessageCount(Account account, Long folderId) throws MessagingException {
+2 −1
Original line number Diff line number Diff line
@@ -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