Skip to content

Commit

Permalink
Remove Folder cloning in MenuDrawer adapter
Browse files Browse the repository at this point in the history
  • Loading branch information
KevinBoulongne committed Jun 13, 2024
1 parent f8502be commit 758ceb9
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 16 deletions.
3 changes: 0 additions & 3 deletions app/src/main/java/com/infomaniak/mail/data/models/Folder.kt
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,6 @@ class Folder : RealmObject, Cloneable {
@Transient
@Ignore
var shouldDisplayIndent: Boolean = true
@Transient
@Ignore
var shouldDisplayIsSelected: Boolean = false
//endregion

private val _parents by backlinks(Folder::children)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
private inline val items: List<Any> get() = currentList

private lateinit var currentClassName: String
private var currentFolderId: String? = null
private var hasCollapsableDefaultFolder = false
private var hasCollapsableCustomFolder = false

Expand Down Expand Up @@ -120,7 +121,6 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
currentMailbox,
areMailboxesExpanded,
otherMailboxes,
currentFolder,
allFolders,
areCustomFoldersExpanded,
permissions,
Expand All @@ -142,7 +142,7 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
while (count < allFolders.count() && (allFolders[count].role != null || !allFolders[count].isRoot)) {
val defaultFolder = allFolders[count]
if (defaultFolder.canBeCollapsed) temporaryHasCollapsableDefaultFolder = true
defaultFolder.clone().apply { shouldDisplayIsSelected = id == currentFolder?.id }.also(::add)
add(defaultFolder)
count++
}

Expand All @@ -156,7 +156,7 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
while (count < allFolders.count()) {
val customFolder = allFolders[count]
if (customFolder.canBeCollapsed) temporaryHasCollapsableCustomFolder = true
customFolder.clone().apply { shouldDisplayIsSelected = id == currentFolder?.id }.also(::add)
add(customFolder)
count++
}
}
Expand All @@ -172,6 +172,24 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
submitList(items)
}

fun notifySelectedFolder(currentFolder: Folder) {

fun notifyFolder(folderId: String) {
val position = items.indexOfFirst { it is Folder && it.id == folderId }
notifyItemChanged(position)
}

val oldId = currentFolderId
val newId = currentFolder.id

if (newId != oldId) {
currentFolderId = newId

oldId?.let(::notifyFolder)
newId.let(::notifyFolder)
}
}

override fun getItemCount(): Int = runCatchingRealm { items.size }.getOrDefault(0)

override fun getItemViewType(position: Int): Int = runCatchingRealm {
Expand Down Expand Up @@ -339,7 +357,7 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH

text = folderName
icon = AppCompatResources.getDrawable(context, iconId)
setSelectedState(folder.shouldDisplayIsSelected)
setSelectedState(folder.id == currentFolderId)

when (this) {
is SelectableFolderItemView -> setIndent(folderIndent)
Expand Down Expand Up @@ -478,8 +496,7 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
newItem.threads.count() == oldItem.threads.count() &&
newItem.isHidden == oldItem.isHidden &&
newItem.canBeCollapsed == oldItem.canBeCollapsed &&
newItem.shouldDisplayDivider == oldItem.shouldDisplayDivider &&
newItem.shouldDisplayIsSelected == oldItem.shouldDisplayIsSelected
newItem.shouldDisplayDivider == oldItem.shouldDisplayDivider
ItemType.CUSTOM_FOLDERS_HEADER -> true
ItemType.EMPTY_CUSTOM_FOLDERS -> true
is MenuDrawerFooter -> newItem is MenuDrawerFooter && newItem.quotas?.size == oldItem.quotas?.size
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -276,11 +276,12 @@ class MenuDrawerFragment : Fragment() {

private fun observeAllTheThingsSheSaid() = with(mainViewModel) {

currentFolder.observeNotNull(viewLifecycleOwner, menuDrawerAdapter::notifySelectedFolder)

Utils.waitInitMediator(
currentMailbox,
menuDrawerViewModel.areMailboxesExpanded,
menuDrawerViewModel.otherMailboxesLive,
currentFolder,
currentFoldersLive,
menuDrawerViewModel.areCustomFoldersExpanded,
currentPermissionsLive,
Expand All @@ -291,11 +292,10 @@ class MenuDrawerFragment : Fragment() {
it[0] as Mailbox?,
it[1] as Boolean,
it[2] as List<Mailbox>,
it[3] as Folder?,
it[4] as List<Folder>,
it[5] as Boolean,
it[6] as MailboxPermissions?,
it[7] as Quotas?,
it[3] as List<Folder>,
it[4] as Boolean,
it[5] as MailboxPermissions?,
it[6] as Quotas?,
)
}
).observe(viewLifecycleOwner, menuDrawerAdapter::setItems)
Expand Down Expand Up @@ -327,7 +327,6 @@ class MenuDrawerFragment : Fragment() {
val currentMailbox: Mailbox?,
val areMailboxesExpanded: Boolean,
val otherMailboxes: List<Mailbox>,
val currentFolder: Folder?,
val allFolders: List<Folder>,
val areCustomFoldersExpanded: Boolean,
val permissions: MailboxPermissions?,
Expand Down

0 comments on commit 758ceb9

Please sign in to comment.