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

Commit 68bd1214 authored by cketti's avatar cketti Committed by cketti
Browse files

Add option to show hidden folders to `ChooseFolderActivity`

parent 26049b89
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -65,7 +65,7 @@ class DisplayFolderRepository(
        }
    }

    fun getDisplayFoldersFlow(account: Account, displayMode: Account.FolderMode): Flow<List<DisplayFolder>> {
    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)
+3 −14
Original line number Diff line number Diff line
@@ -12,20 +12,9 @@
        app:showAsAction="collapseActionView|ifRoom"
        />
    <item
        android:id="@+id/display_all"
        android:title="@string/folder_list_display_mode_all"
        />
    <item
        android:id="@+id/display_1st_class"
        android:title="@string/folder_list_display_mode_first_class"
        />
    <item
        android:id="@+id/display_1st_and_2nd_class"
        android:title="@string/folder_list_display_mode_first_and_second_class"
        />
    <item
        android:id="@+id/display_not_second_class"
        android:title="@string/folder_list_display_mode_not_second_class"
        android:id="@+id/toggle_hidden_folders"
        android:checkable="true"
        android:title="@string/folder_list_show_hidden_folders"
        />
    <item
        android:id="@+id/list_folders"
+1 −6
Original line number Diff line number Diff line
@@ -621,12 +621,7 @@
    <string name="account_delete_dlg_title">Remove Account</string>

    <string name="folder_list_filter_hint">Folder name contains</string>

    <string name="folder_list_display_mode_label">Show folders…</string>
    <string name="folder_list_display_mode_all">All folders</string>
    <string name="folder_list_display_mode_first_class">1st Class folders</string>
    <string name="folder_list_display_mode_first_and_second_class">1st &amp; 2nd Class folders</string>
    <string name="folder_list_display_mode_not_second_class">Hide 2nd Class folders</string>
    <string name="folder_list_show_hidden_folders">Show hidden folders</string>

    <string name="account_settings_signature__location_label">Signature position</string>
    <string name="account_settings_signature__location_before_quoted_text">Before quoted message</string>