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

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

Merge pull request #8210 from cketti/show_hidden_folders

Change folder display options
parents f022cfe0 68bd1214
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -57,7 +57,15 @@ class DisplayFolderRepository(
        }.sortedWith(sortForDisplay)
    }

    fun getDisplayFoldersFlow(account: Account, displayMode: Account.FolderMode): Flow<List<DisplayFolder>> {
    fun getDisplayFoldersFlow(account: Account, includeHiddenFolders: Boolean): Flow<List<DisplayFolder>> {
        return if (includeHiddenFolders) {
            getDisplayFoldersFlow(account, FolderMode.ALL)
        } else {
            getDisplayFoldersFlow(account.uuid)
        }
    }

    private fun getDisplayFoldersFlow(account: Account, displayMode: Account.FolderMode): Flow<List<DisplayFolder>> {
        val messageStore = messageStoreManager.getMessageStore(account.uuid)

        return callbackFlow {
+13 −16
Original line number Diff line number Diff line
@@ -11,7 +11,6 @@ import androidx.recyclerview.widget.RecyclerView
import app.k9mail.core.mail.folder.api.FolderType
import app.k9mail.core.ui.legacy.designsystem.atom.icon.Icons
import app.k9mail.legacy.account.Account
import app.k9mail.legacy.account.Account.FolderMode
import app.k9mail.legacy.message.controller.MessageReference
import app.k9mail.legacy.ui.folder.DisplayFolder
import app.k9mail.legacy.ui.folder.FolderIconProvider
@@ -64,10 +63,10 @@ class ChooseFolderActivity : K9Activity() {
            updateFolderList(folders)
        }

        val savedDisplayMode = savedInstanceState?.getString(STATE_DISPLAY_MODE)?.let { FolderMode.valueOf(it) }
        val displayMode = savedDisplayMode ?: getInitialDisplayMode()
        val savedShowHiddenFolders = savedInstanceState?.getBoolean(STATE_SHOW_HIDDEN_FOLDERS)
        val showHiddenFolders = savedShowHiddenFolders ?: false

        viewModel.setDisplayMode(account, displayMode)
        viewModel.setDisplayMode(account, showHiddenFolders)
    }

    private fun decodeArguments(savedInstanceState: Bundle?): Boolean {
@@ -88,10 +87,6 @@ class ChooseFolderActivity : K9Activity() {
        return true
    }

    private fun getInitialDisplayMode(): FolderMode {
        return account.folderDisplayMode
    }

    private fun initializeActionBar() {
        val actionBar = supportActionBar ?: error("Action bar missing")
        actionBar.setDisplayHomeAsUpEnabled(true)
@@ -146,7 +141,7 @@ class ChooseFolderActivity : K9Activity() {
    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        scrollToFolderId?.let { folderId -> outState.putLong(STATE_SCROLL_TO_FOLDER_ID, folderId) }
        outState.putString(STATE_DISPLAY_MODE, viewModel.currentDisplayMode?.name)
        outState.putBoolean(STATE_SHOW_HIDDEN_FOLDERS, viewModel.isShowHiddenFolders)
    }

    override fun onCreateOptionsMenu(menu: Menu): Boolean {
@@ -156,6 +151,11 @@ class ChooseFolderActivity : K9Activity() {
        return true
    }

    override fun onPrepareOptionsMenu(menu: Menu?): Boolean {
        menu?.findItem(R.id.toggle_hidden_folders)?.setChecked(viewModel.isShowHiddenFolders)
        return super.onPrepareOptionsMenu(menu)
    }

    private fun configureFolderSearchView(menu: Menu) {
        val folderMenuItem = menu.findItem(R.id.filter_folders)
        val folderSearchView = folderMenuItem.actionView as SearchView
@@ -178,10 +178,7 @@ class ChooseFolderActivity : K9Activity() {
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when (item.itemId) {
            android.R.id.home -> finish()
            R.id.display_1st_class -> setDisplayMode(FolderMode.FIRST_CLASS)
            R.id.display_1st_and_2nd_class -> setDisplayMode(FolderMode.FIRST_AND_SECOND_CLASS)
            R.id.display_not_second_class -> setDisplayMode(FolderMode.NOT_SECOND_CLASS)
            R.id.display_all -> setDisplayMode(FolderMode.ALL)
            R.id.toggle_hidden_folders -> setShowHiddenFolders(item.isChecked.not())
            R.id.list_folders -> refreshFolderList()
            else -> return super.onOptionsItemSelected(item)
        }
@@ -192,8 +189,8 @@ class ChooseFolderActivity : K9Activity() {
        messagingController.refreshFolderList(account)
    }

    private fun setDisplayMode(displayMode: FolderMode) {
        viewModel.setDisplayMode(account, displayMode)
    private fun setShowHiddenFolders(enabled: Boolean) {
        viewModel.setDisplayMode(account, enabled)
    }

    private fun returnResult(folderId: Long, displayName: String) {
@@ -239,7 +236,7 @@ class ChooseFolderActivity : K9Activity() {

    companion object {
        private const val STATE_SCROLL_TO_FOLDER_ID = "scrollToFolderId"
        private const val STATE_DISPLAY_MODE = "displayMode"
        private const val STATE_SHOW_HIDDEN_FOLDERS = "showHiddenFolders"
        private const val EXTRA_ACCOUNT = "accountUuid"
        private const val EXTRA_CURRENT_FOLDER_ID = "currentFolderId"
        private const val EXTRA_SCROLL_TO_FOLDER_ID = "scrollToFolderId"
+7 −8
Original line number Diff line number Diff line
@@ -5,7 +5,6 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.asLiveData
import androidx.lifecycle.viewModelScope
import app.k9mail.legacy.account.Account
import app.k9mail.legacy.account.Account.FolderMode
import app.k9mail.legacy.ui.folder.DisplayFolder
import app.k9mail.legacy.ui.folder.DisplayFolderRepository
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -19,23 +18,23 @@ class ChooseFolderViewModel(
) : ViewModel() {
    private val inputFlow = MutableSharedFlow<DisplayMode>(replay = 1)
    private val foldersFlow = inputFlow
        .flatMapLatest { (account, displayMode) ->
            folderRepository.getDisplayFoldersFlow(account, displayMode)
        .flatMapLatest { (account, showHiddenFolders) ->
            folderRepository.getDisplayFoldersFlow(account, showHiddenFolders)
        }

    var currentDisplayMode: FolderMode? = null
    var isShowHiddenFolders: Boolean = false
        private set

    fun getFolders(): LiveData<List<DisplayFolder>> {
        return foldersFlow.asLiveData()
    }

    fun setDisplayMode(account: Account, displayMode: FolderMode) {
        currentDisplayMode = displayMode
    fun setDisplayMode(account: Account, showHiddenFolders: Boolean) {
        isShowHiddenFolders = showHiddenFolders
        viewModelScope.launch {
            inputFlow.emit(DisplayMode(account, displayMode))
            inputFlow.emit(DisplayMode(account, showHiddenFolders))
        }
    }
}

private data class DisplayMode(val account: Account, val displayMode: FolderMode)
private data class DisplayMode(val account: Account, val showHiddenFolders: Boolean)
+0 −11
Original line number Diff line number Diff line
@@ -121,10 +121,6 @@ class ManageFoldersFragment : Fragment() {
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when (item.itemId) {
            R.id.list_folders -> refreshFolderList()
            R.id.display_1st_class -> setDisplayMode(Account.FolderMode.FIRST_CLASS)
            R.id.display_1st_and_2nd_class -> setDisplayMode(Account.FolderMode.FIRST_AND_SECOND_CLASS)
            R.id.display_not_second_class -> setDisplayMode(Account.FolderMode.NOT_SECOND_CLASS)
            R.id.display_all -> setDisplayMode(Account.FolderMode.ALL)
            else -> return super.onOptionsItemSelected(item)
        }

@@ -135,13 +131,6 @@ class ManageFoldersFragment : Fragment() {
        messagingController.refreshFolderList(account)
    }

    private fun setDisplayMode(newMode: Account.FolderMode) {
        account.folderDisplayMode = newMode
        preferences.saveAccount(account)

        itemAdapter.filter(null)
    }

    private fun folderListFilter(item: FolderListItem, constraint: CharSequence?): Boolean {
        if (constraint.isNullOrEmpty()) return true

+1 −1
Original line number Diff line number Diff line
@@ -11,6 +11,6 @@ class ManageFoldersViewModel(
    private val folderRepository: DisplayFolderRepository,
) : ViewModel() {
    fun getFolders(account: Account): LiveData<List<DisplayFolder>> {
        return folderRepository.getDisplayFoldersFlow(account.uuid).asLiveData()
        return folderRepository.getDisplayFoldersFlow(account, includeHiddenFolders = true).asLiveData()
    }
}
Loading