diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/MailDisplayFolder.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/MailDisplayFolder.kt index 4e5856b26ec..f01231ce864 100644 --- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/MailDisplayFolder.kt +++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/MailDisplayFolder.kt @@ -4,14 +4,14 @@ import net.thunderbird.feature.mail.folder.api.Folder import net.thunderbird.feature.mail.folder.api.FolderPathDelimiter internal data class MailDisplayFolder( - val accountId: String, + val accountId: String?, val folder: Folder, val isInTopGroup: Boolean, override val unreadMessageCount: Int, override val starredMessageCount: Int, override val pathDelimiter: FolderPathDelimiter, ) : DisplayFolder { - override val id: String = createMailDisplayAccountFolderId(accountId, folder.id) + override val id: String = createMailDisplayAccountFolderId(accountId.orEmpty(), folder.id) } fun createMailDisplayAccountFolderId(accountId: String, folderId: Long): String { diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolder.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolder.kt index c48f45dd60d..3329ff7a697 100644 --- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolder.kt +++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolder.kt @@ -101,7 +101,7 @@ internal class GetDisplayTreeFolder( private fun createPlaceholderFolder(name: String, pathDelimiter: FolderPathDelimiter): MailDisplayFolder { placeholderCounter += 1 return MailDisplayFolder( - accountId = "placeholder", + accountId = null, folder = Folder( id = placeholderCounter, name = name, diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewModel.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewModel.kt index 793e71437e5..c81ab049921 100644 --- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewModel.kt +++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewModel.kt @@ -240,12 +240,14 @@ internal class DrawerViewModel( selectFolder(folder.id) if (folder is MailDisplayFolder) { - emitEffect( - Effect.OpenFolder( - accountId = folder.accountId, - folderId = folder.folder.id, - ), - ) + if (folder.accountId != null) { + emitEffect( + Effect.OpenFolder( + accountId = folder.accountId, + folderId = folder.folder.id, + ), + ) + } } else if (folder is UnifiedDisplayFolder) { emitEffect(Effect.OpenUnifiedFolder) } diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItem.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItem.kt index a60e2072a8e..7e9ff0ee38f 100644 --- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItem.kt +++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItem.kt @@ -76,13 +76,14 @@ internal fun FolderListItem( ) }, selected = selectedFolderId == displayFolder.id, - onClick = { onClick(displayFolder) }, - modifier = Modifier.fillMaxWidth(), - icon = { - Icon( - imageVector = mapFolderIcon(displayFolder), - ) + onClick = { + when (displayFolder) { + is MailDisplayFolder if displayFolder.accountId == null -> isExpanded.value = !isExpanded.value + else -> onClick(displayFolder) + } }, + modifier = Modifier.fillMaxWidth(), + icon = { Icon(imageVector = mapFolderIcon(displayFolder)) }, ) // Managing children diff --git a/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolderTest.kt b/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolderTest.kt index adff0fc25e1..91352f4f55d 100644 --- a/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolderTest.kt +++ b/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolderTest.kt @@ -202,7 +202,7 @@ class GetDisplayTreeFolderTest { children = persistentListOf( DisplayTreeFolder( displayFolder = MailDisplayFolder( - accountId = "placeholder", + accountId = null, folder = Folder( id = 1L, name = "(Unnamed)/(Unnamed)", @@ -243,7 +243,7 @@ class GetDisplayTreeFolderTest { ), DisplayTreeFolder( displayFolder = MailDisplayFolder( - accountId = "placeholder", + accountId = null, folder = Folder(id = 2, name = "valid1", type = FolderType.REGULAR, isLocalOnly = false), isInTopGroup = true, unreadMessageCount = 0, @@ -256,7 +256,7 @@ class GetDisplayTreeFolderTest { children = persistentListOf( DisplayTreeFolder( displayFolder = MailDisplayFolder( - accountId = "placeholder", + accountId = null, folder = Folder( id = 3L, name = "valid1/(Unnamed)", @@ -329,7 +329,7 @@ class GetDisplayTreeFolderTest { children = persistentListOf( createDisplayTreeFolder( displayFolder = createDisplayAccountFolder( - accountId = "placeholder", + accountId = null, folderId = 1L, folderName = "folderLevel1", unreadMessageCount = 0, @@ -388,7 +388,7 @@ class GetDisplayTreeFolderTest { children = persistentListOf( createDisplayTreeFolder( displayFolder = createDisplayAccountFolder( - accountId = "placeholder", + accountId = null, folderId = 1, folderName = "level1", unreadMessageCount = 0, @@ -400,7 +400,7 @@ class GetDisplayTreeFolderTest { children = persistentListOf( createDisplayTreeFolder( displayFolder = createDisplayAccountFolder( - accountId = "placeholder", + accountId = null, folderId = 2L, folderName = "level1/level2", unreadMessageCount = 0, @@ -438,7 +438,7 @@ class GetDisplayTreeFolderTest { folderName: String, unreadMessageCount: Int, starredMessageCount: Int, - accountId: String = "accountId", + accountId: String? = "accountId", ): MailDisplayFolder { return MailDisplayFolder( accountId = accountId, diff --git a/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewModelTest.kt b/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewModelTest.kt index 28b075b8e12..58d0b17399a 100644 --- a/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewModelTest.kt +++ b/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewModelTest.kt @@ -334,7 +334,7 @@ internal class DrawerViewModelTest { assertThat(turbines.awaitEffectItem()).isEqualTo( Effect.OpenFolder( - accountId = displayFolders[1].accountId, + accountId = requireNotNull(displayFolders[1].accountId), folderId = displayFolders[1].folder.id, ), )