Skip to content

Commit 56d57bd

Browse files
committed
feat(ui): toggle archive granularity based on folder selection
1 parent 1bbf20a commit 56d57bd

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

legacy/ui/legacy/src/main/java/com/fsck/k9/ui/settings/account/AccountSettingsFragment.kt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,16 @@ class AccountSettingsFragment : PreferenceFragmentCompat(), ConfirmationDialogFr
303303
}
304304
}
305305

306+
private fun initializeArchiveFolderPreference() {
307+
findPreference<Preference>(PREFERENCE_ARCHIVE_FOLDER)?.apply {
308+
setOnPreferenceChangeListener { pref, newValue ->
309+
val granularity = findPreference<Preference>(PREFERENCE_ARCHIVE_GRANULARITY)
310+
granularity?.isEnabled = (pref as? FolderListPreference)?.isNoneSelected(newValue?.toString()) == false
311+
true
312+
}
313+
}
314+
}
315+
306316
private fun maybeUpdateNotificationPreferences(account: LegacyAccountDto) {
307317
if (notificationSoundPreference != null ||
308318
notificationLightPreference != null ||
@@ -422,10 +432,13 @@ class AccountSettingsFragment : PreferenceFragmentCompat(), ConfirmationDialogFr
422432

423433
if (!messagingController.isMoveCapable(account)) {
424434
findPreference<Preference>(PREFERENCE_ARCHIVE_FOLDER).remove()
435+
findPreference<Preference>(PREFERENCE_ARCHIVE_GRANULARITY).remove()
425436
findPreference<Preference>(PREFERENCE_DRAFTS_FOLDER).remove()
426437
findPreference<Preference>(PREFERENCE_SENT_FOLDER).remove()
427438
findPreference<Preference>(PREFERENCE_SPAM_FOLDER).remove()
428439
findPreference<Preference>(PREFERENCE_TRASH_FOLDER).remove()
440+
} else {
441+
initializeArchiveFolderPreference()
429442
}
430443

431444
loadFolders(account)
@@ -455,6 +468,15 @@ class AccountSettingsFragment : PreferenceFragmentCompat(), ConfirmationDialogFr
455468

456469
val automaticFolder = remoteFolderInfo.automaticSpecialFolders[type]
457470
folderListPreference.setFolders(remoteFolderInfo.folders, automaticFolder)
471+
when (type) {
472+
FolderType.ARCHIVE if folderListPreference.selected == null ->
473+
findPreference<Preference>(PREFERENCE_ARCHIVE_GRANULARITY)?.isEnabled = false
474+
475+
FolderType.ARCHIVE ->
476+
findPreference<Preference>(PREFERENCE_ARCHIVE_GRANULARITY)?.isEnabled = true
477+
478+
else -> Unit
479+
}
458480
}
459481

460482
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
@@ -529,6 +551,7 @@ class AccountSettingsFragment : PreferenceFragmentCompat(), ConfirmationDialogFr
529551
private const val PREFERENCE_AUTO_SELECT_FOLDER = "auto_select_folder"
530552
private const val PREFERENCE_SUBSCRIBED_FOLDERS_ONLY = "subscribed_folders_only"
531553
private const val PREFERENCE_ARCHIVE_FOLDER = "archive_folder"
554+
private const val PREFERENCE_ARCHIVE_GRANULARITY = "archive_granularity"
532555
private const val PREFERENCE_DRAFTS_FOLDER = "drafts_folder"
533556
private const val PREFERENCE_SENT_FOLDER = "sent_folder"
534557
private const val PREFERENCE_SPAM_FOLDER = "spam_folder"

legacy/ui/legacy/src/main/java/com/fsck/k9/ui/settings/account/FolderListPreference.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ constructor(
3434
private val folderNameFormatter: FolderNameFormatter by inject { parametersOf(context) }
3535
private val noFolderSelectedName = context.getString(R.string.account_settings_no_folder_selected).italicize()
3636
private lateinit var automaticFolderOption: CharSequence
37+
val selected: Long?
38+
get() = getSelectedValueAsString()
39+
?.toLongOrNull()
3740

3841
init {
3942
entries = emptyArray()
@@ -79,6 +82,8 @@ constructor(
7982
}
8083
}
8184

85+
fun isNoneSelected(value: String? = this.value): Boolean = getSelectedValueAsString(value).isNullOrBlank()
86+
8287
private fun getFolderDisplayNames(folders: List<RemoteFolder>) = folders.map { folderNameFormatter.displayName(it) }
8388

8489
private fun getFolderValues(folders: List<RemoteFolder>) = folders.map { MANUAL_PREFIX + it.id.toString() }
@@ -87,6 +92,10 @@ constructor(
8792
return SpannableString(this).apply { setSpan(StyleSpan(Typeface.ITALIC), 0, this.length, 0) }
8893
}
8994

95+
private fun getSelectedValueAsString(value: String? = this.value): String? = value
96+
?.substringAfter(MANUAL_PREFIX)
97+
?.substringBefore(AUTOMATIC_PREFIX)
98+
9099
companion object {
91100
const val FOLDER_VALUE_DELIMITER = "|"
92101
const val AUTOMATIC_PREFIX = "AUTOMATIC|"

0 commit comments

Comments
 (0)