diff --git a/app-k9mail/src/debug/kotlin/app/k9mail/featureflag/K9FeatureFlagFactory.kt b/app-k9mail/src/debug/kotlin/app/k9mail/featureflag/K9FeatureFlagFactory.kt index 433ae8ba14b..188c5261fa5 100644 --- a/app-k9mail/src/debug/kotlin/app/k9mail/featureflag/K9FeatureFlagFactory.kt +++ b/app-k9mail/src/debug/kotlin/app/k9mail/featureflag/K9FeatureFlagFactory.kt @@ -15,7 +15,6 @@ class K9FeatureFlagFactory : FeatureFlagFactory { FeatureFlag("new_account_settings".toFeatureFlagKey(), enabled = true), FeatureFlag("disable_font_size_config".toFeatureFlagKey(), enabled = true), FeatureFlag("email_notification_default".toFeatureFlagKey(), enabled = true), - FeatureFlag("enable_dropdown_drawer".toFeatureFlagKey(), enabled = true), FeatureFlag("enable_dropdown_drawer_ui".toFeatureFlagKey(), enabled = true), FeatureFlag(FeatureFlagKey.DisplayInAppNotifications, enabled = false), FeatureFlag(FeatureFlagKey.UseNotificationSenderForSystemNotifications, enabled = false), diff --git a/app-k9mail/src/release/kotlin/app/k9mail/featureflag/K9FeatureFlagFactory.kt b/app-k9mail/src/release/kotlin/app/k9mail/featureflag/K9FeatureFlagFactory.kt index e8058409a76..d3891b2742b 100644 --- a/app-k9mail/src/release/kotlin/app/k9mail/featureflag/K9FeatureFlagFactory.kt +++ b/app-k9mail/src/release/kotlin/app/k9mail/featureflag/K9FeatureFlagFactory.kt @@ -18,7 +18,6 @@ class K9FeatureFlagFactory : FeatureFlagFactory { FeatureFlag("new_account_settings".toFeatureFlagKey(), enabled = true), FeatureFlag("disable_font_size_config".toFeatureFlagKey(), enabled = true), FeatureFlag("email_notification_default".toFeatureFlagKey(), enabled = true), - FeatureFlag("enable_dropdown_drawer".toFeatureFlagKey(), enabled = true), FeatureFlag("enable_dropdown_drawer_ui".toFeatureFlagKey(), enabled = true), FeatureFlag(FeatureFlagKey.DisplayInAppNotifications, enabled = false), FeatureFlag(FeatureFlagKey.UseNotificationSenderForSystemNotifications, enabled = false), diff --git a/app-thunderbird/src/beta/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt b/app-thunderbird/src/beta/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt index a1852ca5a9d..8dee0ab1365 100644 --- a/app-thunderbird/src/beta/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt +++ b/app-thunderbird/src/beta/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt @@ -18,7 +18,6 @@ class TbFeatureFlagFactory : FeatureFlagFactory { FeatureFlag("new_account_settings".toFeatureFlagKey(), enabled = true), FeatureFlag("disable_font_size_config".toFeatureFlagKey(), enabled = true), FeatureFlag("email_notification_default".toFeatureFlagKey(), enabled = true), - FeatureFlag("enable_dropdown_drawer".toFeatureFlagKey(), enabled = true), FeatureFlag("enable_dropdown_drawer_ui".toFeatureFlagKey(), enabled = true), FeatureFlag(FeatureFlagKey.DisplayInAppNotifications, enabled = true), FeatureFlag(FeatureFlagKey.UseNotificationSenderForSystemNotifications, enabled = false), diff --git a/app-thunderbird/src/daily/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt b/app-thunderbird/src/daily/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt index 51a6f461fcc..d3597263e27 100644 --- a/app-thunderbird/src/daily/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt +++ b/app-thunderbird/src/daily/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt @@ -18,7 +18,6 @@ class TbFeatureFlagFactory : FeatureFlagFactory { FeatureFlag("new_account_settings".toFeatureFlagKey(), enabled = true), FeatureFlag("disable_font_size_config".toFeatureFlagKey(), enabled = true), FeatureFlag("email_notification_default".toFeatureFlagKey(), enabled = true), - FeatureFlag("enable_dropdown_drawer".toFeatureFlagKey(), enabled = true), FeatureFlag("enable_dropdown_drawer_ui".toFeatureFlagKey(), enabled = true), FeatureFlag(FeatureFlagKey.DisplayInAppNotifications, enabled = true), FeatureFlag(FeatureFlagKey.UseNotificationSenderForSystemNotifications, enabled = false), diff --git a/app-thunderbird/src/debug/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt b/app-thunderbird/src/debug/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt index 88a2b989005..39b21fcfa54 100644 --- a/app-thunderbird/src/debug/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt +++ b/app-thunderbird/src/debug/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt @@ -18,7 +18,6 @@ class TbFeatureFlagFactory : FeatureFlagFactory { FeatureFlag("new_account_settings".toFeatureFlagKey(), enabled = true), FeatureFlag("disable_font_size_config".toFeatureFlagKey(), enabled = true), FeatureFlag("email_notification_default".toFeatureFlagKey(), enabled = true), - FeatureFlag("enable_dropdown_drawer".toFeatureFlagKey(), enabled = true), FeatureFlag("enable_dropdown_drawer_ui".toFeatureFlagKey(), enabled = true), FeatureFlag(FeatureFlagKey.DisplayInAppNotifications, enabled = true), FeatureFlag(FeatureFlagKey.UseNotificationSenderForSystemNotifications, enabled = true), diff --git a/app-thunderbird/src/release/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt b/app-thunderbird/src/release/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt index 295060007a2..0ff7ae34211 100644 --- a/app-thunderbird/src/release/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt +++ b/app-thunderbird/src/release/kotlin/net/thunderbird/android/featureflag/TbFeatureFlagFactory.kt @@ -18,7 +18,6 @@ class TbFeatureFlagFactory : FeatureFlagFactory { FeatureFlag("new_account_settings".toFeatureFlagKey(), enabled = true), FeatureFlag("disable_font_size_config".toFeatureFlagKey(), enabled = true), FeatureFlag("email_notification_default".toFeatureFlagKey(), enabled = true), - FeatureFlag("enable_dropdown_drawer".toFeatureFlagKey(), enabled = true), FeatureFlag("enable_dropdown_drawer_ui".toFeatureFlagKey(), enabled = true), FeatureFlag(FeatureFlagKey.DisplayInAppNotifications, enabled = false), FeatureFlag(FeatureFlagKey.UseNotificationSenderForSystemNotifications, enabled = false), diff --git a/feature/navigation/drawer/siderail/build.gradle.kts b/feature/navigation/drawer/siderail/build.gradle.kts deleted file mode 100644 index f1921bc0ab2..00000000000 --- a/feature/navigation/drawer/siderail/build.gradle.kts +++ /dev/null @@ -1,38 +0,0 @@ -plugins { - id(ThunderbirdPlugins.Library.androidCompose) -} - -android { - namespace = "net.thunderbird.feature.navigation.drawer.siderail" - resourcePrefix = "navigation_drawer_siderail_" - - testOptions { - unitTests { - isIncludeAndroidResources = true - } - } -} - -dependencies { - api(projects.feature.navigation.drawer.api) - - implementation(projects.core.ui.theme.api) - implementation(projects.core.ui.compose.designsystem) - - implementation(projects.feature.account.avatar.impl) - implementation(projects.feature.mail.account.api) - implementation(projects.feature.mail.folder.api) - - implementation(projects.core.android.account) - implementation(projects.legacy.mailstore) - implementation(projects.legacy.message) - implementation(projects.feature.search.implLegacy) - implementation(projects.legacy.ui.folder) - implementation(projects.core.featureflag) - - testImplementation(projects.core.ui.compose.testing) - - // Fakes - debugImplementation(projects.feature.account.fake) - testImplementation(projects.feature.account.fake) -} diff --git a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerContentPreview.kt b/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerContentPreview.kt deleted file mode 100644 index 939ef6fa9b1..00000000000 --- a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerContentPreview.kt +++ /dev/null @@ -1,288 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui - -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.width -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme -import app.k9mail.core.ui.compose.designsystem.atom.Surface -import kotlin.collections.get -import kotlinx.collections.immutable.persistentListOf -import net.thunderbird.feature.navigation.drawer.api.NavigationDrawerExternalContract.DrawerConfig -import net.thunderbird.feature.navigation.drawer.siderail.ui.FakeData.DISPLAY_ACCOUNT -import net.thunderbird.feature.navigation.drawer.siderail.ui.FakeData.DISPLAY_FOLDER -import net.thunderbird.feature.navigation.drawer.siderail.ui.FakeData.UNIFIED_FOLDER -import net.thunderbird.feature.navigation.drawer.siderail.ui.FakeData.createAccountList -import net.thunderbird.feature.navigation.drawer.siderail.ui.FakeData.createDisplayFolderList - -@Composable -@Preview(showBackground = true) -internal fun DrawerContentPreview() { - PreviewWithTheme { - DrawerContent( - state = DrawerContract.State( - accounts = persistentListOf(), - selectedAccountId = null, - folders = persistentListOf(), - ), - onEvent = {}, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun DrawerContentWithAccountPreview() { - PreviewWithTheme { - DrawerContent( - state = DrawerContract.State( - accounts = persistentListOf(DISPLAY_ACCOUNT), - selectedAccountId = DISPLAY_ACCOUNT.id, - folders = persistentListOf(), - ), - onEvent = {}, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun DrawerContentWithFoldersPreview() { - PreviewWithTheme { - DrawerContent( - state = DrawerContract.State( - accounts = persistentListOf( - DISPLAY_ACCOUNT, - ), - selectedAccountId = null, - folders = persistentListOf( - UNIFIED_FOLDER, - DISPLAY_FOLDER, - ), - ), - onEvent = {}, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun DrawerContentWithSelectedFolderPreview() { - PreviewWithTheme { - DrawerContent( - state = DrawerContract.State( - accounts = persistentListOf( - DISPLAY_ACCOUNT, - ), - selectedAccountId = DISPLAY_ACCOUNT.id, - folders = persistentListOf( - UNIFIED_FOLDER, - DISPLAY_FOLDER, - ), - selectedFolderId = DISPLAY_FOLDER.id, - ), - onEvent = {}, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun DrawerContentWithSelectedUnifiedFolderPreview() { - PreviewWithTheme { - DrawerContent( - state = DrawerContract.State( - accounts = persistentListOf( - DISPLAY_ACCOUNT, - ), - selectedAccountId = DISPLAY_ACCOUNT.id, - folders = persistentListOf( - UNIFIED_FOLDER, - DISPLAY_FOLDER, - ), - selectedFolderId = UNIFIED_FOLDER.id, - ), - onEvent = {}, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun DrawerContentSingleAccountPreview() { - val displayFolders = createDisplayFolderList(hasUnifiedFolder = false) - - PreviewWithTheme { - DrawerContent( - state = DrawerContract.State( - accounts = persistentListOf( - DISPLAY_ACCOUNT, - ), - selectedAccountId = DISPLAY_ACCOUNT.id, - folders = displayFolders, - selectedFolderId = displayFolders[0].id, - config = DrawerConfig( - showUnifiedFolders = false, - showStarredCount = false, - showAccountSelector = false, - ), - ), - onEvent = {}, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun DrawerContentSingleAccountWithAccountSelectionPreview() { - val displayFolders = createDisplayFolderList(hasUnifiedFolder = false) - - PreviewWithTheme { - DrawerContent( - state = DrawerContract.State( - accounts = persistentListOf( - DISPLAY_ACCOUNT, - ), - selectedAccountId = DISPLAY_ACCOUNT.id, - folders = displayFolders, - selectedFolderId = displayFolders[0].id, - config = DrawerConfig( - showUnifiedFolders = false, - showStarredCount = false, - showAccountSelector = true, - ), - ), - onEvent = {}, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun DrawerContentMultipleAccountsAccountPreview() { - val accountList = createAccountList() - val displayFolders = createDisplayFolderList(hasUnifiedFolder = true) - - PreviewWithTheme { - DrawerContent( - state = DrawerContract.State( - accounts = accountList, - selectedAccountId = accountList[0].id, - folders = displayFolders, - selectedFolderId = UNIFIED_FOLDER.id, - config = DrawerConfig( - showUnifiedFolders = false, - showStarredCount = false, - showAccountSelector = false, - ), - ), - onEvent = {}, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun DrawerContentMultipleAccountsWithAccountSelectionPreview() { - val accountList = createAccountList() - - PreviewWithTheme { - DrawerContent( - state = DrawerContract.State( - accounts = accountList, - selectedAccountId = accountList[1].id, - folders = createDisplayFolderList(hasUnifiedFolder = true), - selectedFolderId = UNIFIED_FOLDER.id, - config = DrawerConfig( - showUnifiedFolders = false, - showStarredCount = false, - showAccountSelector = true, - ), - ), - onEvent = {}, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun DrawerContentMultipleAccountsWithDifferentAccountSelectionPreview() { - val accountList = createAccountList() - - PreviewWithTheme { - DrawerContent( - state = DrawerContract.State( - accounts = accountList, - selectedAccountId = accountList[2].id, - folders = createDisplayFolderList(hasUnifiedFolder = true), - selectedFolderId = UNIFIED_FOLDER.id, - config = DrawerConfig( - showUnifiedFolders = false, - showStarredCount = false, - showAccountSelector = true, - ), - ), - onEvent = {}, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun DrawerContentSmallScreenPreview() { - val accountList = createAccountList() - - PreviewWithTheme { - Surface( - modifier = Modifier - .width(320.dp) - .height(480.dp), - ) { - DrawerContent( - state = DrawerContract.State( - accounts = accountList, - selectedAccountId = accountList[2].id, - folders = createDisplayFolderList(hasUnifiedFolder = true), - selectedFolderId = UNIFIED_FOLDER.id, - config = DrawerConfig( - showUnifiedFolders = false, - showStarredCount = false, - showAccountSelector = true, - ), - ), - onEvent = {}, - ) - } - } -} - -@Composable -@Preview(showBackground = true) -internal fun DrawerContentVerySmallScreenPreview() { - val accountList = createAccountList() - - PreviewWithTheme { - Surface( - modifier = Modifier - .width(240.dp) - .height(320.dp), - ) { - DrawerContent( - state = DrawerContract.State( - accounts = accountList, - selectedAccountId = accountList[2].id, - folders = createDisplayFolderList(hasUnifiedFolder = true), - selectedFolderId = UNIFIED_FOLDER.id, - config = DrawerConfig( - showUnifiedFolders = false, - showStarredCount = false, - showAccountSelector = true, - ), - ), - onEvent = {}, - ) - } - } -} diff --git a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/FakeData.kt b/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/FakeData.kt deleted file mode 100644 index 5e2414251b2..00000000000 --- a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/FakeData.kt +++ /dev/null @@ -1,158 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui - -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.toArgb -import kotlinx.collections.immutable.PersistentList -import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toPersistentList -import net.thunderbird.account.fake.FakeAccountData.ACCOUNT_ID_RAW -import net.thunderbird.core.android.account.Identity -import net.thunderbird.core.android.account.LegacyAccountDto -import net.thunderbird.feature.mail.folder.api.Folder -import net.thunderbird.feature.mail.folder.api.FolderType -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayAccount -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayAccountFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolderType - -internal object FakeData { - - const val DISPLAY_NAME = "Account Name" - const val EMAIL_ADDRESS = "test@example.com" - - val ACCOUNT = LegacyAccountDto( - uuid = ACCOUNT_ID_RAW, - ).apply { - identities = ArrayList() - - val identity = Identity( - signatureUse = false, - signature = "", - description = "", - ) - identities.add(identity) - - name = DISPLAY_NAME - email = EMAIL_ADDRESS - } - - val DISPLAY_ACCOUNT = DisplayAccount( - id = ACCOUNT_ID_RAW, - name = DISPLAY_NAME, - email = EMAIL_ADDRESS, - color = Color.Red.toArgb(), - unreadMessageCount = 0, - starredMessageCount = 0, - ) - - val FOLDER = Folder( - id = 1, - name = "Folder Name", - type = FolderType.REGULAR, - isLocalOnly = false, - ) - - val DISPLAY_FOLDER = DisplayAccountFolder( - accountId = ACCOUNT_ID_RAW, - folder = FOLDER, - isInTopGroup = false, - unreadMessageCount = 14, - starredMessageCount = 5, - ) - - val UNIFIED_FOLDER = DisplayUnifiedFolder( - id = "unified_inbox", - unifiedType = DisplayUnifiedFolderType.INBOX, - unreadMessageCount = 123, - starredMessageCount = 567, - ) - - fun createAccountList(): PersistentList { - return persistentListOf( - DisplayAccount( - id = "account1", - name = "job@example.com", - email = "job@example.com", - color = Color.Green.toArgb(), - unreadMessageCount = 2, - starredMessageCount = 0, - ), - DisplayAccount( - id = "account2", - name = "Jodie Doe", - email = "jodie@example.com", - color = Color.Red.toArgb(), - unreadMessageCount = 12, - starredMessageCount = 0, - ), - DisplayAccount( - id = "account3", - name = "John Doe", - email = "john@example.com", - color = Color.Cyan.toArgb(), - unreadMessageCount = 0, - starredMessageCount = 0, - ), - ) - } - - fun createDisplayFolderList(hasUnifiedFolder: Boolean): PersistentList { - val folders = mutableListOf() - - if (hasUnifiedFolder) { - folders.add(UNIFIED_FOLDER) - } - - folders.addAll( - listOf( - DISPLAY_FOLDER.copy( - folder = FOLDER.copy(id = 2, name = "Inbox", type = FolderType.INBOX), - unreadMessageCount = 12, - ), - DISPLAY_FOLDER.copy( - folder = FOLDER.copy(id = 3, name = "Outbox", type = FolderType.OUTBOX), - unreadMessageCount = 0, - ), - DISPLAY_FOLDER.copy( - folder = FOLDER.copy(id = 4, name = "Drafts", type = FolderType.DRAFTS), - unreadMessageCount = 0, - ), - DISPLAY_FOLDER.copy( - folder = FOLDER.copy(id = 5, name = "Sent", type = FolderType.SENT), - unreadMessageCount = 0, - ), - DISPLAY_FOLDER.copy( - folder = FOLDER.copy(id = 6, name = "Spam", type = FolderType.SPAM), - unreadMessageCount = 5, - ), - DISPLAY_FOLDER.copy( - folder = FOLDER.copy(id = 7, name = "Trash", type = FolderType.TRASH), - unreadMessageCount = 0, - ), - DISPLAY_FOLDER.copy( - folder = FOLDER.copy(id = 8, name = "Archive", type = FolderType.ARCHIVE), - unreadMessageCount = 0, - ), - DISPLAY_FOLDER.copy( - folder = FOLDER.copy(id = 9, name = "Work", type = FolderType.REGULAR), - unreadMessageCount = 3, - ), - DISPLAY_FOLDER.copy( - folder = FOLDER.copy(id = 10, name = "Personal", type = FolderType.REGULAR), - unreadMessageCount = 4, - ), - DISPLAY_FOLDER.copy( - folder = FOLDER.copy(id = 11, name = "Important", type = FolderType.REGULAR), - unreadMessageCount = 0, - ), - DISPLAY_FOLDER.copy( - folder = FOLDER.copy(id = 12, name = "Later", type = FolderType.REGULAR), - unreadMessageCount = 0, - ), - ), - ) - - return folders.toPersistentList() - } -} diff --git a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountAvatarPreview.kt b/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountAvatarPreview.kt deleted file mode 100644 index 1dc4d160eb5..00000000000 --- a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountAvatarPreview.kt +++ /dev/null @@ -1,60 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.account - -import androidx.compose.runtime.Composable -import androidx.compose.ui.tooling.preview.Preview -import app.k9mail.core.ui.compose.designsystem.PreviewWithThemes -import net.thunderbird.feature.navigation.drawer.siderail.ui.FakeData.DISPLAY_ACCOUNT - -@Composable -@Preview(showBackground = true) -internal fun AccountAvatarPreview() { - PreviewWithThemes { - AccountAvatar( - account = DISPLAY_ACCOUNT, - onClick = {}, - selected = false, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun AccountAvatarWithUnreadCountPreview() { - PreviewWithThemes { - AccountAvatar( - account = DISPLAY_ACCOUNT.copy( - unreadMessageCount = 12, - ), - onClick = {}, - selected = false, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun AccountAvatarWithUnreadCountMaxedPreview() { - PreviewWithThemes { - AccountAvatar( - account = DISPLAY_ACCOUNT.copy( - unreadMessageCount = 100, - ), - onClick = {}, - selected = false, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun AccountAvatarSelectedPreview() { - PreviewWithThemes { - AccountAvatar( - account = DISPLAY_ACCOUNT.copy( - color = 0xFFFF0000.toInt(), - ), - onClick = {}, - selected = true, - ) - } -} diff --git a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountIndicatorPreview.kt b/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountIndicatorPreview.kt deleted file mode 100644 index 05ae1bda102..00000000000 --- a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountIndicatorPreview.kt +++ /dev/null @@ -1,43 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.account - -import androidx.compose.foundation.layout.height -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.toArgb -import androidx.compose.ui.tooling.preview.Preview -import app.k9mail.core.ui.compose.designsystem.PreviewWithThemes -import app.k9mail.core.ui.compose.theme2.MainTheme - -@Composable -@Preview(showBackground = true) -internal fun AccountIndicatorPreview() { - PreviewWithThemes { - AccountIndicator( - accountColor = 0, - modifier = Modifier.height(MainTheme.spacings.double), - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun AccountIndicatorPreviewWithYellowAccountColor() { - PreviewWithThemes { - AccountIndicator( - accountColor = Color.Yellow.toArgb(), - modifier = Modifier.height(MainTheme.spacings.double), - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun AccountIndicatorPreviewWithGrayAccountColor() { - PreviewWithThemes { - AccountIndicator( - accountColor = Color.Gray.toArgb(), - modifier = Modifier.height(MainTheme.spacings.double), - ) - } -} diff --git a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountListItemPreview.kt b/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountListItemPreview.kt deleted file mode 100644 index 7c99ce8e513..00000000000 --- a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountListItemPreview.kt +++ /dev/null @@ -1,30 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.account - -import androidx.compose.runtime.Composable -import androidx.compose.ui.tooling.preview.Preview -import app.k9mail.core.ui.compose.designsystem.PreviewWithThemes -import net.thunderbird.feature.navigation.drawer.siderail.ui.FakeData.DISPLAY_ACCOUNT - -@Composable -@Preview(showBackground = true) -internal fun AccountListItemPreview() { - PreviewWithThemes { - AccountListItem( - account = DISPLAY_ACCOUNT, - onClick = { }, - selected = false, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun AccountListItemSelectedPreview() { - PreviewWithThemes { - AccountListItem( - account = DISPLAY_ACCOUNT, - onClick = { }, - selected = true, - ) - } -} diff --git a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountListPreview.kt b/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountListPreview.kt deleted file mode 100644 index f6c0492fa1f..00000000000 --- a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountListPreview.kt +++ /dev/null @@ -1,39 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.account - -import androidx.compose.runtime.Composable -import androidx.compose.ui.tooling.preview.Preview -import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme -import kotlinx.collections.immutable.persistentListOf -import net.thunderbird.feature.navigation.drawer.siderail.ui.FakeData.DISPLAY_ACCOUNT - -@Composable -@Preview(showBackground = true) -internal fun AccountListPreview() { - PreviewWithTheme { - AccountList( - accounts = persistentListOf( - DISPLAY_ACCOUNT, - ), - selectedAccount = null, - onAccountClick = { }, - onSettingsClick = { }, - onSyncAllAccountsClick = { }, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun AccountListWithSelectedPreview() { - PreviewWithTheme { - AccountList( - accounts = persistentListOf( - DISPLAY_ACCOUNT, - ), - selectedAccount = DISPLAY_ACCOUNT, - onAccountClick = { }, - onSettingsClick = { }, - onSyncAllAccountsClick = { }, - ) - } -} diff --git a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountViewPreview.kt b/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountViewPreview.kt deleted file mode 100644 index 04ab8eff2d3..00000000000 --- a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountViewPreview.kt +++ /dev/null @@ -1,54 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.account - -import androidx.compose.runtime.Composable -import androidx.compose.ui.tooling.preview.Preview -import app.k9mail.core.ui.compose.designsystem.PreviewWithThemes -import net.thunderbird.feature.navigation.drawer.siderail.ui.FakeData.DISPLAY_ACCOUNT - -@Composable -@Preview(showBackground = true) -internal fun AccountViewPreview() { - PreviewWithThemes { - AccountView( - account = DISPLAY_ACCOUNT, - onClick = {}, - showAvatar = false, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun AccountViewWithColorPreview() { - PreviewWithThemes { - AccountView( - account = DISPLAY_ACCOUNT, - onClick = {}, - showAvatar = false, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun AccountViewWithLongDisplayName() { - PreviewWithThemes { - AccountView( - account = DISPLAY_ACCOUNT, - onClick = {}, - showAvatar = false, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun AccountViewWithLongEmailPreview() { - PreviewWithThemes { - AccountView( - account = DISPLAY_ACCOUNT, - onClick = {}, - showAvatar = false, - ) - } -} diff --git a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/folder/FolderListItemBadgePreview.kt b/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/folder/FolderListItemBadgePreview.kt deleted file mode 100644 index b8c9301a594..00000000000 --- a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/folder/FolderListItemBadgePreview.kt +++ /dev/null @@ -1,101 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.folder - -import androidx.compose.runtime.Composable -import androidx.compose.ui.tooling.preview.Preview -import app.k9mail.core.ui.compose.designsystem.PreviewWithThemes - -@Composable -@Preview(showBackground = true) -internal fun FolderListItemBadgePreview() { - PreviewWithThemes { - FolderListItemBadge( - unreadCount = 99, - starredCount = 0, - showStarredCount = true, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun FolderListItemBadgeWithStarredCountPreview() { - PreviewWithThemes { - FolderListItemBadge( - unreadCount = 99, - starredCount = 1, - showStarredCount = true, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun FolderListItemBadgeWithZeroUnreadCountPreview() { - PreviewWithThemes { - FolderListItemBadge( - unreadCount = 0, - starredCount = 1, - showStarredCount = true, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun FolderListItemBadgeWithZeroStarredCountPreview() { - PreviewWithThemes { - FolderListItemBadge( - unreadCount = 99, - starredCount = 0, - showStarredCount = true, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun FolderListItemBadgeWithZeroCountsPreview() { - PreviewWithThemes { - FolderListItemBadge( - unreadCount = 0, - starredCount = 0, - showStarredCount = true, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun FolderListItemBadgeWithoutStarredCountPreview() { - PreviewWithThemes { - FolderListItemBadge( - unreadCount = 99, - starredCount = 1, - showStarredCount = false, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun FolderListItemBadgeWith100CountsPreview() { - PreviewWithThemes { - FolderListItemBadge( - unreadCount = 100, - starredCount = 100, - showStarredCount = true, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun FolderListItemBadgeWith1000CountsPreview() { - PreviewWithThemes { - FolderListItemBadge( - unreadCount = 1000, - starredCount = 1000, - showStarredCount = true, - ) - } -} diff --git a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/folder/FolderListItemPreview.kt b/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/folder/FolderListItemPreview.kt deleted file mode 100644 index 7682c6e0da7..00000000000 --- a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/folder/FolderListItemPreview.kt +++ /dev/null @@ -1,98 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.folder - -import androidx.compose.runtime.Composable -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.tooling.preview.Preview -import app.k9mail.core.ui.compose.designsystem.PreviewWithThemes -import app.k9mail.legacy.ui.folder.FolderNameFormatter -import net.thunderbird.feature.mail.folder.api.FolderType -import net.thunderbird.feature.navigation.drawer.siderail.ui.FakeData.DISPLAY_FOLDER -import net.thunderbird.feature.navigation.drawer.siderail.ui.FakeData.UNIFIED_FOLDER - -@Composable -@Preview(showBackground = true) -internal fun FolderListItemPreview() { - PreviewWithThemes { - FolderListItem( - displayFolder = DISPLAY_FOLDER, - selected = false, - showStarredCount = false, - onClick = {}, - folderNameFormatter = FolderNameFormatter(LocalContext.current.resources), - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun FolderListItemSelectedPreview() { - PreviewWithThemes { - FolderListItem( - displayFolder = DISPLAY_FOLDER, - selected = true, - showStarredCount = false, - onClick = {}, - folderNameFormatter = FolderNameFormatter(LocalContext.current.resources), - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun FolderListItemWithStarredPreview() { - PreviewWithThemes { - FolderListItem( - displayFolder = DISPLAY_FOLDER, - selected = false, - showStarredCount = true, - onClick = {}, - folderNameFormatter = FolderNameFormatter(LocalContext.current.resources), - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun FolderListItemWithStarredSelectedPreview() { - PreviewWithThemes { - FolderListItem( - displayFolder = DISPLAY_FOLDER, - selected = true, - showStarredCount = true, - onClick = {}, - folderNameFormatter = FolderNameFormatter(LocalContext.current.resources), - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun FolderListItemWithInboxFolderPreview() { - PreviewWithThemes { - FolderListItem( - displayFolder = DISPLAY_FOLDER.copy( - folder = DISPLAY_FOLDER.folder.copy( - type = FolderType.INBOX, - ), - ), - selected = false, - showStarredCount = true, - onClick = {}, - folderNameFormatter = FolderNameFormatter(LocalContext.current.resources), - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun FolderListItemWithUnifiedFolderPreview() { - PreviewWithThemes { - FolderListItem( - displayFolder = UNIFIED_FOLDER, - selected = false, - showStarredCount = false, - onClick = {}, - folderNameFormatter = FolderNameFormatter(LocalContext.current.resources), - ) - } -} diff --git a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/folder/FolderListPreview.kt b/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/folder/FolderListPreview.kt deleted file mode 100644 index 1a4cb318f25..00000000000 --- a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/folder/FolderListPreview.kt +++ /dev/null @@ -1,54 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.folder - -import androidx.compose.runtime.Composable -import androidx.compose.ui.tooling.preview.Preview -import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme -import kotlinx.collections.immutable.persistentListOf -import net.thunderbird.feature.navigation.drawer.siderail.ui.FakeData.DISPLAY_FOLDER -import net.thunderbird.feature.navigation.drawer.siderail.ui.FakeData.UNIFIED_FOLDER - -@Composable -@Preview(showBackground = true) -internal fun FolderListPreview() { - PreviewWithTheme { - FolderList( - folders = persistentListOf( - DISPLAY_FOLDER, - ), - selectedFolder = null, - onFolderClick = {}, - showStarredCount = false, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun FolderListPreviewSelected() { - PreviewWithTheme { - FolderList( - folders = persistentListOf( - DISPLAY_FOLDER, - ), - selectedFolder = DISPLAY_FOLDER, - onFolderClick = {}, - showStarredCount = false, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun FolderListWithUnifiedFolderPreview() { - PreviewWithTheme { - FolderList( - folders = persistentListOf( - UNIFIED_FOLDER, - DISPLAY_FOLDER, - ), - selectedFolder = DISPLAY_FOLDER, - onFolderClick = {}, - showStarredCount = false, - ) - } -} diff --git a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SettingItemPreview.kt b/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SettingItemPreview.kt deleted file mode 100644 index 44d01ccaa17..00000000000 --- a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SettingItemPreview.kt +++ /dev/null @@ -1,18 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.setting - -import androidx.compose.runtime.Composable -import androidx.compose.ui.tooling.preview.Preview -import app.k9mail.core.ui.compose.designsystem.PreviewWithThemes -import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons - -@Composable -@Preview(showBackground = true) -internal fun SettingItemPreview() { - PreviewWithThemes { - SettingItem( - icon = Icons.Outlined.Settings, - label = "Setting", - onClick = {}, - ) - } -} diff --git a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SettingListItemPreview.kt b/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SettingListItemPreview.kt deleted file mode 100644 index ae576555201..00000000000 --- a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SettingListItemPreview.kt +++ /dev/null @@ -1,18 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.setting - -import androidx.compose.runtime.Composable -import androidx.compose.ui.tooling.preview.Preview -import app.k9mail.core.ui.compose.designsystem.PreviewWithThemes -import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons - -@Composable -@Preview(showBackground = true) -internal fun SettingListItemPreview() { - PreviewWithThemes { - SettingListItem( - label = "Settings", - onClick = {}, - imageVector = Icons.Outlined.Settings, - ) - } -} diff --git a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SettingListPreview.kt b/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SettingListPreview.kt deleted file mode 100644 index 1d972ba7b7d..00000000000 --- a/feature/navigation/drawer/siderail/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SettingListPreview.kt +++ /dev/null @@ -1,29 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.setting - -import androidx.compose.runtime.Composable -import androidx.compose.ui.tooling.preview.Preview -import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme - -@Composable -@Preview(showBackground = true) -internal fun SettingListPreview() { - PreviewWithTheme { - SettingList( - onAccountSelectorClick = {}, - onManageFoldersClick = {}, - showAccountSelector = false, - ) - } -} - -@Composable -@Preview(showBackground = true) -internal fun SettingListShowAccountSelectorPreview() { - PreviewWithTheme { - SettingList( - onAccountSelectorClick = {}, - onManageFoldersClick = {}, - showAccountSelector = true, - ) - } -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/NavigationDrawerModule.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/NavigationDrawerModule.kt deleted file mode 100644 index 9aaa8670b50..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/NavigationDrawerModule.kt +++ /dev/null @@ -1,74 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail - -import net.thunderbird.feature.navigation.drawer.siderail.data.UnifiedFolderRepository -import net.thunderbird.feature.navigation.drawer.siderail.domain.DomainContract -import net.thunderbird.feature.navigation.drawer.siderail.domain.DomainContract.UseCase -import net.thunderbird.feature.navigation.drawer.siderail.domain.usecase.GetDisplayAccounts -import net.thunderbird.feature.navigation.drawer.siderail.domain.usecase.GetDisplayFoldersForAccount -import net.thunderbird.feature.navigation.drawer.siderail.domain.usecase.GetDrawerConfig -import net.thunderbird.feature.navigation.drawer.siderail.domain.usecase.SaveDrawerConfig -import net.thunderbird.feature.navigation.drawer.siderail.domain.usecase.SyncAccount -import net.thunderbird.feature.navigation.drawer.siderail.domain.usecase.SyncAllAccounts -import net.thunderbird.feature.navigation.drawer.siderail.ui.DrawerViewModel -import org.koin.core.module.Module -import org.koin.core.module.dsl.viewModel -import org.koin.dsl.module - -val navigationSideRailDrawerModule: Module = module { - - single { - UnifiedFolderRepository( - messageCountsProvider = get(), - ) - } - - single { - GetDrawerConfig( - configLoader = get(), - ) - } - single { - SaveDrawerConfig( - drawerConfigWriter = get(), - ) - } - - single { - GetDisplayAccounts( - accountManager = get(), - messageCountsProvider = get(), - messageListRepository = get(), - ) - } - - single { - GetDisplayFoldersForAccount( - displayFolderRepository = get(), - unifiedFolderRepository = get(), - ) - } - - single { - SyncAccount( - accountManager = get(), - messagingController = get(), - ) - } - - single { - SyncAllAccounts( - messagingController = get(), - ) - } - - viewModel { - DrawerViewModel( - getDrawerConfig = get(), - saveDrawerConfig = get(), - getDisplayAccounts = get(), - getDisplayFoldersForAccount = get(), - syncAccount = get(), - syncAllAccounts = get(), - ) - } -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/SideRailDrawer.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/SideRailDrawer.kt deleted file mode 100644 index d67b1b86ff6..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/SideRailDrawer.kt +++ /dev/null @@ -1,111 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail - -import androidx.appcompat.app.AppCompatActivity -import androidx.compose.ui.platform.ComposeView -import androidx.core.view.GravityCompat -import androidx.drawerlayout.widget.DrawerLayout -import androidx.lifecycle.compose.collectAsStateWithLifecycle -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.update -import net.thunderbird.core.ui.theme.api.FeatureThemeProvider -import net.thunderbird.feature.navigation.drawer.api.NavigationDrawer -import net.thunderbird.feature.navigation.drawer.api.R -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolderType -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.createDisplayAccountFolderId -import net.thunderbird.feature.navigation.drawer.siderail.ui.DrawerView -import org.koin.core.component.KoinComponent -import org.koin.core.component.inject - -internal data class FolderDrawerState( - val selectedAccountUuid: String? = null, - val selectedFolderId: String? = null, -) - -class SideRailDrawer( - override val parent: AppCompatActivity, - private val openAccount: (accountId: String) -> Unit, - private val openFolder: (accountId: String, folderId: Long) -> Unit, - private val openUnifiedFolder: () -> Unit, - private val openManageFolders: () -> Unit, - private val openSettings: () -> Unit, - createDrawerListener: () -> DrawerLayout.DrawerListener, -) : NavigationDrawer, KoinComponent { - - private val themeProvider: FeatureThemeProvider by inject() - - private val drawer: DrawerLayout = parent.findViewById(R.id.navigation_drawer_layout) - private val drawerContent: ComposeView = parent.findViewById(R.id.navigation_drawer_content) - - private val drawerState = MutableStateFlow(FolderDrawerState()) - - init { - drawer.addDrawerListener(createDrawerListener()) - - drawerContent.setContent { - themeProvider.WithTheme { - val state = drawerState.collectAsStateWithLifecycle() - - DrawerView( - drawerState = state.value, - openAccount = openAccount, - openFolder = openFolder, - openUnifiedFolder = openUnifiedFolder, - openManageFolders = openManageFolders, - openSettings = openSettings, - closeDrawer = { close() }, - ) - } - } - } - - override val isOpen: Boolean - get() = drawer.isOpen - - override fun selectAccount(accountUuid: String) { - drawerState.update { - it.copy(selectedAccountUuid = accountUuid) - } - } - - override fun selectFolder(accountUuid: String, folderId: Long) { - drawerState.update { - it.copy( - selectedAccountUuid = accountUuid, - selectedFolderId = createDisplayAccountFolderId(accountUuid, folderId), - ) - } - } - - override fun selectUnifiedInbox() { - drawerState.update { - it.copy( - selectedAccountUuid = "unified_account", - selectedFolderId = DisplayUnifiedFolderType.INBOX.id, - ) - } - } - - override fun deselect() { - drawerState.update { - it.copy( - selectedFolderId = null, - ) - } - } - - override fun open() { - drawer.openDrawer(GravityCompat.START) - } - - override fun close() { - drawer.closeDrawer(GravityCompat.START) - } - - override fun lock() { - drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED) - } - - override fun unlock() { - drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED) - } -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/data/UnifiedFolderRepository.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/data/UnifiedFolderRepository.kt deleted file mode 100644 index 8acc7a57d67..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/data/UnifiedFolderRepository.kt +++ /dev/null @@ -1,44 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.data - -import app.k9mail.legacy.message.controller.MessageCountsProvider -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.map -import net.thunderbird.feature.navigation.drawer.siderail.domain.DomainContract -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolderType -import net.thunderbird.feature.search.legacy.LocalMessageSearch -import net.thunderbird.feature.search.legacy.api.MessageSearchField -import net.thunderbird.feature.search.legacy.api.SearchAttribute - -internal class UnifiedFolderRepository( - private val messageCountsProvider: MessageCountsProvider, -) : DomainContract.UnifiedFolderRepository { - - override fun getDisplayUnifiedFolderFlow(unifiedFolderType: DisplayUnifiedFolderType): Flow { - return messageCountsProvider.getMessageCountsFlow(createUnifiedFolderSearch(unifiedFolderType)).map { - DisplayUnifiedFolder( - id = UNIFIED_INBOX_ID, - unifiedType = DisplayUnifiedFolderType.INBOX, - unreadMessageCount = it.unread, - starredMessageCount = it.starred, - ) - } - } - - private fun createUnifiedFolderSearch(unifiedFolderType: DisplayUnifiedFolderType): LocalMessageSearch { - return when (unifiedFolderType) { - DisplayUnifiedFolderType.INBOX -> return createUnifiedInboxSearch() - } - } - - private fun createUnifiedInboxSearch(): LocalMessageSearch { - return LocalMessageSearch().apply { - id = UNIFIED_INBOX_ID - and(MessageSearchField.INTEGRATE, "1", SearchAttribute.EQUALS) - } - } - - companion object { - const val UNIFIED_INBOX_ID = "unified_inbox" - } -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/DomainContract.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/DomainContract.kt deleted file mode 100644 index 40c49de6868..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/DomainContract.kt +++ /dev/null @@ -1,47 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.domain - -import kotlinx.coroutines.flow.Flow -import net.thunderbird.feature.navigation.drawer.api.NavigationDrawerExternalContract.DrawerConfig -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayAccount -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolderType - -internal interface DomainContract { - - interface UseCase { - fun interface GetDrawerConfig { - operator fun invoke(): Flow - } - - fun interface SaveDrawerConfig { - operator fun invoke(drawerConfig: DrawerConfig): Flow - } - - fun interface GetDisplayAccounts { - operator fun invoke(): Flow> - } - - fun interface GetDisplayFoldersForAccount { - operator fun invoke(accountId: String, includeUnifiedFolders: Boolean): Flow> - } - - /** - * Synchronize the given account uuid. - */ - fun interface SyncAccount { - operator fun invoke(accountUuid: String): Flow> - } - - /** - * Synchronize all accounts. - */ - fun interface SyncAllAccounts { - operator fun invoke(): Flow> - } - } - - interface UnifiedFolderRepository { - fun getDisplayUnifiedFolderFlow(unifiedFolderType: DisplayUnifiedFolderType): Flow - } -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/entity/DisplayAccount.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/entity/DisplayAccount.kt deleted file mode 100644 index 7462a449a4c..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/entity/DisplayAccount.kt +++ /dev/null @@ -1,10 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.domain.entity - -internal data class DisplayAccount( - val id: String, - val name: String, - val email: String, - val color: Int, - val unreadMessageCount: Int, - val starredMessageCount: Int, -) diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/entity/DisplayAccountFolder.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/entity/DisplayAccountFolder.kt deleted file mode 100644 index de8110862e8..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/entity/DisplayAccountFolder.kt +++ /dev/null @@ -1,17 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.domain.entity - -import net.thunderbird.feature.mail.folder.api.Folder - -internal data class DisplayAccountFolder( - val accountId: String, - val folder: Folder, - val isInTopGroup: Boolean, - override val unreadMessageCount: Int, - override val starredMessageCount: Int, -) : DisplayFolder { - override val id: String = createDisplayAccountFolderId(accountId, folder.id) -} - -fun createDisplayAccountFolderId(accountId: String, folderId: Long): String { - return "${accountId}_$folderId" -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/entity/DisplayFolder.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/entity/DisplayFolder.kt deleted file mode 100644 index 9ef9e0c170f..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/entity/DisplayFolder.kt +++ /dev/null @@ -1,7 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.domain.entity - -internal interface DisplayFolder { - val id: String - val unreadMessageCount: Int - val starredMessageCount: Int -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/entity/DisplayUnifiedFolder.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/entity/DisplayUnifiedFolder.kt deleted file mode 100644 index 4fdd1c445b1..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/entity/DisplayUnifiedFolder.kt +++ /dev/null @@ -1,8 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.domain.entity - -internal data class DisplayUnifiedFolder( - override val id: String, - val unifiedType: DisplayUnifiedFolderType, - override val unreadMessageCount: Int, - override val starredMessageCount: Int, -) : DisplayFolder diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/entity/DisplayUnifiedFolderType.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/entity/DisplayUnifiedFolderType.kt deleted file mode 100644 index 264a05ba18e..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/entity/DisplayUnifiedFolderType.kt +++ /dev/null @@ -1,12 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.domain.entity - -/** - * Represents a unified folder in the drawer. - * - * The id is unique for each unified folder type. - */ -internal enum class DisplayUnifiedFolderType( - val id: String, -) { - INBOX("unified_inbox"), -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/GetDisplayAccounts.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/GetDisplayAccounts.kt deleted file mode 100644 index d70ddae2c6b..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/GetDisplayAccounts.kt +++ /dev/null @@ -1,68 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.domain.usecase - -import app.k9mail.legacy.mailstore.MessageListChangedListener -import app.k9mail.legacy.mailstore.MessageListRepository -import app.k9mail.legacy.message.controller.MessageCounts -import app.k9mail.legacy.message.controller.MessageCountsProvider -import kotlin.coroutines.CoroutineContext -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.callbackFlow -import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.flatMapLatest -import kotlinx.coroutines.flow.flowOn -import kotlinx.coroutines.launch -import net.thunderbird.core.android.account.LegacyAccountDto -import net.thunderbird.core.android.account.LegacyAccountDtoManager -import net.thunderbird.feature.navigation.drawer.siderail.domain.DomainContract -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayAccount - -internal class GetDisplayAccounts( - private val accountManager: LegacyAccountDtoManager, - private val messageCountsProvider: MessageCountsProvider, - private val messageListRepository: MessageListRepository, - private val coroutineContext: CoroutineContext = Dispatchers.IO, -) : DomainContract.UseCase.GetDisplayAccounts { - - @OptIn(ExperimentalCoroutinesApi::class) - override fun invoke(): Flow> { - return accountManager.getAccountsFlow() - .flatMapLatest { accounts -> - val messageCountsFlows: List> = accounts.map { account -> - getMessageCountsFlow(account) - } - - combine(messageCountsFlows) { messageCountsList -> - messageCountsList.mapIndexed { index, messageCounts -> - DisplayAccount( - id = accounts[index].uuid, - name = accounts[index].displayName, - email = accounts[index].email, - color = accounts[index].chipColor, - unreadMessageCount = messageCounts.unread, - starredMessageCount = messageCounts.starred, - ) - } - } - } - } - - private fun getMessageCountsFlow(account: LegacyAccountDto): Flow { - return callbackFlow { - send(messageCountsProvider.getMessageCounts(account)) - - val listener = MessageListChangedListener { - launch { - send(messageCountsProvider.getMessageCounts(account)) - } - } - messageListRepository.addListener(account.uuid, listener) - - awaitClose { - messageListRepository.removeListener(listener) - } - }.flowOn(coroutineContext) - } -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/GetDisplayFoldersForAccount.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/GetDisplayFoldersForAccount.kt deleted file mode 100644 index f6678de2def..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/GetDisplayFoldersForAccount.kt +++ /dev/null @@ -1,48 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.domain.usecase - -import app.k9mail.legacy.ui.folder.DisplayFolderRepository -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.flowOf -import kotlinx.coroutines.flow.map -import net.thunderbird.feature.navigation.drawer.siderail.domain.DomainContract -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayAccountFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolderType - -internal class GetDisplayFoldersForAccount( - private val displayFolderRepository: DisplayFolderRepository, - private val unifiedFolderRepository: DomainContract.UnifiedFolderRepository, -) : DomainContract.UseCase.GetDisplayFoldersForAccount { - override fun invoke(accountId: String, includeUnifiedFolders: Boolean): Flow> { - val accountFoldersFlow: Flow> = - displayFolderRepository.getDisplayFoldersFlow(accountId).map { displayFolders -> - displayFolders.map { displayFolder -> - DisplayAccountFolder( - accountId = accountId, - folder = displayFolder.folder, - isInTopGroup = displayFolder.isInTopGroup, - unreadMessageCount = displayFolder.unreadMessageCount, - starredMessageCount = displayFolder.starredMessageCount, - ) - } - } - - val unifiedFoldersFlow: Flow> = if (includeUnifiedFolders) { - unifiedFolderRepository.getDisplayUnifiedFolderFlow(DisplayUnifiedFolderType.INBOX) - .map { displayUnifiedFolder -> - listOf(displayUnifiedFolder) - } - } else { - flowOf(emptyList()) - } - - return combine( - accountFoldersFlow, - unifiedFoldersFlow, - ) { accountFolders, unifiedFolders -> - unifiedFolders + accountFolders - } - } -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/GetDrawerConfig.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/GetDrawerConfig.kt deleted file mode 100644 index 6b975f8c0e1..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/GetDrawerConfig.kt +++ /dev/null @@ -1,14 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.domain.usecase - -import kotlinx.coroutines.flow.Flow -import net.thunderbird.feature.navigation.drawer.api.NavigationDrawerExternalContract.DrawerConfig -import net.thunderbird.feature.navigation.drawer.api.NavigationDrawerExternalContract.DrawerConfigLoader -import net.thunderbird.feature.navigation.drawer.siderail.domain.DomainContract - -internal class GetDrawerConfig( - private val configLoader: DrawerConfigLoader, -) : DomainContract.UseCase.GetDrawerConfig { - override operator fun invoke(): Flow { - return configLoader.loadDrawerConfigFlow() - } -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/SaveDrawerConfig.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/SaveDrawerConfig.kt deleted file mode 100644 index 3a4f7aa068d..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/SaveDrawerConfig.kt +++ /dev/null @@ -1,17 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.domain.usecase - -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flow -import net.thunderbird.feature.navigation.drawer.api.NavigationDrawerExternalContract -import net.thunderbird.feature.navigation.drawer.api.NavigationDrawerExternalContract.DrawerConfigWriter -import net.thunderbird.feature.navigation.drawer.siderail.domain.DomainContract - -internal class SaveDrawerConfig( - private val drawerConfigWriter: DrawerConfigWriter, -) : DomainContract.UseCase.SaveDrawerConfig { - override fun invoke(drawerConfig: NavigationDrawerExternalContract.DrawerConfig): Flow { - return flow { - emit(drawerConfigWriter.writeDrawerConfig(drawerConfig)) - } - } -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/SyncAccount.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/SyncAccount.kt deleted file mode 100644 index 5884c8d9836..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/SyncAccount.kt +++ /dev/null @@ -1,41 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.domain.usecase - -import android.content.Context -import app.k9mail.legacy.message.controller.MessagingControllerMailChecker -import app.k9mail.legacy.message.controller.SimpleMessagingListener -import kotlin.coroutines.CoroutineContext -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.callbackFlow -import kotlinx.coroutines.flow.flowOn -import net.thunderbird.core.android.account.LegacyAccountDto -import net.thunderbird.core.android.account.LegacyAccountDtoManager -import net.thunderbird.feature.navigation.drawer.siderail.domain.DomainContract - -internal class SyncAccount( - private val accountManager: LegacyAccountDtoManager, - private val messagingController: MessagingControllerMailChecker, - private val coroutineContext: CoroutineContext = Dispatchers.IO, -) : DomainContract.UseCase.SyncAccount { - override fun invoke(accountUuid: String): Flow> = callbackFlow { - val listener = object : SimpleMessagingListener() { - override fun checkMailFinished(context: Context?, account: LegacyAccountDto?) { - trySend(Result.success(Unit)) - close() - } - } - - val account = accountManager.getAccount(accountUuid) - - messagingController.checkMail( - account = account, - ignoreLastCheckedTime = true, - useManualWakeLock = true, - notify = true, - listener = listener, - ) - - awaitClose() - }.flowOn(coroutineContext) -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/SyncAllAccounts.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/SyncAllAccounts.kt deleted file mode 100644 index d29dd6c76aa..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/SyncAllAccounts.kt +++ /dev/null @@ -1,37 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.domain.usecase - -import android.content.Context -import app.k9mail.legacy.message.controller.MessagingControllerMailChecker -import app.k9mail.legacy.message.controller.SimpleMessagingListener -import kotlin.coroutines.CoroutineContext -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.callbackFlow -import kotlinx.coroutines.flow.flowOn -import net.thunderbird.core.android.account.LegacyAccountDto -import net.thunderbird.feature.navigation.drawer.siderail.domain.DomainContract - -class SyncAllAccounts( - private val messagingController: MessagingControllerMailChecker, - private val coroutineContext: CoroutineContext = Dispatchers.IO, -) : DomainContract.UseCase.SyncAllAccounts { - override fun invoke(): Flow> = callbackFlow { - val listener = object : SimpleMessagingListener() { - override fun checkMailFinished(context: Context?, account: LegacyAccountDto?) { - trySend(Result.success(Unit)) - close() - } - } - - messagingController.checkMail( - account = null, - ignoreLastCheckedTime = true, - useManualWakeLock = true, - notify = true, - listener = listener, - ) - - awaitClose() - }.flowOn(coroutineContext) -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerContent.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerContent.kt deleted file mode 100644 index 4a8325b3c25..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerContent.kt +++ /dev/null @@ -1,110 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui - -import androidx.compose.animation.AnimatedVisibility -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.WindowInsets -import androidx.compose.foundation.layout.displayCutout -import androidx.compose.foundation.layout.fillMaxHeight -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.statusBars -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.layout.windowInsetsPadding -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.platform.LocalLayoutDirection -import androidx.compose.ui.unit.Dp -import androidx.compose.ui.unit.LayoutDirection -import androidx.compose.ui.unit.dp -import app.k9mail.core.ui.compose.designsystem.atom.DividerHorizontal -import app.k9mail.core.ui.compose.designsystem.atom.Surface -import net.thunderbird.core.ui.compose.common.modifier.testTagAsResourceId -import net.thunderbird.feature.navigation.drawer.siderail.ui.account.AccountList -import net.thunderbird.feature.navigation.drawer.siderail.ui.account.AccountView -import net.thunderbird.feature.navigation.drawer.siderail.ui.folder.FolderList -import net.thunderbird.feature.navigation.drawer.siderail.ui.setting.SettingList - -// As long as we use DrawerLayout, we don't have to worry about screens narrower than DRAWER_WIDTH. DrawerLayout will -// automatically limit the width of the content view so there's still room for a scrim with minimum tap width. -private val DRAWER_WIDTH = 360.dp - -@Composable -internal fun DrawerContent( - state: DrawerContract.State, - onEvent: (DrawerContract.Event) -> Unit, - modifier: Modifier = Modifier, -) { - val additionalWidth = getAdditionalWidth() - - Surface( - modifier = modifier - .windowInsetsPadding(WindowInsets.statusBars) - .width(DRAWER_WIDTH + additionalWidth) - .fillMaxHeight() - .testTagAsResourceId("DrawerContent"), - ) { - val selectedAccount = state.accounts.firstOrNull { it.id == state.selectedAccountId } - Column { - selectedAccount?.let { - AccountView( - account = selectedAccount, - onClick = { onEvent(DrawerContract.Event.OnAccountViewClick(selectedAccount)) }, - showAvatar = state.config.showAccountSelector, - ) - - DividerHorizontal() - } - Row { - AnimatedVisibility( - visible = state.config.showAccountSelector, - ) { - AccountList( - accounts = state.accounts, - selectedAccount = selectedAccount, - onAccountClick = { onEvent(DrawerContract.Event.OnAccountClick(it)) }, - onSyncAllAccountsClick = { onEvent(DrawerContract.Event.OnSyncAllAccounts) }, - onSettingsClick = { onEvent(DrawerContract.Event.OnSettingsClick) }, - ) - } - Column( - modifier = Modifier - .weight(1f) - .fillMaxSize(), - ) { - FolderList( - folders = state.folders, - selectedFolder = state.folders.firstOrNull { it.id == state.selectedFolderId }, - onFolderClick = { folder -> - onEvent(DrawerContract.Event.OnFolderClick(folder)) - }, - showStarredCount = state.config.showStarredCount, - modifier = Modifier.weight(1f), - ) - DividerHorizontal() - SettingList( - onAccountSelectorClick = { onEvent(DrawerContract.Event.OnAccountSelectorClick) }, - onManageFoldersClick = { onEvent(DrawerContract.Event.OnManageFoldersClick) }, - showAccountSelector = state.config.showAccountSelector, - ) - } - } - } - } -} - -@Composable -fun getAdditionalWidth(): Dp { - val density = LocalDensity.current - val layoutDirection = LocalLayoutDirection.current - val isRtl = LocalLayoutDirection.current == LayoutDirection.Rtl - - return if (isRtl) { - WindowInsets.displayCutout.getRight(density = density, layoutDirection = layoutDirection) - } else { - WindowInsets.displayCutout.getLeft(density = density, layoutDirection = layoutDirection) - }.pxToDp() -} - -@Composable -fun Int.pxToDp() = with(LocalDensity.current) { this@pxToDp.toDp() } diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerContract.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerContract.kt deleted file mode 100644 index b0aa071cf64..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerContract.kt +++ /dev/null @@ -1,50 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui - -import androidx.compose.runtime.Stable -import app.k9mail.core.ui.compose.common.mvi.UnidirectionalViewModel -import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.persistentListOf -import net.thunderbird.feature.navigation.drawer.api.NavigationDrawerExternalContract.DrawerConfig -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayAccount -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayFolder - -internal interface DrawerContract { - - interface ViewModel : UnidirectionalViewModel - - @Stable - data class State( - val config: DrawerConfig = DrawerConfig( - showUnifiedFolders = false, - showStarredCount = false, - showAccountSelector = true, - ), - val accounts: ImmutableList = persistentListOf(), - val selectedAccountId: String? = null, - val folders: ImmutableList = persistentListOf(), - val selectedFolderId: String? = null, - val isLoading: Boolean = false, - ) - - sealed interface Event { - data class SelectAccount(val accountId: String?) : Event - data class SelectFolder(val folderId: String?) : Event - data class OnAccountClick(val account: DisplayAccount) : Event - data class OnAccountViewClick(val account: DisplayAccount) : Event - data class OnFolderClick(val folder: DisplayFolder) : Event - data object OnAccountSelectorClick : Event - data object OnManageFoldersClick : Event - data object OnSettingsClick : Event - data object OnSyncAccount : Event - data object OnSyncAllAccounts : Event - } - - sealed interface Effect { - data class OpenAccount(val accountId: String) : Effect - data class OpenFolder(val accountId: String, val folderId: Long) : Effect - data object OpenUnifiedFolder : Effect - data object OpenManageFolders : Effect - data object OpenSettings : Effect - data object CloseDrawer : Effect - } -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerView.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerView.kt deleted file mode 100644 index 3437445cb6d..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerView.kt +++ /dev/null @@ -1,53 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import app.k9mail.core.ui.compose.common.mvi.observe -import app.k9mail.core.ui.compose.designsystem.molecule.PullToRefreshBox -import net.thunderbird.feature.navigation.drawer.siderail.FolderDrawerState -import org.koin.androidx.compose.koinViewModel - -@Composable -internal fun DrawerView( - drawerState: FolderDrawerState, - openAccount: (accountId: String) -> Unit, - openFolder: (accountId: String, folderId: Long) -> Unit, - openUnifiedFolder: () -> Unit, - openManageFolders: () -> Unit, - openSettings: () -> Unit, - closeDrawer: () -> Unit, - viewModel: DrawerContract.ViewModel = koinViewModel(), -) { - val (state, dispatch) = viewModel.observe { effect -> - when (effect) { - is DrawerContract.Effect.OpenAccount -> openAccount(effect.accountId) - is DrawerContract.Effect.OpenFolder -> openFolder( - effect.accountId, - effect.folderId, - ) - - DrawerContract.Effect.OpenUnifiedFolder -> openUnifiedFolder() - is DrawerContract.Effect.OpenManageFolders -> openManageFolders() - is DrawerContract.Effect.OpenSettings -> openSettings() - DrawerContract.Effect.CloseDrawer -> closeDrawer() - } - } - - LaunchedEffect(drawerState.selectedAccountUuid) { - dispatch(DrawerContract.Event.SelectAccount(drawerState.selectedAccountUuid)) - } - - LaunchedEffect(drawerState.selectedFolderId) { - dispatch(DrawerContract.Event.SelectFolder(drawerState.selectedFolderId)) - } - - PullToRefreshBox( - isRefreshing = state.value.isLoading, - onRefresh = { dispatch(DrawerContract.Event.OnSyncAccount) }, - ) { - DrawerContent( - state = state.value, - onEvent = { dispatch(it) }, - ) - } -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerViewModel.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerViewModel.kt deleted file mode 100644 index 0f72e56a564..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerViewModel.kt +++ /dev/null @@ -1,215 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui - -import androidx.lifecycle.viewModelScope -import app.k9mail.core.ui.compose.common.mvi.BaseViewModel -import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toImmutableList -import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.collect -import kotlinx.coroutines.flow.collectLatest -import kotlinx.coroutines.flow.distinctUntilChanged -import kotlinx.coroutines.flow.filterNotNull -import kotlinx.coroutines.flow.flatMapLatest -import kotlinx.coroutines.flow.launchIn -import kotlinx.coroutines.flow.map -import kotlinx.coroutines.launch -import net.thunderbird.feature.navigation.drawer.siderail.domain.DomainContract -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayAccount -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayAccountFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolder - -@Suppress("MagicNumber", "TooManyFunctions") -internal class DrawerViewModel( - private val getDrawerConfig: DomainContract.UseCase.GetDrawerConfig, - private val saveDrawerConfig: DomainContract.UseCase.SaveDrawerConfig, - private val getDisplayAccounts: DomainContract.UseCase.GetDisplayAccounts, - private val getDisplayFoldersForAccount: DomainContract.UseCase.GetDisplayFoldersForAccount, - private val syncAccount: DomainContract.UseCase.SyncAccount, - private val syncAllAccounts: DomainContract.UseCase.SyncAllAccounts, - initialState: DrawerContract.State = DrawerContract.State(), -) : BaseViewModel( - initialState = initialState, -), - DrawerContract.ViewModel { - - init { - viewModelScope.launch { - getDrawerConfig().collectLatest { config -> - updateState { - it.copy(config = config) - } - } - } - - viewModelScope.launch { - loadAccounts() - } - - viewModelScope.launch { - loadFolders() - } - } - - private suspend fun loadAccounts() { - getDisplayAccounts().collectLatest { accounts -> - updateAccounts(accounts) - } - } - - private fun updateAccounts(accounts: List) { - val selectedAccount = accounts.find { it.id == state.value.selectedAccountId } - ?: accounts.firstOrNull() - - updateState { - it.copy( - accounts = accounts.toImmutableList(), - selectedAccountId = selectedAccount?.id, - ) - } - } - - @OptIn(ExperimentalCoroutinesApi::class) - private suspend fun loadFolders() { - state.map { - it.selectedAccountId?.let { accountId -> - Pair(accountId, it.config.showUnifiedFolders) - } - }.filterNotNull() - .distinctUntilChanged() - .flatMapLatest { (accountId, showUnifiedInbox) -> - getDisplayFoldersForAccount(accountId, showUnifiedInbox) - }.collect { folders -> - updateFolders(folders) - } - } - - private fun updateFolders(displayFolders: List) { - val selectedFolder = displayFolders.find { - it.id == state.value.selectedFolderId - } ?: displayFolders.firstOrNull() - - updateState { - it.copy( - folders = displayFolders.toImmutableList(), - selectedFolderId = selectedFolder?.id, - ) - } - } - - override fun event(event: DrawerContract.Event) { - when (event) { - is DrawerContract.Event.SelectAccount -> selectAccount(event.accountId) - is DrawerContract.Event.SelectFolder -> selectFolder(event.folderId) - - is DrawerContract.Event.OnAccountClick -> openAccount(event.account) - is DrawerContract.Event.OnFolderClick -> openFolder(event.folder) - is DrawerContract.Event.OnAccountViewClick -> { - openAccount( - state.value.accounts.nextOrFirst(event.account), - ) - } - - DrawerContract.Event.OnAccountSelectorClick -> { - saveDrawerConfig( - state.value.config.copy(showAccountSelector = state.value.config.showAccountSelector.not()), - ).launchIn(viewModelScope) - } - - DrawerContract.Event.OnManageFoldersClick -> emitEffect(DrawerContract.Effect.OpenManageFolders) - DrawerContract.Event.OnSettingsClick -> emitEffect(DrawerContract.Effect.OpenSettings) - DrawerContract.Event.OnSyncAccount -> onSyncAccount() - DrawerContract.Event.OnSyncAllAccounts -> onSyncAllAccounts() - } - } - - private fun selectAccount(accountId: String?) { - updateState { - it.copy( - selectedAccountId = accountId, - ) - } - } - - private fun selectFolder(folderId: String?) { - updateState { - it.copy( - selectedFolderId = folderId, - ) - } - } - - private fun openAccount(account: DisplayAccount?) { - if (account != null) { - emitEffect(DrawerContract.Effect.OpenAccount(account.id)) - } - } - - private fun ImmutableList.nextOrFirst(account: DisplayAccount): DisplayAccount? { - val index = indexOf(account) - return if (index == -1) { - null - } else if (index == size - 1) { - get(0) - } else { - get(index + 1) - } - } - - private fun openFolder(folder: DisplayFolder) { - if (folder is DisplayAccountFolder) { - emitEffect( - DrawerContract.Effect.OpenFolder( - accountId = folder.accountId, - folderId = folder.folder.id, - ), - ) - } else if (folder is DisplayUnifiedFolder) { - emitEffect(DrawerContract.Effect.OpenUnifiedFolder) - } - - viewModelScope.launch { - delay(DRAWER_CLOSE_DELAY) - emitEffect(DrawerContract.Effect.CloseDrawer) - } - } - - private fun onSyncAccount() { - if (state.value.isLoading || state.value.selectedAccountId == null) return - - viewModelScope.launch { - updateState { - it.copy(isLoading = true) - } - - state.value.selectedAccountId?.let { syncAccount(it).collect() } - - updateState { - it.copy(isLoading = false) - } - } - } - - private fun onSyncAllAccounts() { - if (state.value.isLoading) return - - viewModelScope.launch { - updateState { - it.copy(isLoading = true) - } - - syncAllAccounts().collect() - - updateState { - it.copy(isLoading = false) - } - } - } -} - -/** - * Delay before closing the drawer to avoid the drawer being closed immediately and give time - * for the ripple effect to finish. - */ -private const val DRAWER_CLOSE_DELAY = 250L diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountAvatar.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountAvatar.kt deleted file mode 100644 index 19b40331e74..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountAvatar.kt +++ /dev/null @@ -1,74 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.account - -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.shape.CircleShape -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.unit.dp -import app.k9mail.core.ui.compose.designsystem.atom.Surface -import app.k9mail.core.ui.compose.designsystem.atom.text.TextLabelSmall -import app.k9mail.core.ui.compose.theme2.ColorRoles -import app.k9mail.core.ui.compose.theme2.toColorRoles -import net.thunderbird.feature.account.avatar.ui.Avatar -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayAccount -import net.thunderbird.feature.navigation.drawer.siderail.ui.common.labelForCount - -@Composable -internal fun AccountAvatar( - account: DisplayAccount, - selected: Boolean, - modifier: Modifier = Modifier, - onClick: ((DisplayAccount) -> Unit)? = null, -) { - val context = LocalContext.current - val accountColor = calculateAccountColor(account.color) - val accountColorRoles = accountColor.toColorRoles(context) - - Box( - modifier = modifier, - contentAlignment = Alignment.BottomEnd, - ) { - Avatar( - color = accountColor, - name = account.name, - onClick = onClick?.let { { onClick(account) } }, - selected = selected, - ) - UnreadBadge( - unreadCount = account.unreadMessageCount, - accountColorRoles = accountColorRoles, - ) - } -} - -@Composable -private fun UnreadBadge( - unreadCount: Int, - accountColorRoles: ColorRoles, - modifier: Modifier = Modifier, -) { - if (unreadCount > 0) { - val resources = LocalContext.current.resources - - Surface( - color = accountColorRoles.accent, - shape = CircleShape, - modifier = modifier, - ) { - TextLabelSmall( - text = labelForCount( - count = unreadCount, - resources = resources, - ), - color = accountColorRoles.onAccent, - modifier = Modifier.padding( - horizontal = 3.dp, - vertical = 2.dp, - ), - ) - } - } -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountIndicator.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountIndicator.kt deleted file mode 100644 index 8de0e55ca0f..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountIndicator.kt +++ /dev/null @@ -1,24 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.account - -import androidx.compose.foundation.layout.defaultMinSize -import androidx.compose.foundation.layout.width -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import app.k9mail.core.ui.compose.designsystem.atom.Surface -import app.k9mail.core.ui.compose.theme2.MainTheme - -@Composable -internal fun AccountIndicator( - accountColor: Int, - modifier: Modifier = Modifier, -) { - Surface( - modifier = modifier - .width(MainTheme.spacings.half) - .defaultMinSize( - minHeight = MainTheme.spacings.default, - ), - color = calculateAccountColor(accountColor), - shape = MainTheme.shapes.medium, - ) {} -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountList.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountList.kt deleted file mode 100644 index 4e2ea82f741..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountList.kt +++ /dev/null @@ -1,82 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.account - -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.WindowInsets -import androidx.compose.foundation.layout.fillMaxHeight -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.navigationBars -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.layout.windowInsetsPadding -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.dp -import app.k9mail.core.ui.compose.designsystem.atom.Surface -import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons -import app.k9mail.core.ui.compose.theme2.MainTheme -import kotlinx.collections.immutable.ImmutableList -import net.thunderbird.feature.navigation.drawer.siderail.R -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayAccount -import net.thunderbird.feature.navigation.drawer.siderail.ui.setting.SettingItem - -@Composable -internal fun AccountList( - accounts: ImmutableList, - selectedAccount: DisplayAccount?, - onAccountClick: (DisplayAccount) -> Unit, - onSyncAllAccountsClick: () -> Unit, - onSettingsClick: () -> Unit, - modifier: Modifier = Modifier, -) { - Surface( - modifier = modifier, - color = MainTheme.colors.surfaceContainer, - ) { - val horizontalInsetPadding = getDisplayCutOutHorizontalInsetPadding() - - Column( - modifier = Modifier - .fillMaxHeight() - .windowInsetsPadding(WindowInsets.navigationBars) - .windowInsetsPadding(horizontalInsetPadding) - .width(MainTheme.sizes.large), - ) { - LazyColumn( - modifier = Modifier.weight(1f), - contentPadding = PaddingValues(vertical = MainTheme.spacings.default), - ) { - items( - items = accounts, - key = { account -> account.id }, - ) { account -> - AccountListItem( - account = account, - onClick = { onAccountClick(account) }, - selected = selectedAccount == account, - ) - } - } - Column( - modifier = Modifier.padding(vertical = MainTheme.spacings.oneHalf), - ) { - SettingItem( - icon = Icons.Outlined.Sync, - label = stringResource(id = R.string.navigation_drawer_siderail_action_sync_all_accounts), - onClick = onSyncAllAccountsClick, - ) - // Hack to compensate the column placement at an uneven coordinate, caused by the 1.dp divider. - Spacer(modifier = Modifier.height(7.dp)) - SettingItem( - icon = Icons.Outlined.Settings, - label = stringResource(id = R.string.navigation_drawer_siderail_action_settings), - onClick = onSettingsClick, - ) - } - } - } -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountListItem.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountListItem.kt deleted file mode 100644 index cf9e0635579..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountListItem.kt +++ /dev/null @@ -1,30 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.account - -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import app.k9mail.core.ui.compose.theme2.MainTheme -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayAccount - -@Composable -internal fun AccountListItem( - account: DisplayAccount, - onClick: (DisplayAccount) -> Unit, - selected: Boolean, - modifier: Modifier = Modifier, -) { - Box( - modifier = modifier.width(MainTheme.sizes.large) - .padding(vertical = MainTheme.spacings.half), - contentAlignment = Alignment.Center, - ) { - AccountAvatar( - account = account, - onClick = onClick, - selected = selected, - ) - } -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountView.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountView.kt deleted file mode 100644 index 16a665da608..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/AccountView.kt +++ /dev/null @@ -1,108 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.account - -import androidx.compose.animation.AnimatedVisibility -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.IntrinsicSize -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.WindowInsets -import androidx.compose.foundation.layout.WindowInsetsSides -import androidx.compose.foundation.layout.defaultMinSize -import androidx.compose.foundation.layout.displayCutout -import androidx.compose.foundation.layout.fillMaxHeight -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.only -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.layout.windowInsetsPadding -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalLayoutDirection -import androidx.compose.ui.unit.LayoutDirection -import app.k9mail.core.ui.compose.designsystem.atom.Surface -import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodyLarge -import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodyMedium -import app.k9mail.core.ui.compose.theme2.MainTheme -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayAccount - -@Suppress("LongMethod") -@Composable -internal fun AccountView( - account: DisplayAccount, - onClick: () -> Unit, - showAvatar: Boolean, - modifier: Modifier = Modifier, -) { - Row( - modifier = Modifier.fillMaxWidth() - .height(intrinsicSize = IntrinsicSize.Max), - verticalAlignment = Alignment.CenterVertically, - ) { - AnimatedVisibility(visible = showAvatar) { - Surface( - color = MainTheme.colors.surfaceContainer, - modifier = Modifier.fillMaxHeight(), - ) { - val horizontalInsetPadding = getDisplayCutOutHorizontalInsetPadding() - - Box( - modifier = Modifier - .windowInsetsPadding(horizontalInsetPadding) - .width(MainTheme.sizes.large), - contentAlignment = Alignment.Center, - ) { - AccountAvatar( - account = account, - onClick = null, - selected = false, - ) - } - } - } - Row( - modifier = modifier - .clickable(onClick = onClick) - .height(intrinsicSize = IntrinsicSize.Max) - .fillMaxWidth() - .defaultMinSize(minHeight = MainTheme.sizes.large) - .padding( - top = MainTheme.spacings.double, - start = MainTheme.spacings.double, - end = MainTheme.spacings.triple, - bottom = MainTheme.spacings.double, - ), - verticalAlignment = Alignment.CenterVertically, - ) { - AccountIndicator( - accountColor = account.color, - modifier = Modifier - .fillMaxHeight() - .padding(end = MainTheme.spacings.oneHalf), - ) - Column( - verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.half), - ) { - TextBodyLarge( - text = account.name, - color = MainTheme.colors.onSurface, - ) - if (account.name != account.email) { - TextBodyMedium( - text = account.email, - color = MainTheme.colors.onSurfaceVariant, - ) - } - } - } - } -} - -@Composable -fun getDisplayCutOutHorizontalInsetPadding(): WindowInsets { - val isRtl = LocalLayoutDirection.current == LayoutDirection.Rtl - return WindowInsets.displayCutout.only(if (isRtl) WindowInsetsSides.Right else WindowInsetsSides.Left) -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/CalculateAccountColor.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/CalculateAccountColor.kt deleted file mode 100644 index 2406d0da054..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/CalculateAccountColor.kt +++ /dev/null @@ -1,15 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.account - -import androidx.compose.runtime.Composable -import androidx.compose.ui.graphics.Color -import app.k9mail.core.ui.compose.theme2.MainTheme -import app.k9mail.core.ui.compose.theme2.toHarmonizedColor - -@Composable -internal fun calculateAccountColor(accountColor: Int): Color { - return if (accountColor == 0) { - MainTheme.colors.primary - } else { - Color(accountColor).toHarmonizedColor(MainTheme.colors.surface) - } -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/common/LabelForCount.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/common/LabelForCount.kt deleted file mode 100644 index de60fbe9acc..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/common/LabelForCount.kt +++ /dev/null @@ -1,22 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.common - -import android.content.res.Resources -import net.thunderbird.feature.navigation.drawer.siderail.R - -@Suppress("MagicNumber") -internal fun labelForCount( - count: Int, - resources: Resources, -) = when { - count in 1..99 -> "$count" - - count in 100..1000 -> resources.getString( - R.string.navigation_drawer_siderail_folder_item_badge_count_greater_than_99, - ) - - count > 1000 -> resources.getString( - R.string.navigation_drawer_siderail_folder_item_badge_count_greater_than_1_000, - ) - - else -> "" -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/folder/FolderList.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/folder/FolderList.kt deleted file mode 100644 index 8b8ce507136..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/folder/FolderList.kt +++ /dev/null @@ -1,61 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.folder - -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items -import androidx.compose.foundation.lazy.rememberLazyListState -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext -import app.k9mail.core.ui.compose.designsystem.atom.DividerHorizontal -import app.k9mail.core.ui.compose.theme2.MainTheme -import app.k9mail.legacy.ui.folder.FolderNameFormatter -import kotlinx.collections.immutable.ImmutableList -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolder - -@Composable -internal fun FolderList( - folders: ImmutableList, - selectedFolder: DisplayFolder?, - onFolderClick: (DisplayFolder) -> Unit, - showStarredCount: Boolean, - modifier: Modifier = Modifier, -) { - val resources = LocalContext.current.resources - val folderNameFormatter = remember { FolderNameFormatter(resources) } - val listState = rememberLazyListState() - - LazyColumn( - state = listState, - modifier = modifier - .fillMaxWidth(), - contentPadding = PaddingValues(vertical = MainTheme.spacings.default), - ) { - items( - items = folders, - key = { it.id }, - ) { folder -> - FolderListItem( - displayFolder = folder, - selected = folder == selectedFolder, - showStarredCount = showStarredCount, - onClick = onFolderClick, - folderNameFormatter = folderNameFormatter, - ) - if (folder is DisplayUnifiedFolder) { - DividerHorizontal( - modifier = Modifier - .fillMaxWidth() - .padding( - vertical = MainTheme.spacings.default, - horizontal = MainTheme.spacings.triple, - ), - ) - } - } - } -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/folder/FolderListItem.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/folder/FolderListItem.kt deleted file mode 100644 index a38dd8d7dc2..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/folder/FolderListItem.kt +++ /dev/null @@ -1,91 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.folder - -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.res.stringResource -import app.k9mail.core.ui.compose.designsystem.atom.icon.Icon -import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons -import app.k9mail.core.ui.compose.designsystem.organism.drawer.NavigationDrawerItem -import app.k9mail.legacy.ui.folder.FolderNameFormatter -import net.thunderbird.feature.mail.folder.api.FolderType -import net.thunderbird.feature.navigation.drawer.siderail.R -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayAccountFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolderType - -@Composable -internal fun FolderListItem( - displayFolder: DisplayFolder, - selected: Boolean, - onClick: (DisplayFolder) -> Unit, - showStarredCount: Boolean, - folderNameFormatter: FolderNameFormatter, - modifier: Modifier = Modifier, -) { - NavigationDrawerItem( - label = mapFolderName(displayFolder, folderNameFormatter), - selected = selected, - onClick = { onClick(displayFolder) }, - modifier = modifier, - icon = { - Icon( - imageVector = mapFolderIcon(displayFolder), - ) - }, - badge = { - FolderListItemBadge( - unreadCount = displayFolder.unreadMessageCount, - starredCount = displayFolder.starredMessageCount, - showStarredCount = showStarredCount, - ) - }, - ) -} - -@Composable -private fun mapFolderName( - displayFolder: DisplayFolder, - folderNameFormatter: FolderNameFormatter, -): String { - return when (displayFolder) { - is DisplayAccountFolder -> folderNameFormatter.displayName(displayFolder.folder) - is DisplayUnifiedFolder -> mapUnifiedFolderName(displayFolder) - else -> throw IllegalArgumentException("Unknown display folder: $displayFolder") - } -} - -@Composable -private fun mapUnifiedFolderName(folder: DisplayUnifiedFolder): String { - return when (folder.unifiedType) { - DisplayUnifiedFolderType.INBOX -> stringResource(R.string.navigation_drawer_siderail_unified_inbox_title) - } -} - -private fun mapFolderIcon(folder: DisplayFolder): ImageVector { - return when (folder) { - is DisplayAccountFolder -> mapDisplayAccountFolderIcon(folder) - is DisplayUnifiedFolder -> mapDisplayUnifiedFolderIcon(folder) - else -> throw IllegalArgumentException("Unknown display folder type: $folder") - } -} - -private fun mapDisplayAccountFolderIcon(folder: DisplayAccountFolder): ImageVector { - return when (folder.folder.type) { - FolderType.INBOX -> Icons.Outlined.Inbox - FolderType.OUTBOX -> Icons.Outlined.Outbox - FolderType.SENT -> Icons.Outlined.Send - FolderType.TRASH -> Icons.Outlined.Delete - FolderType.DRAFTS -> Icons.Outlined.Drafts - FolderType.ARCHIVE -> Icons.Outlined.Archive - FolderType.SPAM -> Icons.Outlined.Report - FolderType.REGULAR -> Icons.Outlined.Folder - } -} - -private fun mapDisplayUnifiedFolderIcon(folder: DisplayUnifiedFolder): ImageVector { - when (folder.unifiedType) { - DisplayUnifiedFolderType.INBOX -> return Icons.Outlined.AllInbox - } -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/folder/FolderListItemBadge.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/folder/FolderListItemBadge.kt deleted file mode 100644 index 02513f9094e..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/folder/FolderListItemBadge.kt +++ /dev/null @@ -1,89 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.folder - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Row -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext -import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons -import app.k9mail.core.ui.compose.designsystem.organism.drawer.NavigationDrawerItemBadge -import app.k9mail.core.ui.compose.theme2.MainTheme -import net.thunderbird.core.ui.compose.designsystem.atom.icon.filled.Star -import net.thunderbird.feature.navigation.drawer.siderail.ui.common.labelForCount - -@Composable -internal fun FolderListItemBadge( - unreadCount: Int, - starredCount: Int, - showStarredCount: Boolean, - modifier: Modifier = Modifier, -) { - if (showStarredCount) { - FolderCountAndStarredBadge( - unreadCount = unreadCount, - starredCount = starredCount, - modifier = modifier, - ) - } else { - FolderCountBadge( - unreadCount = unreadCount, - modifier = modifier, - ) - } -} - -@Composable -private fun FolderCountBadge( - unreadCount: Int, - modifier: Modifier = Modifier, -) { - if (unreadCount > 0) { - val resources = LocalContext.current.resources - - NavigationDrawerItemBadge( - label = labelForCount( - count = unreadCount, - resources = resources, - ), - modifier = modifier, - ) - } -} - -@Composable -private fun FolderCountAndStarredBadge( - unreadCount: Int, - starredCount: Int, - modifier: Modifier = Modifier, -) { - if (unreadCount > 0 || starredCount > 0) { - Row( - modifier = modifier, - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy(MainTheme.spacings.default), - ) { - val resources = LocalContext.current.resources - - if (unreadCount > 0) { - NavigationDrawerItemBadge( - label = labelForCount( - count = unreadCount, - resources = resources, - ), - imageVector = Icons.Filled.Dot, - ) - } - - if (starredCount > 0) { - NavigationDrawerItemBadge( - label = labelForCount( - count = starredCount, - resources = resources, - ), - imageVector = Icons.Filled.Star, - ) - } - } - } -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SettingItem.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SettingItem.kt deleted file mode 100644 index 2dc3a0b7cfc..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SettingItem.kt +++ /dev/null @@ -1,40 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.setting - -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.shape.CircleShape -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.vector.ImageVector -import app.k9mail.core.ui.compose.designsystem.atom.Surface -import app.k9mail.core.ui.compose.designsystem.atom.icon.Icon -import app.k9mail.core.ui.compose.theme2.MainTheme - -@Composable -internal fun SettingItem( - icon: ImageVector, - label: String, - onClick: () -> Unit, - modifier: Modifier = Modifier, -) { - Box( - modifier = modifier.width(MainTheme.sizes.large), - contentAlignment = Alignment.Center, - ) { - Surface( - color = MainTheme.colors.surfaceContainer, - shape = CircleShape, - ) { - Icon( - imageVector = icon, - contentDescription = label, - modifier = Modifier - .clickable(onClick = onClick) - .padding(MainTheme.spacings.oneHalf), - ) - } - } -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SettingList.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SettingList.kt deleted file mode 100644 index b762ee02989..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SettingList.kt +++ /dev/null @@ -1,48 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.setting - -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.WindowInsets -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.navigationBars -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.windowInsetsPadding -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons -import app.k9mail.core.ui.compose.theme2.MainTheme -import net.thunderbird.feature.navigation.drawer.siderail.R - -@Composable -internal fun SettingList( - onAccountSelectorClick: () -> Unit, - onManageFoldersClick: () -> Unit, - showAccountSelector: Boolean, - modifier: Modifier = Modifier, -) { - Column( - modifier = modifier - .padding(vertical = MainTheme.spacings.default) - .windowInsetsPadding(WindowInsets.navigationBars) - .fillMaxWidth(), - ) { - SettingListItem( - label = stringResource(R.string.navigation_drawer_siderail_action_manage_folders), - onClick = onManageFoldersClick, - imageVector = Icons.Outlined.FolderManaged, - ) - SettingListItem( - label = if (showAccountSelector) { - stringResource(R.string.navigation_drawer_siderail_action_hide_accounts) - } else { - stringResource(R.string.navigation_drawer_siderail_action_show_accounts) - }, - onClick = onAccountSelectorClick, - imageVector = if (showAccountSelector) { - Icons.Outlined.ChevronLeft - } else { - Icons.Outlined.ChevronRight - }, - ) - } -} diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SettingListItem.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SettingListItem.kt deleted file mode 100644 index deffb1a1744..00000000000 --- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SettingListItem.kt +++ /dev/null @@ -1,27 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui.setting - -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.vector.ImageVector -import app.k9mail.core.ui.compose.designsystem.atom.icon.Icon -import app.k9mail.core.ui.compose.designsystem.organism.drawer.NavigationDrawerItem - -@Composable -internal fun SettingListItem( - label: String, - onClick: () -> Unit, - imageVector: ImageVector, - modifier: Modifier = Modifier, -) { - NavigationDrawerItem( - label = label, - onClick = onClick, - modifier = modifier, - selected = false, - icon = { - Icon( - imageVector = imageVector, - ) - }, - ) -} diff --git a/feature/navigation/drawer/siderail/src/main/res/values-am/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-am/strings.xml deleted file mode 100644 index a6b3daec935..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-am/strings.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/feature/navigation/drawer/siderail/src/main/res/values-ar/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-ar/strings.xml deleted file mode 100644 index 35a77d1aae5..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-ar/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - الإعدادات - إدارة المجلدات - البريد الوارد الموحَّد - إخفاء الحسابات - إظهار الحسابات - 99+ - 1k+ - مزامنة جميع الحسابات - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-ast/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-ast/strings.xml deleted file mode 100644 index a6b3daec935..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-ast/strings.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/feature/navigation/drawer/siderail/src/main/res/values-az/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-az/strings.xml deleted file mode 100644 index a6b3daec935..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-az/strings.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/feature/navigation/drawer/siderail/src/main/res/values-be/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-be/strings.xml deleted file mode 100644 index cc2e9b37d90..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-be/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Налады - Кіраванне каталогамі - Усе атрыманыя - Сінхранізаваць усе акаўнты - Паказаць акаўнты - Схаваць акаўнты - 99+ - 1000+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-bg/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-bg/strings.xml deleted file mode 100644 index dcfacf9c067..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-bg/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Настройки - Управление на папки - Обща входяща кутия - Синхронизация на всички профили - Показване на профилите - Скриване на профилите - над 99 - над 1000 - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-bn/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-bn/strings.xml deleted file mode 100644 index a6b3daec935..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-bn/strings.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/feature/navigation/drawer/siderail/src/main/res/values-br/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-br/strings.xml deleted file mode 100644 index 591319469e0..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-br/strings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - Arventennoù - Merañ an teuliadoù - Boest degemer unanet - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-bs/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-bs/strings.xml deleted file mode 100644 index 424b53db206..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-bs/strings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - Postavke - Upravljajte direktorijumima - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-ca/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-ca/strings.xml deleted file mode 100644 index 8cf3702800d..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-ca/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Configuració - Gestioneu les carpetes - Bústia d\'entrada unificada - Sincronitza tots els comptes - Mostra els comptes - Amaga els comptes - 99+ - 1000+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-co/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-co/strings.xml deleted file mode 100644 index 7b54fc23698..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-co/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Parametri - Ghjestione di i cartulari - Ricezzione cuncolta - Sincrunizà tutti i conti - Affissà i conti - > 99 - Piattà i conti - > 1000 - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-cs/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-cs/strings.xml deleted file mode 100644 index a65bd0defb5..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-cs/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Nastavení - Správa složek - Jednotná schránka - 99+ - 1 tis.+ - Zobrazit účty - Synchronizovat všechny účty - Skrýt účty - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-cy/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-cy/strings.xml deleted file mode 100644 index 6519d31a0f2..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-cy/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Gosodiadau - Rheoli ffolderi - Mewnflwch Unedig - Cydweddu pob cyfrif - Dangos cyfrifon - Cuddio cyfrifon - 99+ - 1k+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-da/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-da/strings.xml deleted file mode 100644 index 381d848d3e5..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-da/strings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - Indstillinger - Håndtér mapper - Fælles indbakke - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-de/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-de/strings.xml deleted file mode 100644 index a3a4c9a218e..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-de/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Einstellungen - Ordner verwalten - Gemeinsamer Posteingang - 1k+ - 99+ - Konten ausblenden - Alle Konten synchronisieren - Konten anzeigen - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-el/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-el/strings.xml deleted file mode 100644 index 281bd75d559..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-el/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Ρυθμίσεις - Διαχείριση φακέλων - Ενιαία Εισερχόμενα - 1χ+ - 99+ - Συγχρονισμός όλων των λογαριασμών - Εμφάνιση λογαριασμών - Απόκρυψη λογαριασμών - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-en-rGB/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-en-rGB/strings.xml deleted file mode 100644 index d70c21bdb8d..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-en-rGB/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Settings - Manage folders - Unified Inbox - Sync all accounts - Show accounts - Hide accounts - 99+ - 1k+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-enm/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-enm/strings.xml deleted file mode 100644 index a6b3daec935..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-enm/strings.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/feature/navigation/drawer/siderail/src/main/res/values-eo/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-eo/strings.xml deleted file mode 100644 index e0380a5df78..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-eo/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Agordoj - Administri mesaĝujojn - Unuigita ricevujo - Montri kontojn - Samtempigi ĉiujn kontojn - Kaŝi kontojn - 99+ - 1k+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-es/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-es/strings.xml deleted file mode 100644 index a4b8175a52d..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-es/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Ajustes - Administrar carpetas - Entrada unificada - >99 - >1000 - Sincronizar todas las cuentas - Mostrar cuentas - Ocultar cuentas - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-et/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-et/strings.xml deleted file mode 100644 index d7fd45e3642..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-et/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Seadistused - Halda kaustu - Koondsisendkaust - Sünkroniseeri kõik kontod - Näita kontosid - Peida kontod - 1k+ - 99+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-eu/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-eu/strings.xml deleted file mode 100644 index 433e50610cb..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-eu/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Ezarpenak - Kudeatu karpetak - Sarrerako ontzi bateratua - Sinkronizatu kontu guztiak - Erakutsi kontuak - Ezkutatu kontuak - 1.000+ - 99+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-fa/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-fa/strings.xml deleted file mode 100644 index 379f3696cad..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-fa/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - تنظیمات - مدیریت پوشه‌ها - صندوق ورودی یکپارچه - نهفتن حساب‌ها - هم‌گام سازی همهٔ آشنایان - نمایش حساب‌ها - ۹۹+ - ه+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-fi/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-fi/strings.xml deleted file mode 100644 index a0ee8c567b6..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-fi/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Asetukset - Hallitse kansioita - Yhdistetty saapuneet - Synkronoi kaikki tilit - Näytä tilit - Piilota tilit - 99+ - 1k+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-fr/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-fr/strings.xml deleted file mode 100644 index 4a784e2fcd0..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-fr/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Paramètres - Gérer les dossiers - Boîte de réception unifiée - Cacher les comptes - >99 - >1 k - Afficher les comptes - Synchroniser tous les comptes - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-fy/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-fy/strings.xml deleted file mode 100644 index c3ed595964f..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-fy/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Ynstellingen - Mappen beheare - Kombinearre Postfek YN - 99+ - 1k+ - Alle accounts syngronisearje - Accounts toane - Accounts ferstopje - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-ga/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-ga/strings.xml deleted file mode 100644 index e0f12bf445f..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-ga/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Socruithe - Bainistigh fillteáin - Sioncronaigh gach cuntas - 1k+ - Taispeáin cuntais - Folaigh cuntais - Bosca Isteach Aontaithe - 99+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-gd/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-gd/strings.xml deleted file mode 100644 index 42d96d559b9..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-gd/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Roghainnean - Stiùirich na pasganan - An t-oll-bhogsa - Còrr is 99 - Còrr is 1k - Sioncronaich a h-uile cunntas - Seall na cunntasan - Falaich na cunntasan - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-gl/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-gl/strings.xml deleted file mode 100644 index a83f1d42ffd..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-gl/strings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - Configuración - Xestionar cartafoles - Entrada unificada - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-gu/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-gu/strings.xml deleted file mode 100644 index 2a1f6a75fa6..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-gu/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - સૅટિંગ - ફોલ્ડર મેનેજ કરોં - બધાં ખાતાઓ ને સિંક કરોં - ૧૦૦૦+ - ૯૯+ - ખાતાઓ દેખાડોં - ખાતાઓ છુપાડોં - એકીકૃત ઇનબોક્સ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-hi/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-hi/strings.xml deleted file mode 100644 index 6df75a1207b..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-hi/strings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - सेटिंग - फोल्डर मैनेज करें - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-hr/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-hr/strings.xml deleted file mode 100644 index a07369001e2..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-hr/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Podešenja - Upravljanje mapama - Objedinjena dolazna pošta - Sinkroniziraj sve račune - Prikaži račune - Sakrij račune - 1k+ - 99+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-ht/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-ht/strings.xml deleted file mode 100644 index 55344e51920..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-ht/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/feature/navigation/drawer/siderail/src/main/res/values-hu/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-hu/strings.xml deleted file mode 100644 index a2aebe869a6..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-hu/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Beállítások - Mappák kezelése - Egységes beérkezett üzenetek - Összes fiók szinkronizálása - Fiókok megjelenítése - 99+ - Fiókok elrejtése - 1e+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-hy/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-hy/strings.xml deleted file mode 100644 index 9d7dc16dd08..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-hy/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - Կարգաւորումներ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-in/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-in/strings.xml deleted file mode 100644 index e05f2062a83..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-in/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Pengaturan - Kelola folder - Kotak Masuk Terpadu - 99+ - 1rb+ - Sinkronkan semua akun - Tampilkan akun - Sembunyikan akun - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-is/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-is/strings.xml deleted file mode 100644 index dcf8c26f513..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-is/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Stillingar - Sýsla með möppur - Sameinað innhólf - >99 - >1.000 - Samstilla alla reikninga - Sýna reikninga - Fela reikninga - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-it/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-it/strings.xml deleted file mode 100644 index bac1d890bb9..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-it/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Impostazioni - Gestisci cartelle - Posta combinata - 1k+ - 99+ - Nascondi gli account - Sincronizza tutti gli account - Mostra gli account - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-iw/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-iw/strings.xml deleted file mode 100644 index 7295d2a9af2..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-iw/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - הגדרות - נהל תיקיות - תיבת דואר נכנס אחידה - סנכרן את כל החשבונות - הצג חשבונות - הסתר חשבונות - 99+ - 1k+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-ja/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-ja/strings.xml deleted file mode 100644 index 564a2aa047c..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-ja/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - 設定 - フォルダーを管理 - 統合受信トレイ - アカウントを開く - すべてのアカウントを同期 - アカウントを閉じる - 99+ - 1000+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-ka/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-ka/strings.xml deleted file mode 100644 index 1ad2f8e3cf0..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-ka/strings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - პარამეტრები - საკეცების მართვა - გაერთიანებული შემავალი - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-kab/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-kab/strings.xml deleted file mode 100644 index 187668db80b..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-kab/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - Iɣewwaren - Sefrek ikaramen - Mtawi meṛṛa imiḍanen - Sken imiḍanen - Ffer imiḍanen - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-kk/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-kk/strings.xml deleted file mode 100644 index 6e7123c47e6..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-kk/strings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - Баптаулар - Тіркелгілерді көрсету - 99+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-kn/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-kn/strings.xml deleted file mode 100644 index 55344e51920..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-kn/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/feature/navigation/drawer/siderail/src/main/res/values-ko/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-ko/strings.xml deleted file mode 100644 index 2aa3055da47..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-ko/strings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - 설정 - 폴더 관리 - 통합 편지함 - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-lt/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-lt/strings.xml deleted file mode 100644 index 292ad2ff013..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-lt/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - Nustatymai - Tvarkyti aplankus - Suvestiniai gautieji - Rodyti paskyras - Sinchronizuoti visas paskyras - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-lv/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-lv/strings.xml deleted file mode 100644 index aded20b6496..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-lv/strings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - Iestatījumi - Pārvaldīt mapes - Apvienotā Iesūtne - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-ml/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-ml/strings.xml deleted file mode 100644 index bb7ea89ffb9..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-ml/strings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - സജ്ജീകരണങ്ങൾ - ഫോൾഡറുകൾ നിയന്ത്രിക്കുക - ഏകീകൃത ഇൻ‌ബോക്സ് - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-mnw/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-mnw/strings.xml deleted file mode 100644 index 6ae9a8e204e..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-mnw/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - တၚ်ပလေဝ်ဂမၠိုၚ် - စဳရေၚ် အခန်ဝှါၚ် - ထ္ၜးအဃံက်ဖအိုတ် - ဆက်စၠောံအဃံဖအိုတ် - ပၞုက်အဃံက် - လိက်လုပ်လဝ်ဖအိုတ် - ၉၉+ - ၁လ္ၚဳ+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-nb/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-nb/strings.xml deleted file mode 100644 index b5f640c4685..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-nb/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Innstillinger - Behandle mapper - Samlet innboks - Vis kontoer - Synkronisér alle kontoer - Skjul kontoer - 99+ - 1T+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-nl/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-nl/strings.xml deleted file mode 100644 index 7af945973ff..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-nl/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Instellingen - Mappen beheren - Samengevoegd Postvak IN - 1k+ - 99+ - Alle accounts synchroniseren - Accounts tonen - Accounts verbergen - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-nn/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-nn/strings.xml deleted file mode 100644 index e0cdfad71c2..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-nn/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Innstillingar - Handsam mapper - Synkroniser alle kontoar - Vis kontoar - Skjul kontoar - 99+ - Samla innboks - 1k+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-pl/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-pl/strings.xml deleted file mode 100644 index 6615850d107..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-pl/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Ustawienia - Zarządzaj folderami - Zintegrowana odbiorcza - 99+ - 1k+ - Synchronizuj wszystkie konta - Ukryj konta - Pokaż konta - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-pt-rBR/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-pt-rBR/strings.xml deleted file mode 100644 index 78e749ddc4c..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-pt-rBR/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Configurações - Gerenciar pastas - Caixa de Entrada Unificada - 99+ - Sincronizar todas as contas - Esconder contas - Mostrar contas - 1k+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-pt-rPT/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-pt-rPT/strings.xml deleted file mode 100644 index c4006ec8e8e..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-pt-rPT/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Configurações - Gerir pastas - Caixa de entrada unificada - Sincronizar todas as contas - Esconder contas - >99 - >1k - Mostrar contas - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-pt/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-pt/strings.xml deleted file mode 100644 index a6b3daec935..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-pt/strings.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/feature/navigation/drawer/siderail/src/main/res/values-ro/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-ro/strings.xml deleted file mode 100644 index 5ccacb95a4c..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-ro/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Opțiuni - Gestionează dosarele - Căsuță poștală unificată - Sincronizează toate conturile - Arată conturile - Ascunde conturile - 99+ - 1k+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-ru/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-ru/strings.xml deleted file mode 100644 index c22bffd18ee..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-ru/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Настройки - Выбрать папки - Общие входящие - Синхронизировать все учётные записи - Показать учётные записи - Скрыть учётные записи - 1000+ - 99+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-sk/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-sk/strings.xml deleted file mode 100644 index f8e46061b18..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-sk/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Nastavenia - Spravovať priečinky - Jednotná schránka - 99+ - 1k+ - Synchronizovať všetky kontá - Ukázať kontá - Skryť kontá - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-sl/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-sl/strings.xml deleted file mode 100644 index 529d57b20e7..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-sl/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Nastavitve - Upravljanje z mapami - Skupna mapa prejetih sporočil - 99+ - 1k+ - Uskladi vse račune - Prikaži račune - Skrij račune - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-sq/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-sq/strings.xml deleted file mode 100644 index df97f069ea6..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-sq/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Rregullime - Administroni dosje - Kuti Poste e Njësuar - Njëkohëso krejt llogaritë - Shfaq llogari - Fshihi llogaritë - 99+ - 1k+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-sr/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-sr/strings.xml deleted file mode 100644 index c85343c14bc..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-sr/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Подешавања - Управљај фолдерима - Обједињено сандуче - Синхронизуј све налоге - Прикажи налоге - Сакриј налоге - 99+ - 1к+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-sv/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-sv/strings.xml deleted file mode 100644 index 108844765dd..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-sv/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Inställningar - Hantera mappar - Samlad inkorg - Visa konton - Synkronisera alla konton - 99+ - 1tn+ - Göm konton - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-sw/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-sw/strings.xml deleted file mode 100644 index 55344e51920..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-sw/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/feature/navigation/drawer/siderail/src/main/res/values-ta-rIN/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-ta-rIN/strings.xml deleted file mode 100644 index 9cb61f88acc..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-ta-rIN/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - அமைப்புகள் - கணக்குகளைக் காட்டு - 1 கே+ - கோப்புறைகளை நிர்வகிக்கவும் - எல்லா கணக்குகளையும் ஒத்திசைக்கவும் - கணக்குகளை மறைக்கவும் - ஒருங்கிணைந்த இன்பாக்ச் - 99+ - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-th/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-th/strings.xml deleted file mode 100644 index 55344e51920..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-th/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/feature/navigation/drawer/siderail/src/main/res/values-tr/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-tr/strings.xml deleted file mode 100644 index 48d3e7282df..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-tr/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Ayarlar - Klasörleri yönet - Birleşik Gelen Kutusu - 1.000+ - 99+ - Hesapları gizle - Tüm hesapları eşitle - Hesapları göster - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-uk/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-uk/strings.xml deleted file mode 100644 index 65a49080315..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-uk/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Налаштування - Керувати теками - Об\'єднані Вхідні - Синхронізувати всі облікові записи - Показати облікові записи - 1 тис.+ - 99+ - Сховати облікові записи - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-vi/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-vi/strings.xml deleted file mode 100644 index afb61c17fd9..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-vi/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Thiết đặt - Quản lý thư mục - Hộp thư đồng nhất - 1n+ - Hiên các tài khoản - Ấn các tài khoản - 99+ - Đồng bộ tất cả các tài khoản - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-zh-rCN/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-zh-rCN/strings.xml deleted file mode 100644 index 27c3214f4e6..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-zh-rCN/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - 设置 - 管理文件夹 - 统一收件箱 - 99+ - 1000+ - 显示账号 - 隐藏账号 - 同步全部账号 - diff --git a/feature/navigation/drawer/siderail/src/main/res/values-zh-rTW/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values-zh-rTW/strings.xml deleted file mode 100644 index 900d8631c03..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values-zh-rTW/strings.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - 設定 - 整理信件匣 - 全域收件匣 - 99+ - 1k+ - 同步所有帳號 - 顯示所有帳號 - 隱藏其他帳號 - diff --git a/feature/navigation/drawer/siderail/src/main/res/values/strings.xml b/feature/navigation/drawer/siderail/src/main/res/values/strings.xml deleted file mode 100644 index 5d6783a594d..00000000000 --- a/feature/navigation/drawer/siderail/src/main/res/values/strings.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - Settings - Manage folders - Sync all accounts - Show accounts - Hide accounts - Unified Inbox - - 99+ - - 1k+ - diff --git a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/data/FakeMessageCountsProvider.kt b/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/data/FakeMessageCountsProvider.kt deleted file mode 100644 index 858bd7c7cd6..00000000000 --- a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/data/FakeMessageCountsProvider.kt +++ /dev/null @@ -1,36 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.data - -import app.k9mail.legacy.message.controller.MessageCounts -import app.k9mail.legacy.message.controller.MessageCountsProvider -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flowOf -import net.thunderbird.core.android.account.LegacyAccountDto -import net.thunderbird.feature.search.legacy.LocalMessageSearch -import net.thunderbird.feature.search.legacy.SearchAccount - -internal class FakeMessageCountsProvider( - private val messageCounts: MessageCounts, -) : MessageCountsProvider { - var recordedSearch: LocalMessageSearch = LocalMessageSearch() - - override fun getMessageCounts(account: LegacyAccountDto): MessageCounts { - TODO("Not yet implemented") - } - - override fun getMessageCounts(searchAccount: SearchAccount): MessageCounts { - TODO("Not yet implemented") - } - - override fun getMessageCounts(search: LocalMessageSearch): MessageCounts { - TODO("Not yet implemented") - } - - override fun getMessageCountsFlow(search: LocalMessageSearch): Flow { - recordedSearch = search - return flowOf(messageCounts) - } - - override fun getUnreadMessageCount(account: LegacyAccountDto, folderId: Long): Int { - TODO("Not yet implemented") - } -} diff --git a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/data/UnifiedFolderRepositoryTest.kt b/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/data/UnifiedFolderRepositoryTest.kt deleted file mode 100644 index 97640dbbc62..00000000000 --- a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/data/UnifiedFolderRepositoryTest.kt +++ /dev/null @@ -1,47 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.data - -import app.k9mail.legacy.message.controller.MessageCounts -import assertk.assertThat -import assertk.assertions.isEqualTo -import kotlin.test.Test -import kotlinx.coroutines.flow.first -import kotlinx.coroutines.test.runTest -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolderType -import net.thunderbird.feature.search.legacy.api.MessageSearchField -import net.thunderbird.feature.search.legacy.api.SearchAttribute - -internal class UnifiedFolderRepositoryTest { - - @Test - fun `should return DisplayUnifiedFolder for unified inbox`() = runTest { - val messageCountsProvider = FakeMessageCountsProvider( - messageCounts = MessageCounts( - unread = 2, - starred = 2, - ), - ) - val testSubject = UnifiedFolderRepository( - messageCountsProvider = messageCountsProvider, - ) - val folderType = DisplayUnifiedFolderType.INBOX - - val result = testSubject.getDisplayUnifiedFolderFlow(folderType).first() - - assertThat(result).isEqualTo( - DisplayUnifiedFolder( - id = "unified_inbox", - unifiedType = folderType, - unreadMessageCount = 2, - starredMessageCount = 2, - ), - ) - - val search = messageCountsProvider.recordedSearch - assertThat(search.id).isEqualTo("unified_inbox") - val condition = search.conditions.condition - assertThat(condition?.value).isEqualTo("1") - assertThat(condition?.attribute).isEqualTo(SearchAttribute.EQUALS) - assertThat(condition?.field).isEqualTo(MessageSearchField.INTEGRATE) - } -} diff --git a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/FakeDisplayFolderRepository.kt b/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/FakeDisplayFolderRepository.kt deleted file mode 100644 index d33d373c763..00000000000 --- a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/FakeDisplayFolderRepository.kt +++ /dev/null @@ -1,21 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.domain.usecase - -import app.k9mail.legacy.ui.folder.DisplayFolder -import app.k9mail.legacy.ui.folder.DisplayFolderRepository -import kotlinx.coroutines.flow.Flow -import net.thunderbird.core.android.account.LegacyAccountDto - -internal class FakeDisplayFolderRepository( - private val foldersFlow: Flow>, -) : DisplayFolderRepository { - override fun getDisplayFoldersFlow( - account: LegacyAccountDto, - includeHiddenFolders: Boolean, - ): Flow> { - TODO("Not yet implemented") - } - - override fun getDisplayFoldersFlow(accountUuid: String): Flow> { - return foldersFlow - } -} diff --git a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/FakeLegacyAccountDtoManager.kt b/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/FakeLegacyAccountDtoManager.kt deleted file mode 100644 index 9431c8f6819..00000000000 --- a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/FakeLegacyAccountDtoManager.kt +++ /dev/null @@ -1,49 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.domain.usecase - -import kotlinx.coroutines.flow.Flow -import net.thunderbird.core.android.account.AccountRemovedListener -import net.thunderbird.core.android.account.AccountsChangeListener -import net.thunderbird.core.android.account.LegacyAccountDto -import net.thunderbird.core.android.account.LegacyAccountDtoManager - -internal class FakeLegacyAccountDtoManager( - val recordedParameters: MutableList = mutableListOf(), - private val accounts: List = emptyList(), -) : LegacyAccountDtoManager { - override fun getAccounts(): List { - TODO("Not yet implemented") - } - - override fun getAccountsFlow(): Flow> { - TODO("Not yet implemented") - } - - override fun getAccount(accountUuid: String): LegacyAccountDto? { - recordedParameters.add(accountUuid) - return accounts.find { it.uuid == accountUuid } - } - - override fun getAccountFlow(accountUuid: String): Flow { - TODO("Not yet implemented") - } - - override fun addAccountRemovedListener(listener: AccountRemovedListener) { - TODO("Not yet implemented") - } - - override fun moveAccount(account: LegacyAccountDto, newPosition: Int) { - TODO("Not yet implemented") - } - - override fun addOnAccountsChangeListener(accountsChangeListener: AccountsChangeListener) { - TODO("Not yet implemented") - } - - override fun removeOnAccountsChangeListener(accountsChangeListener: AccountsChangeListener) { - TODO("Not yet implemented") - } - - override fun saveAccount(account: LegacyAccountDto) { - TODO("Not yet implemented") - } -} diff --git a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/FakeMessagingControllerMailChecker.kt b/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/FakeMessagingControllerMailChecker.kt deleted file mode 100644 index e031036bfde..00000000000 --- a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/FakeMessagingControllerMailChecker.kt +++ /dev/null @@ -1,29 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.domain.usecase - -import app.k9mail.legacy.message.controller.MessagingControllerMailChecker -import app.k9mail.legacy.message.controller.MessagingListener -import net.thunderbird.core.android.account.LegacyAccountDto - -internal class FakeMessagingControllerMailChecker( - val recordedParameters: MutableList = mutableListOf(), - private val listenerExecutor: (MessagingListener?) -> Unit = {}, -) : MessagingControllerMailChecker { - override fun checkMail( - account: LegacyAccountDto?, - ignoreLastCheckedTime: Boolean, - useManualWakeLock: Boolean, - notify: Boolean, - listener: MessagingListener?, - ) { - recordedParameters.add(CheckMailParameters(account, ignoreLastCheckedTime, useManualWakeLock, notify)) - - listenerExecutor(listener) - } -} - -internal data class CheckMailParameters( - val account: LegacyAccountDto?, - val ignoreLastCheckedTime: Boolean, - val useManualWakeLock: Boolean, - val notify: Boolean, -) diff --git a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/FakeUnifiedFolderRepository.kt b/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/FakeUnifiedFolderRepository.kt deleted file mode 100644 index 17499ff4579..00000000000 --- a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/FakeUnifiedFolderRepository.kt +++ /dev/null @@ -1,14 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.domain.usecase - -import kotlinx.coroutines.flow.Flow -import net.thunderbird.feature.navigation.drawer.siderail.domain.DomainContract.UnifiedFolderRepository -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolderType - -internal class FakeUnifiedFolderRepository( - private val displayUnifiedFolderFlow: Flow, -) : UnifiedFolderRepository { - override fun getDisplayUnifiedFolderFlow(unifiedFolderType: DisplayUnifiedFolderType): Flow { - return displayUnifiedFolderFlow - } -} diff --git a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/GetDisplayFoldersForAccountTest.kt b/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/GetDisplayFoldersForAccountTest.kt deleted file mode 100644 index 1f4b1a30fcf..00000000000 --- a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/GetDisplayFoldersForAccountTest.kt +++ /dev/null @@ -1,158 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.domain.usecase - -import app.cash.turbine.test -import assertk.assertThat -import assertk.assertions.isEqualTo -import kotlin.test.Test -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.first -import kotlinx.coroutines.test.runTest -import net.thunderbird.account.fake.FakeAccountData.ACCOUNT_ID_RAW -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayAccountFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolderType -import net.thunderbird.feature.navigation.drawer.siderail.ui.FakeData -import app.k9mail.legacy.ui.folder.DisplayFolder as LegacyDisplayFolder - -internal class GetDisplayFoldersForAccountTest { - - @Test - fun `should return only account folders when includeUnifiedFolders is false`() = runTest { - val accountId = ACCOUNT_ID_RAW - val legacyDisplayFolderFlow = MutableStateFlow(LEGACY_DISPLAY_FOLDERS) - val displayFolderRepository = FakeDisplayFolderRepository(legacyDisplayFolderFlow) - val unifiedFolderFlow = MutableStateFlow(DISPLAY_UNIFIED_FOLDER) - val unifiedFolderRepository = FakeUnifiedFolderRepository(unifiedFolderFlow) - val testSubject = GetDisplayFoldersForAccount( - displayFolderRepository = displayFolderRepository, - unifiedFolderRepository = unifiedFolderRepository, - ) - - val result = testSubject(accountId, includeUnifiedFolders = false).first() - - assertThat(result).isEqualTo(DISPLAY_ACCOUNT_FOLDERS) - } - - @Test - fun `should return account folders and unified folders when includeUnifiedFolders is true`() = runTest { - val accountId = ACCOUNT_ID_RAW - val legacyDisplayFolderFlow = MutableStateFlow(LEGACY_DISPLAY_FOLDERS) - val displayFolderRepository = FakeDisplayFolderRepository(legacyDisplayFolderFlow) - val unifiedFolderFlow = MutableStateFlow(DISPLAY_UNIFIED_FOLDER) - val unifiedFolderRepository = FakeUnifiedFolderRepository(unifiedFolderFlow) - val testSubject = GetDisplayFoldersForAccount( - displayFolderRepository = displayFolderRepository, - unifiedFolderRepository = unifiedFolderRepository, - ) - - val result = testSubject(accountId, includeUnifiedFolders = true).first() - - assertThat(result).isEqualTo(DISPLAY_UNIFIED_FOLDERS + DISPLAY_ACCOUNT_FOLDERS) - } - - @Test - fun `should emit new list when account folders or unified folders emit new items`() = runTest { - val accountId = ACCOUNT_ID_RAW - val legacyDisplayFolderFlow = MutableStateFlow(LEGACY_DISPLAY_FOLDERS) - val displayFolderRepository = FakeDisplayFolderRepository(legacyDisplayFolderFlow) - val unifiedFolderFlow = MutableStateFlow(DISPLAY_UNIFIED_FOLDER) - val unifiedFolderRepository = FakeUnifiedFolderRepository(unifiedFolderFlow) - val testSubject = GetDisplayFoldersForAccount( - displayFolderRepository = displayFolderRepository, - unifiedFolderRepository = unifiedFolderRepository, - ) - - testSubject(accountId, includeUnifiedFolders = true).test { - assertThat(awaitItem()).isEqualTo(DISPLAY_UNIFIED_FOLDERS + DISPLAY_ACCOUNT_FOLDERS) - - legacyDisplayFolderFlow.emit(LEGACY_DISPLAY_FOLDERS_2) - - assertThat(awaitItem()).isEqualTo(DISPLAY_UNIFIED_FOLDERS + DISPLAY_ACCOUNT_FOLDERS_2) - - unifiedFolderFlow.emit(DISPLAY_UNIFIED_FOLDER_2) - - assertThat(awaitItem()).isEqualTo(listOf(DISPLAY_UNIFIED_FOLDER_2) + DISPLAY_ACCOUNT_FOLDERS_2) - } - } - - private companion object { - val LEGACY_DISPLAY_FOLDERS = listOf( - LegacyDisplayFolder( - folder = FakeData.FOLDER, - isInTopGroup = false, - unreadMessageCount = 0, - starredMessageCount = 0, - pathDelimiter = "/", - ), - LegacyDisplayFolder( - folder = FakeData.FOLDER.copy( - id = 2, - name = "Folder 2", - ), - isInTopGroup = false, - unreadMessageCount = 1, - starredMessageCount = 0, - pathDelimiter = "/", - ), - ) - - val LEGACY_DISPLAY_FOLDERS_2 = LEGACY_DISPLAY_FOLDERS + LegacyDisplayFolder( - folder = FakeData.FOLDER.copy( - id = 3, - name = "Folder 3", - ), - isInTopGroup = false, - unreadMessageCount = 0, - starredMessageCount = 0, - pathDelimiter = "/", - ) - - val DISPLAY_UNIFIED_FOLDER = DisplayUnifiedFolder( - id = "unified_inbox", - unifiedType = DisplayUnifiedFolderType.INBOX, - unreadMessageCount = 2, - starredMessageCount = 2, - ) - - val DISPLAY_UNIFIED_FOLDER_2 = DisplayUnifiedFolder( - id = "unified_inbox", - unifiedType = DisplayUnifiedFolderType.INBOX, - unreadMessageCount = 3, - starredMessageCount = 3, - ) - - val DISPLAY_UNIFIED_FOLDERS = listOf(DISPLAY_UNIFIED_FOLDER) - - val DISPLAY_ACCOUNT_FOLDERS = listOf( - DisplayAccountFolder( - accountId = ACCOUNT_ID_RAW, - folder = FakeData.FOLDER, - isInTopGroup = false, - unreadMessageCount = 0, - starredMessageCount = 0, - ), - DisplayAccountFolder( - accountId = ACCOUNT_ID_RAW, - folder = FakeData.FOLDER.copy( - id = 2, - name = "Folder 2", - ), - isInTopGroup = false, - unreadMessageCount = 1, - starredMessageCount = 0, - ), - ) - - val DISPLAY_ACCOUNT_FOLDERS_2 = DISPLAY_ACCOUNT_FOLDERS + DisplayAccountFolder( - accountId = ACCOUNT_ID_RAW, - folder = FakeData.FOLDER.copy( - id = 3, - name = "Folder 3", - ), - isInTopGroup = false, - unreadMessageCount = 0, - starredMessageCount = 0, - ) - } -} diff --git a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/GetDrawerConfigTest.kt b/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/GetDrawerConfigTest.kt deleted file mode 100644 index 47f80b3a120..00000000000 --- a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/GetDrawerConfigTest.kt +++ /dev/null @@ -1,32 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.domain.usecase - -import assertk.assertThat -import assertk.assertions.isEqualTo -import kotlin.test.Test -import kotlinx.coroutines.flow.first -import kotlinx.coroutines.flow.flowOf -import kotlinx.coroutines.test.runTest -import net.thunderbird.feature.navigation.drawer.api.NavigationDrawerExternalContract.DrawerConfig -import net.thunderbird.feature.navigation.drawer.api.NavigationDrawerExternalContract.DrawerConfigLoader -import org.mockito.Mockito.mock -import org.mockito.kotlin.whenever - -internal class GetDrawerConfigTest { - - @Test - fun `should get drawer config`() = runTest { - val configLoader: DrawerConfigLoader = mock() - val drawerConfig = DrawerConfig( - showUnifiedFolders = true, - showStarredCount = true, - showAccountSelector = true, - ) - - val testSubject = GetDrawerConfig(configLoader = configLoader) - whenever(configLoader.loadDrawerConfigFlow()).thenReturn(flowOf(drawerConfig)) - - val result = testSubject().first() - - assertThat(result).isEqualTo(drawerConfig) - } -} diff --git a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/SyncAccountTest.kt b/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/SyncAccountTest.kt deleted file mode 100644 index 9761b8b606f..00000000000 --- a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/SyncAccountTest.kt +++ /dev/null @@ -1,45 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.domain.usecase - -import app.k9mail.legacy.message.controller.MessagingListener -import assertk.assertThat -import assertk.assertions.isEqualTo -import kotlin.test.Test -import kotlinx.coroutines.flow.first -import kotlinx.coroutines.test.runTest -import net.thunderbird.feature.navigation.drawer.siderail.ui.FakeData - -internal class SyncAccountTest { - - @Test - fun `should sync mail with account`() = runTest { - val listenerExecutor: (MessagingListener?) -> Unit = { listener -> - listener?.checkMailFinished(null, null) - } - val account = FakeData.ACCOUNT - val accountManager = FakeLegacyAccountDtoManager( - accounts = listOf(account), - ) - val messagingController = FakeMessagingControllerMailChecker( - listenerExecutor = listenerExecutor, - ) - val testSubject = SyncAccount( - accountManager = accountManager, - messagingController = messagingController, - ) - - val result = testSubject(account.uuid).first() - - assertThat(result.isSuccess).isEqualTo(true) - assertThat(accountManager.recordedParameters).isEqualTo(listOf(account.uuid)) - assertThat(messagingController.recordedParameters).isEqualTo( - listOf( - CheckMailParameters( - account = account, - ignoreLastCheckedTime = true, - useManualWakeLock = true, - notify = true, - ), - ), - ) - } -} diff --git a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/SyncAllAccountsTest.kt b/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/SyncAllAccountsTest.kt deleted file mode 100644 index f2e5187b9f8..00000000000 --- a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/domain/usecase/SyncAllAccountsTest.kt +++ /dev/null @@ -1,38 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.domain.usecase - -import app.k9mail.legacy.message.controller.MessagingListener -import assertk.assertThat -import assertk.assertions.isEqualTo -import kotlin.test.Test -import kotlinx.coroutines.flow.first -import kotlinx.coroutines.test.runTest - -internal class SyncAllAccountsTest { - - @Test - fun `should sync mail`() = runTest { - val listenerExecutor: (MessagingListener?) -> Unit = { listener -> - listener?.checkMailFinished(null, null) - } - val messagingController = FakeMessagingControllerMailChecker( - listenerExecutor = listenerExecutor, - ) - val testSubject = SyncAllAccounts( - messagingController = messagingController, - ) - - val result = testSubject().first() - - assertThat(result.isSuccess).isEqualTo(true) - assertThat(messagingController.recordedParameters).isEqualTo( - listOf( - CheckMailParameters( - account = null, - ignoreLastCheckedTime = true, - useManualWakeLock = true, - notify = true, - ), - ), - ) - } -} diff --git a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerStateTest.kt b/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerStateTest.kt deleted file mode 100644 index c0453c33b12..00000000000 --- a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerStateTest.kt +++ /dev/null @@ -1,31 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui - -import assertk.assertThat -import assertk.assertions.isEqualTo -import kotlinx.collections.immutable.persistentListOf -import net.thunderbird.feature.navigation.drawer.api.NavigationDrawerExternalContract.DrawerConfig -import net.thunderbird.feature.navigation.drawer.siderail.ui.DrawerContract.State -import org.junit.Test - -internal class DrawerStateTest { - - @Test - fun `should set default values`() { - val state = State() - - assertThat(state).isEqualTo( - State( - config = DrawerConfig( - showUnifiedFolders = false, - showStarredCount = false, - showAccountSelector = true, - ), - accounts = persistentListOf(), - selectedAccountId = null, - folders = persistentListOf(), - selectedFolderId = null, - isLoading = false, - ), - ) - } -} diff --git a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerViewKtTest.kt b/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerViewKtTest.kt deleted file mode 100644 index 3fd24c5dc79..00000000000 --- a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerViewKtTest.kt +++ /dev/null @@ -1,159 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui - -import androidx.compose.ui.test.onChildAt -import androidx.compose.ui.test.printToString -import androidx.lifecycle.compose.collectAsStateWithLifecycle -import app.k9mail.core.ui.compose.testing.ComposeTest -import app.k9mail.core.ui.compose.testing.onNodeWithTag -import app.k9mail.core.ui.compose.testing.setContentWithTheme -import assertk.assertThat -import assertk.assertions.isEqualTo -import kotlin.test.Test -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.test.runTest -import net.thunderbird.account.fake.FakeAccountData.ACCOUNT_ID_RAW -import net.thunderbird.feature.navigation.drawer.siderail.FolderDrawerState -import net.thunderbird.feature.navigation.drawer.siderail.ui.DrawerContract.Effect -import net.thunderbird.feature.navigation.drawer.siderail.ui.DrawerContract.Event -import net.thunderbird.feature.navigation.drawer.siderail.ui.DrawerContract.State - -internal class DrawerViewKtTest : ComposeTest() { - - @Test - fun `should delegate effects`() = runTest { - val initialState = State() - val viewModel = FakeDrawerViewModel(initialState) - val counter = Counter() - val verifyCounter = Counter() - - setContentWithTheme { - DrawerView( - drawerState = FolderDrawerState(), - openAccount = { counter.openAccountCount++ }, - openFolder = { _, _ -> counter.openFolderCount++ }, - openUnifiedFolder = { counter.openUnifiedFolderCount++ }, - openManageFolders = { counter.openManageFoldersCount++ }, - openSettings = { counter.openSettingsCount++ }, - closeDrawer = { counter.closeDrawerCount++ }, - viewModel = viewModel, - ) - } - - assertThat(counter).isEqualTo(verifyCounter) - - viewModel.effect(Effect.OpenAccount(FakeData.DISPLAY_ACCOUNT.id)) - - verifyCounter.openAccountCount++ - assertThat(counter).isEqualTo(verifyCounter) - - verifyCounter.openFolderCount++ - viewModel.effect( - Effect.OpenFolder( - accountId = ACCOUNT_ID_RAW, - folderId = 1, - ), - ) - - verifyCounter.openUnifiedFolderCount++ - viewModel.effect(Effect.OpenUnifiedFolder) - - verifyCounter.openManageFoldersCount++ - viewModel.effect(Effect.OpenManageFolders) - - verifyCounter.openSettingsCount++ - viewModel.effect(Effect.OpenSettings) - - verifyCounter.closeDrawerCount++ - viewModel.effect(Effect.CloseDrawer) - } - - @Test - fun `should register to drawer state and send events to view model`() = runTest { - val initialState = State() - val viewModel = FakeDrawerViewModel(initialState) - val initialDrawerState = FolderDrawerState() - val drawerStateFlow = MutableStateFlow(initialDrawerState) - - setContentWithTheme { - val state = drawerStateFlow.collectAsStateWithLifecycle() - - DrawerView( - drawerState = state.value, - openAccount = { }, - openFolder = { _, _ -> }, - openUnifiedFolder = { }, - openManageFolders = { }, - openSettings = { }, - closeDrawer = { }, - viewModel = viewModel, - ) - } - - drawerStateFlow.emit(initialDrawerState.copy(selectedAccountUuid = FakeData.ACCOUNT.uuid)) - - viewModel.events.contains(Event.SelectAccount(FakeData.ACCOUNT.uuid)) - - drawerStateFlow.emit(initialDrawerState.copy(selectedAccountUuid = null)) - - viewModel.events.contains(Event.SelectAccount(null)) - - drawerStateFlow.emit(initialDrawerState.copy(selectedFolderId = "1")) - - viewModel.events.contains(Event.SelectFolder("1")) - - drawerStateFlow.emit(initialDrawerState.copy(selectedFolderId = null)) - - viewModel.events.contains(Event.SelectFolder(null)) - } - - @Test - fun `pull refresh should listen to view model state`() = runTest { - val initialState = State( - isLoading = false, - ) - val viewModel = FakeDrawerViewModel(initialState) - - setContentWithTheme { - DrawerView( - drawerState = FolderDrawerState(), - openAccount = {}, - openFolder = { _, _ -> }, - openUnifiedFolder = {}, - openManageFolders = {}, - openSettings = {}, - closeDrawer = {}, - viewModel = viewModel, - ) - } - - onNodeWithTag("PullToRefreshBox").assertExists() - onNodeWithTag("PullToRefreshIndicator").assertExists() - .onChildAt(0).assertExists() - .printToString() - .contains("ProgressBarRangeInfo(current=0.0, range=0.0..1.0, steps=0)") - - viewModel.applyState(initialState.copy(isLoading = true)) - - onNodeWithTag("PullToRefreshIndicator").assertExists() - .onChildAt(0).assertExists() - .printToString() - .contains("ProgressBarRangeInfo(current=0.0, range=0.0..0.0, steps=0)") - - viewModel.applyState(initialState.copy(isLoading = false)) - - onNodeWithTag("PullToRefreshIndicator").assertExists() - .onChildAt(0).assertExists() - .printToString() - .contains("ProgressBarRangeInfo(current=0.0, range=0.0..1.0, steps=0)") - } - - @Suppress("DataClassShouldBeImmutable") - private data class Counter( - var openAccountCount: Int = 0, - var openFolderCount: Int = 0, - var openUnifiedFolderCount: Int = 0, - var openManageFoldersCount: Int = 0, - var openSettingsCount: Int = 0, - var closeDrawerCount: Int = 0, - ) -} diff --git a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerViewModelTest.kt b/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerViewModelTest.kt deleted file mode 100644 index b26aaca516b..00000000000 --- a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/DrawerViewModelTest.kt +++ /dev/null @@ -1,553 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui - -import app.k9mail.core.ui.compose.testing.mvi.advanceUntilIdle -import app.k9mail.core.ui.compose.testing.mvi.assertThatAndEffectTurbineConsumed -import app.k9mail.core.ui.compose.testing.mvi.runMviTest -import app.k9mail.core.ui.compose.testing.mvi.turbinesWithInitialStateCheck -import assertk.assertThat -import assertk.assertions.isEqualTo -import kotlin.test.Test -import kotlinx.collections.immutable.toImmutableList -import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.flow -import kotlinx.coroutines.flow.flowOf -import kotlinx.coroutines.flow.map -import kotlinx.coroutines.test.advanceUntilIdle -import kotlinx.coroutines.test.runTest -import net.thunderbird.core.testing.coroutines.MainDispatcherRule -import net.thunderbird.feature.mail.folder.api.Folder -import net.thunderbird.feature.mail.folder.api.FolderType -import net.thunderbird.feature.navigation.drawer.api.NavigationDrawerExternalContract.DrawerConfig -import net.thunderbird.feature.navigation.drawer.siderail.domain.DomainContract.UseCase -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayAccount -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayAccountFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolder -import net.thunderbird.feature.navigation.drawer.siderail.domain.entity.DisplayUnifiedFolderType -import net.thunderbird.feature.navigation.drawer.siderail.ui.DrawerContract.Effect -import net.thunderbird.feature.navigation.drawer.siderail.ui.DrawerContract.Event -import net.thunderbird.feature.navigation.drawer.siderail.ui.DrawerContract.State -import net.thunderbird.feature.navigation.drawer.siderail.ui.FakeData.DISPLAY_ACCOUNT -import org.junit.Rule -import org.mockito.Mockito.mock -import org.mockito.Mockito.times -import org.mockito.Mockito.verify -import org.mockito.kotlin.any -import org.mockito.kotlin.argumentCaptor -import org.mockito.kotlin.whenever - -@OptIn(ExperimentalCoroutinesApi::class) -internal class DrawerViewModelTest { - - @get:Rule - val mainDispatcherRule = MainDispatcherRule() - - @Test - fun `should collect drawer config`() = runTest { - val drawerConfig = createDrawerConfig() - val getDrawerConfigFlow = MutableStateFlow(drawerConfig) - val testSubject = createTestSubject( - drawerConfigFlow = getDrawerConfigFlow, - ) - - advanceUntilIdle() - - assertThat(testSubject.state.value.config).isEqualTo(drawerConfig) - - val newDrawerConfig = createDrawerConfig(showUnifiedInbox = true) - - getDrawerConfigFlow.emit(newDrawerConfig) - - advanceUntilIdle() - - assertThat(testSubject.state.value.config).isEqualTo(newDrawerConfig) - } - - @Test - fun `should change loading state when OnSyncAccount event is received`() = runMviTest { - val initialState = State( - accounts = listOf(DISPLAY_ACCOUNT).toImmutableList(), - selectedAccountId = DISPLAY_ACCOUNT.id, - ) - val testSubject = createTestSubject( - initialState = initialState, - displayAccountsFlow = flow { emit(listOf(DISPLAY_ACCOUNT)) }, - syncAccountFlow = flow { - delay(25) - emit(Result.success(Unit)) - }, - ) - val turbines = turbinesWithInitialStateCheck(testSubject, initialState) - - testSubject.event(Event.OnSyncAccount) - - assertThat(turbines.stateTurbine.awaitItem()).isEqualTo(initialState.copy(isLoading = true)) - assertThat(turbines.stateTurbine.awaitItem()).isEqualTo(initialState.copy(isLoading = false)) - } - - @Test - fun `should skip loading when no account is selected and OnSyncAccount event is received`() = runMviTest { - val initialState = State(selectedAccountId = null) - var counter = 0 - val testSubject = createTestSubject( - initialState = initialState, - syncAccountFlow = flow { - delay(25) - counter++ - emit(Result.success(Unit)) - }, - ) - - val turbines = turbinesWithInitialStateCheck(testSubject, initialState) - - testSubject.event(Event.OnSyncAccount) - - advanceUntilIdle() - - assertThat(testSubject.state.value.isLoading).isEqualTo(false) - assertThat(counter).isEqualTo(0) - - turbines.stateTurbine.ensureAllEventsConsumed() - turbines.effectTurbine.ensureAllEventsConsumed() - } - - @Test - fun `should skip loading when already loading and OnSyncAccount event received`() = runMviTest { - val initialState = State(isLoading = true) - var counter = 0 - val testSubject = createTestSubject( - initialState = initialState, - syncAccountFlow = flow { - counter++ - delay(25) - emit(Result.success(Unit)) - }, - ) - val turbines = turbinesWithInitialStateCheck(testSubject, initialState) - - testSubject.event(Event.OnSyncAccount) - - advanceUntilIdle() - - assertThat(testSubject.state.value.isLoading).isEqualTo(true) - assertThat(counter).isEqualTo(0) - - turbines.stateTurbine.ensureAllEventsConsumed() - turbines.effectTurbine.ensureAllEventsConsumed() - } - - @Test - fun `should change loading state when OnSyncAllAccounts event is received`() = runMviTest { - val testSubject = createTestSubject( - syncAllAccounts = flow { - delay(25) - emit(Result.success(Unit)) - }, - ) - val initialState = State(isLoading = false) - val turbines = turbinesWithInitialStateCheck(testSubject, initialState) - - testSubject.event(Event.OnSyncAllAccounts) - - assertThat(turbines.stateTurbine.awaitItem()).isEqualTo(State(isLoading = true)) - assertThat(turbines.stateTurbine.awaitItem()).isEqualTo(State(isLoading = false)) - } - - @Test - fun `should skip loading when already loading and OnSyncAllAccounts event received`() = runMviTest { - val initialState = State(isLoading = true) - var counter = 0 - val testSubject = createTestSubject( - initialState = initialState, - syncAccountFlow = flow { - counter++ - delay(25) - emit(Result.success(Unit)) - }, - ) - val turbines = turbinesWithInitialStateCheck(testSubject, initialState) - - testSubject.event(Event.OnSyncAllAccounts) - - advanceUntilIdle() - - assertThat(testSubject.state.value.isLoading).isEqualTo(true) - assertThat(counter).isEqualTo(0) - - turbines.stateTurbine.ensureAllEventsConsumed() - turbines.effectTurbine.ensureAllEventsConsumed() - } - - @Test - fun `should collect display accounts when created and select first as selected`() = runTest { - val displayAccounts = createDisplayAccountList(2) - val getDisplayAccountsFlow = MutableStateFlow(displayAccounts) - val testSubject = createTestSubject( - displayAccountsFlow = getDisplayAccountsFlow, - ) - - advanceUntilIdle() - - assertThat(testSubject.state.value.accounts.size).isEqualTo(displayAccounts.size) - assertThat(testSubject.state.value.accounts).isEqualTo(displayAccounts) - assertThat(testSubject.state.value.selectedAccountId).isEqualTo(displayAccounts.first().id) - } - - @Test - fun `should reselect selected account when old not present anymore`() = runTest { - val displayAccounts = createDisplayAccountList(3) - val getDisplayAccountsFlow = MutableStateFlow(displayAccounts) - val testSubject = createTestSubject( - displayAccountsFlow = getDisplayAccountsFlow, - ) - - advanceUntilIdle() - - val newDisplayAccounts = displayAccounts.drop(1) - getDisplayAccountsFlow.emit(newDisplayAccounts) - - advanceUntilIdle() - - assertThat(testSubject.state.value.accounts.size).isEqualTo(newDisplayAccounts.size) - assertThat(testSubject.state.value.accounts).isEqualTo(newDisplayAccounts) - assertThat(testSubject.state.value.selectedAccountId).isEqualTo(newDisplayAccounts.first().id) - } - - @Test - fun `should set selected account to null when no accounts are present`() = runTest { - val getDisplayAccountsFlow = MutableStateFlow(emptyList()) - val testSubject = createTestSubject( - displayAccountsFlow = getDisplayAccountsFlow, - ) - - advanceUntilIdle() - - assertThat(testSubject.state.value.accounts.size).isEqualTo(0) - assertThat(testSubject.state.value.selectedAccountId).isEqualTo(null) - } - - @Test - fun `should send OpenAccount effect when OnAccountClick event is received`() = runMviTest { - val displayAccounts = createDisplayAccountList(3) - val getDisplayAccountsFlow = MutableStateFlow(displayAccounts) - val testSubject = createTestSubject( - displayAccountsFlow = getDisplayAccountsFlow, - ) - val turbines = turbinesWithInitialStateCheck( - testSubject, - State( - accounts = displayAccounts.toImmutableList(), - selectedAccountId = displayAccounts.first().id, - ), - ) - - advanceUntilIdle() - - testSubject.event(Event.OnAccountClick(displayAccounts[1])) - - advanceUntilIdle() - - turbines.assertThatAndEffectTurbineConsumed { - isEqualTo(Effect.OpenAccount(displayAccounts[1].id)) - } - } - - @Test - fun `should collect display folders for selected account`() = runTest { - val displayAccounts = createDisplayAccountList(3) - val getDisplayAccountsFlow = MutableStateFlow(displayAccounts) - val displayFoldersMap = mapOf( - displayAccounts[0].id to createDisplayFolderList(3), - ) - val displayFoldersFlow = MutableStateFlow(displayFoldersMap) - val testSubject = createTestSubject( - displayAccountsFlow = getDisplayAccountsFlow, - displayFoldersFlow = displayFoldersFlow, - ) - - advanceUntilIdle() - - val displayFolders = displayFoldersMap[displayAccounts[0].id] ?: emptyList() - assertThat(testSubject.state.value.folders.size).isEqualTo(displayFolders.size) - assertThat(testSubject.state.value.folders).isEqualTo(displayFolders) - } - - @Test - fun `should collect display folders when selected account is changed`() = runTest { - val displayAccounts = createDisplayAccountList(3) - val getDisplayAccountsFlow = MutableStateFlow(displayAccounts) - val displayFoldersMap = mapOf( - displayAccounts[0].id to createDisplayFolderList(1), - displayAccounts[1].id to createDisplayFolderList(5), - displayAccounts[2].id to createDisplayFolderList(10), - ) - val displayFoldersFlow = MutableStateFlow(displayFoldersMap) - val testSubject = createTestSubject( - displayAccountsFlow = getDisplayAccountsFlow, - displayFoldersFlow = displayFoldersFlow, - ) - - advanceUntilIdle() - - testSubject.event(Event.SelectAccount(displayAccounts[1].id)) - - advanceUntilIdle() - - val displayFolders = displayFoldersMap[displayAccounts[1].id] ?: emptyList() - assertThat(testSubject.state.value.folders.size).isEqualTo(displayFolders.size) - assertThat(testSubject.state.value.folders).isEqualTo(displayFolders) - } - - @Test - fun `should emit OpenFolder effect when OnFolderClick event is received`() = runMviTest { - val displayAccounts = createDisplayAccountList(3) - val getDisplayAccountsFlow = MutableStateFlow(displayAccounts) - val displayFoldersMap = mapOf( - displayAccounts[0].id to createDisplayFolderList(3), - ) - val displayFoldersFlow = MutableStateFlow(displayFoldersMap) - val initialState = State( - accounts = displayAccounts.toImmutableList(), - selectedAccountId = displayAccounts[0].id, - folders = displayFoldersMap[displayAccounts[0].id]!!.toImmutableList(), - selectedFolderId = displayFoldersMap[displayAccounts[0].id]!![0].id, - ) - val testSubject = createTestSubject( - displayAccountsFlow = getDisplayAccountsFlow, - displayFoldersFlow = displayFoldersFlow, - ) - val turbines = turbinesWithInitialStateCheck(testSubject, initialState) - - advanceUntilIdle() - - val displayFolders = displayFoldersMap[displayAccounts[0].id] ?: emptyList() - testSubject.event(Event.OnFolderClick(displayFolders[1])) - - assertThat(turbines.awaitEffectItem()).isEqualTo( - Effect.OpenFolder( - accountId = displayFolders[1].accountId, - folderId = displayFolders[1].folder.id, - ), - ) - - turbines.assertThatAndEffectTurbineConsumed { - isEqualTo(Effect.CloseDrawer) - } - } - - @Test - fun `should emit OpenUnifiedFolder when OnFolderClick event for unified folder is received`() = - runMviTest { - val displayAccounts = createDisplayAccountList(1) - val getDisplayAccountsFlow = MutableStateFlow(displayAccounts) - val displayFoldersMap = mapOf( - displayAccounts[0].id to - createDisplayFolderList(1) + listOf(createDisplayUnifiedFolder()), - ) - val displayFoldersFlow = MutableStateFlow(displayFoldersMap) - val initialState = State( - accounts = displayAccounts.toImmutableList(), - selectedAccountId = displayAccounts[0].id, - folders = displayFoldersMap[displayAccounts[0].id]!!.toImmutableList(), - selectedFolderId = displayFoldersMap[displayAccounts[0].id]!![0].id, - ) - val testSubject = createTestSubject( - displayAccountsFlow = getDisplayAccountsFlow, - displayFoldersFlow = displayFoldersFlow, - ) - val turbines = turbinesWithInitialStateCheck(testSubject, initialState) - - advanceUntilIdle() - - val displayFolders = displayFoldersMap[displayAccounts[0].id] ?: emptyList() - testSubject.event(Event.OnFolderClick(displayFolders[1])) - - assertThat(turbines.awaitEffectItem()).isEqualTo(Effect.OpenUnifiedFolder) - - turbines.assertThatAndEffectTurbineConsumed { - isEqualTo(Effect.CloseDrawer) - } - } - - @Suppress("MaxLineLength") - @Test - fun `when initial state has drawerConfigWithAccountSelectorDisabled saveDrawerConfig should receive drawerConfigWithAccountSelectorEnabled when OnAccountSelectorClick event is received`() = runTest { - val drawerConfigWithAccountSelectorEnabled = createDrawerConfig(showAccountSelector = true) - val drawerConfigWithAccountSelectorDisabled = createDrawerConfig(showAccountSelector = false) - - val saveDrawerConfig: UseCase.SaveDrawerConfig = mock() - whenever( - saveDrawerConfig.invoke(any()), - ).thenReturn(flowOf(Unit)) - - val testSubject = createTestSubject( - initialState = State(config = drawerConfigWithAccountSelectorDisabled), - saveDrawerConfig = saveDrawerConfig, - drawerConfigFlow = flowOf(drawerConfigWithAccountSelectorDisabled), - ) - - val captor = argumentCaptor() - - testSubject.event(Event.OnAccountSelectorClick) - advanceUntilIdle() - verify(saveDrawerConfig, times(1)).invoke(captor.capture()) - assertThat(captor.firstValue).isEqualTo(drawerConfigWithAccountSelectorEnabled) - } - - @Suppress("MaxLineLength") - @Test - fun `when initial state has drawerConfigWithAccountSelectorEnabled saveDrawerConfig should receive drawerConfigWithAccountSelectorDisabled when OnAccountSelectorClick event is received`() = runTest { - val drawerConfigWithAccountSelectorEnabled = createDrawerConfig(showAccountSelector = true) - val drawerConfigWithAccountSelectorDisabled = createDrawerConfig(showAccountSelector = false) - - val saveDrawerConfig: UseCase.SaveDrawerConfig = mock() - whenever( - saveDrawerConfig.invoke(any()), - ).thenReturn(flowOf(Unit)) - - val testSubject = createTestSubject( - initialState = State(config = drawerConfigWithAccountSelectorEnabled), - saveDrawerConfig = saveDrawerConfig, - drawerConfigFlow = flowOf(drawerConfigWithAccountSelectorEnabled), - ) - - val captor = argumentCaptor() - - testSubject.event(Event.OnAccountSelectorClick) - advanceUntilIdle() - verify(saveDrawerConfig, times(1)).invoke(captor.capture()) - assertThat(captor.firstValue).isEqualTo(drawerConfigWithAccountSelectorDisabled) - } - - @Test - fun `should emit OpenManageFolders effect when OnManageFoldersClick event is received`() = runMviTest { - val testSubject = createTestSubject() - val turbines = turbinesWithInitialStateCheck(testSubject, State()) - - testSubject.event(Event.OnManageFoldersClick) - - turbines.assertThatAndEffectTurbineConsumed { - isEqualTo(Effect.OpenManageFolders) - } - } - - @Test - fun `should emit OpenSettings effect when OnSettingsClick event is received`() = runMviTest { - val testSubject = createTestSubject() - val turbines = turbinesWithInitialStateCheck(testSubject, State()) - - testSubject.event(Event.OnSettingsClick) - - turbines.assertThatAndEffectTurbineConsumed { - isEqualTo(Effect.OpenSettings) - } - } - - private fun createTestSubject( - initialState: State = State(), - drawerConfigFlow: Flow = flow { emit(createDrawerConfig()) }, - displayAccountsFlow: Flow> = flow { emit(emptyList()) }, - displayFoldersFlow: Flow>> = flow { emit(emptyMap()) }, - syncAccountFlow: Flow> = flow { emit(Result.success(Unit)) }, - syncAllAccounts: Flow> = flow { emit(Result.success(Unit)) }, - saveDrawerConfig: UseCase.SaveDrawerConfig = mock(), - ): DrawerViewModel { - return DrawerViewModel( - initialState = initialState, - getDrawerConfig = { drawerConfigFlow }, - getDisplayAccounts = { displayAccountsFlow }, - getDisplayFoldersForAccount = { accountid, _ -> - displayFoldersFlow.map { it[accountid] ?: emptyList() } - }, - syncAccount = { syncAccountFlow }, - syncAllAccounts = { syncAllAccounts }, - saveDrawerConfig = saveDrawerConfig, - ) - } - - private fun createDrawerConfig( - showUnifiedInbox: Boolean = false, - showStarredCount: Boolean = false, - showAccountSelector: Boolean = true, - ): DrawerConfig { - return DrawerConfig( - showUnifiedFolders = showUnifiedInbox, - showStarredCount = showStarredCount, - showAccountSelector = showAccountSelector, - ) - } - - private fun createDisplayAccount( - id: String = "uuid", - name: String = "name", - email: String = "test@example.com", - unreadCount: Int = 0, - starredCount: Int = 0, - ): DisplayAccount { - return DisplayAccount( - id = id, - name = name, - email = email, - color = 0, - unreadMessageCount = unreadCount, - starredMessageCount = starredCount, - ) - } - - private fun createDisplayAccountList(count: Int): List { - return List(count) { index -> - createDisplayAccount( - id = "uuid-$index", - ) - } - } - - private fun createDisplayFolder( - accountId: String = "uuid", - id: Long = 1234, - name: String = "name", - type: FolderType = FolderType.REGULAR, - unreadCount: Int = 0, - starredCount: Int = 0, - ): DisplayAccountFolder { - val folder = Folder( - id = id, - name = name, - type = type, - isLocalOnly = false, - ) - - return DisplayAccountFolder( - accountId = accountId, - folder = folder, - isInTopGroup = false, - unreadMessageCount = unreadCount, - starredMessageCount = starredCount, - ) - } - - private fun createDisplayFolderList(count: Int): List { - return List(count) { index -> - createDisplayFolder( - id = index.toLong() + 100, - ) - } - } - - private fun createDisplayUnifiedFolder( - id: String = "unified_inbox", - unifiedType: DisplayUnifiedFolderType = DisplayUnifiedFolderType.INBOX, - unreadCount: Int = 0, - starredCount: Int = 0, - ): DisplayUnifiedFolder { - return DisplayUnifiedFolder( - id = id, - unifiedType = unifiedType, - unreadMessageCount = unreadCount, - starredMessageCount = starredCount, - ) - } -} diff --git a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/FakeDrawerViewModel.kt b/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/FakeDrawerViewModel.kt deleted file mode 100644 index 7fe530fb1f6..00000000000 --- a/feature/navigation/drawer/siderail/src/test/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/FakeDrawerViewModel.kt +++ /dev/null @@ -1,11 +0,0 @@ -package net.thunderbird.feature.navigation.drawer.siderail.ui - -import app.k9mail.core.ui.compose.testing.BaseFakeViewModel -import net.thunderbird.feature.navigation.drawer.siderail.ui.DrawerContract.Effect -import net.thunderbird.feature.navigation.drawer.siderail.ui.DrawerContract.Event -import net.thunderbird.feature.navigation.drawer.siderail.ui.DrawerContract.State -import net.thunderbird.feature.navigation.drawer.siderail.ui.DrawerContract.ViewModel - -internal class FakeDrawerViewModel( - initialState: State = State(), -) : BaseFakeViewModel(initialState), ViewModel diff --git a/legacy/ui/legacy/build.gradle.kts b/legacy/ui/legacy/build.gradle.kts index e0c4ec7d75e..52eccefa9ba 100644 --- a/legacy/ui/legacy/build.gradle.kts +++ b/legacy/ui/legacy/build.gradle.kts @@ -23,7 +23,6 @@ dependencies { implementation(projects.core.ui.compose.designsystem) implementation(projects.feature.navigation.drawer.api) implementation(projects.feature.navigation.drawer.dropdown) - implementation(projects.feature.navigation.drawer.siderail) implementation(projects.feature.notification.api) // TODO: Remove AccountOauth dependency implementation(projects.feature.account.oauth) diff --git a/legacy/ui/legacy/src/main/java/com/fsck/k9/activity/MessageList.kt b/legacy/ui/legacy/src/main/java/com/fsck/k9/activity/MessageList.kt index 55ea6a9a3ed..03b9094c71b 100644 --- a/legacy/ui/legacy/src/main/java/com/fsck/k9/activity/MessageList.kt +++ b/legacy/ui/legacy/src/main/java/com/fsck/k9/activity/MessageList.kt @@ -58,8 +58,6 @@ import kotlin.getValue import net.thunderbird.core.android.account.LegacyAccount import net.thunderbird.core.android.account.LegacyAccountDto import net.thunderbird.core.android.account.LegacyAccountDtoManager -import net.thunderbird.core.featureflag.FeatureFlagKey -import net.thunderbird.core.featureflag.FeatureFlagProvider import net.thunderbird.core.logging.Logger import net.thunderbird.core.logging.legacy.Log import net.thunderbird.core.preference.GeneralSettingsManager @@ -69,7 +67,6 @@ import net.thunderbird.feature.account.storage.legacy.mapper.LegacyAccountDataMa import net.thunderbird.feature.navigation.drawer.api.NavigationDrawer import net.thunderbird.feature.navigation.drawer.dropdown.DropDownDrawer import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayAccount -import net.thunderbird.feature.navigation.drawer.siderail.SideRailDrawer import net.thunderbird.feature.search.legacy.LocalMessageSearch import net.thunderbird.feature.search.legacy.SearchAccount import net.thunderbird.feature.search.legacy.api.MessageSearchField @@ -104,7 +101,6 @@ open class MessageList : private val contactRepository: ContactRepository by inject() private val coreResourceProvider: CoreResourceProvider by inject() private val fundingManager: FundingManager by inject() - private val featureFlagProvider: FeatureFlagProvider by inject() private val logger: Logger by inject() private val legacyAccountDataMapper: LegacyAccountDataMapper by inject() @@ -629,30 +625,15 @@ open class MessageList : } private fun initializeFolderDrawer() { - featureFlagProvider.provide(FeatureFlagKey("enable_dropdown_drawer")).whenEnabledOrNot( - onEnabled = { - navigationDrawer = DropDownDrawer( - parent = this, - openAccount = { accountId -> openRealAccount(accountId) }, - openAddAccount = { launchAddAccountScreen() }, - openFolder = { accountId, folderId -> openFolder(accountId, folderId) }, - openUnifiedFolder = { openUnifiedFolders() }, - openManageFolders = { launchManageFoldersScreen() }, - openSettings = { SettingsActivity.launch(this) }, - createDrawerListener = { createDrawerListener() }, - ) - }, - onDisabledOrUnavailable = { - navigationDrawer = SideRailDrawer( - parent = this, - openAccount = { accountId -> openRealAccount(accountId) }, - openFolder = { accountId, folderId -> openFolder(accountId, folderId) }, - openUnifiedFolder = { openUnifiedFolders() }, - openManageFolders = { launchManageFoldersScreen() }, - openSettings = { SettingsActivity.launch(this) }, - createDrawerListener = { createDrawerListener() }, - ) - }, + navigationDrawer = DropDownDrawer( + parent = this, + openAccount = { accountId -> openRealAccount(accountId) }, + openAddAccount = { launchAddAccountScreen() }, + openFolder = { accountId, folderId -> openFolder(accountId, folderId) }, + openUnifiedFolder = { openUnifiedFolders() }, + openManageFolders = { launchManageFoldersScreen() }, + openSettings = { SettingsActivity.launch(this) }, + createDrawerListener = { createDrawerListener() }, ) } diff --git a/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/messagelist/KoinModule.kt b/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/messagelist/KoinModule.kt index 1251016adca..a9797da5154 100644 --- a/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/messagelist/KoinModule.kt +++ b/legacy/ui/legacy/src/main/java/com/fsck/k9/ui/messagelist/KoinModule.kt @@ -2,12 +2,11 @@ package com.fsck.k9.ui.messagelist import com.fsck.k9.ui.messagelist.debug.AuthDebugActions import net.thunderbird.feature.navigation.drawer.dropdown.navigationDropDownDrawerModule -import net.thunderbird.feature.navigation.drawer.siderail.navigationSideRailDrawerModule import org.koin.core.module.dsl.viewModel import org.koin.dsl.module val messageListUiModule = module { - includes(navigationDropDownDrawerModule, navigationSideRailDrawerModule) + includes(navigationDropDownDrawerModule) viewModel { MessageListViewModel(messageListLiveDataFactory = get(), logger = get()) } factory { DefaultFolderProvider(outboxFolderManager = get()) } diff --git a/settings.gradle.kts b/settings.gradle.kts index 1e5f1b97f25..e39595534d8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -114,7 +114,6 @@ include( include( ":feature:navigation:drawer:api", ":feature:navigation:drawer:dropdown", - ":feature:navigation:drawer:siderail", ) include(