Skip to content

Commit dc38c72

Browse files
committed
Merge pull request #9716 from rafaeltonholo/fix/9644/crash-when-open-placeholder-folder
fix(drawer): crash when opening placeholder folder
1 parent 88baee0 commit dc38c72

File tree

6 files changed

+26
-23
lines changed

6 files changed

+26
-23
lines changed

feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/MailDisplayFolder.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import net.thunderbird.feature.mail.folder.api.Folder
44
import net.thunderbird.feature.mail.folder.api.FolderPathDelimiter
55

66
internal data class MailDisplayFolder(
7-
val accountId: String,
7+
val accountId: String?,
88
val folder: Folder,
99
val isInTopGroup: Boolean,
1010
override val unreadMessageCount: Int,
1111
override val starredMessageCount: Int,
1212
override val pathDelimiter: FolderPathDelimiter,
1313
) : DisplayFolder {
14-
override val id: String = createMailDisplayAccountFolderId(accountId, folder.id)
14+
override val id: String = createMailDisplayAccountFolderId(accountId.orEmpty(), folder.id)
1515
}
1616

1717
fun createMailDisplayAccountFolderId(accountId: String, folderId: Long): String {

feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ internal class GetDisplayTreeFolder(
101101
private fun createPlaceholderFolder(name: String, pathDelimiter: FolderPathDelimiter): MailDisplayFolder {
102102
placeholderCounter += 1
103103
return MailDisplayFolder(
104-
accountId = "placeholder",
104+
accountId = null,
105105
folder = Folder(
106106
id = placeholderCounter,
107107
name = name,

feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewModel.kt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -240,12 +240,14 @@ internal class DrawerViewModel(
240240
selectFolder(folder.id)
241241

242242
if (folder is MailDisplayFolder) {
243-
emitEffect(
244-
Effect.OpenFolder(
245-
accountId = folder.accountId,
246-
folderId = folder.folder.id,
247-
),
248-
)
243+
if (folder.accountId != null) {
244+
emitEffect(
245+
Effect.OpenFolder(
246+
accountId = folder.accountId,
247+
folderId = folder.folder.id,
248+
),
249+
)
250+
}
249251
} else if (folder is UnifiedDisplayFolder) {
250252
emitEffect(Effect.OpenUnifiedFolder)
251253
}

feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItem.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,14 @@ internal fun FolderListItem(
7676
)
7777
},
7878
selected = selectedFolderId == displayFolder.id,
79-
onClick = { onClick(displayFolder) },
80-
modifier = Modifier.fillMaxWidth(),
81-
icon = {
82-
Icon(
83-
imageVector = mapFolderIcon(displayFolder),
84-
)
79+
onClick = {
80+
when (displayFolder) {
81+
is MailDisplayFolder if displayFolder.accountId == null -> isExpanded.value = !isExpanded.value
82+
else -> onClick(displayFolder)
83+
}
8584
},
85+
modifier = Modifier.fillMaxWidth(),
86+
icon = { Icon(imageVector = mapFolderIcon(displayFolder)) },
8687
)
8788

8889
// Managing children

feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolderTest.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ class GetDisplayTreeFolderTest {
202202
children = persistentListOf(
203203
DisplayTreeFolder(
204204
displayFolder = MailDisplayFolder(
205-
accountId = "placeholder",
205+
accountId = null,
206206
folder = Folder(
207207
id = 1L,
208208
name = "(Unnamed)/(Unnamed)",
@@ -243,7 +243,7 @@ class GetDisplayTreeFolderTest {
243243
),
244244
DisplayTreeFolder(
245245
displayFolder = MailDisplayFolder(
246-
accountId = "placeholder",
246+
accountId = null,
247247
folder = Folder(id = 2, name = "valid1", type = FolderType.REGULAR, isLocalOnly = false),
248248
isInTopGroup = true,
249249
unreadMessageCount = 0,
@@ -256,7 +256,7 @@ class GetDisplayTreeFolderTest {
256256
children = persistentListOf(
257257
DisplayTreeFolder(
258258
displayFolder = MailDisplayFolder(
259-
accountId = "placeholder",
259+
accountId = null,
260260
folder = Folder(
261261
id = 3L,
262262
name = "valid1/(Unnamed)",
@@ -329,7 +329,7 @@ class GetDisplayTreeFolderTest {
329329
children = persistentListOf(
330330
createDisplayTreeFolder(
331331
displayFolder = createDisplayAccountFolder(
332-
accountId = "placeholder",
332+
accountId = null,
333333
folderId = 1L,
334334
folderName = "folderLevel1",
335335
unreadMessageCount = 0,
@@ -388,7 +388,7 @@ class GetDisplayTreeFolderTest {
388388
children = persistentListOf(
389389
createDisplayTreeFolder(
390390
displayFolder = createDisplayAccountFolder(
391-
accountId = "placeholder",
391+
accountId = null,
392392
folderId = 1,
393393
folderName = "level1",
394394
unreadMessageCount = 0,
@@ -400,7 +400,7 @@ class GetDisplayTreeFolderTest {
400400
children = persistentListOf(
401401
createDisplayTreeFolder(
402402
displayFolder = createDisplayAccountFolder(
403-
accountId = "placeholder",
403+
accountId = null,
404404
folderId = 2L,
405405
folderName = "level1/level2",
406406
unreadMessageCount = 0,
@@ -438,7 +438,7 @@ class GetDisplayTreeFolderTest {
438438
folderName: String,
439439
unreadMessageCount: Int,
440440
starredMessageCount: Int,
441-
accountId: String = "accountId",
441+
accountId: String? = "accountId",
442442
): MailDisplayFolder {
443443
return MailDisplayFolder(
444444
accountId = accountId,

feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewModelTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ internal class DrawerViewModelTest {
334334

335335
assertThat(turbines.awaitEffectItem()).isEqualTo(
336336
Effect.OpenFolder(
337-
accountId = displayFolders[1].accountId,
337+
accountId = requireNotNull(displayFolders[1].accountId),
338338
folderId = displayFolders[1].folder.id,
339339
),
340340
)

0 commit comments

Comments
 (0)