Skip to content

Commit 0d90e8d

Browse files
Merge ItemType & ViewType together
1 parent 7dff1d1 commit 0d90e8d

File tree

1 file changed

+36
-53
lines changed

1 file changed

+36
-53
lines changed

app/src/main/java/com/infomaniak/mail/ui/main/menuDrawer/MenuDrawerAdapter.kt

+36-53
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,7 @@ import com.infomaniak.mail.databinding.ItemMenuDrawerFolderBinding
3131
import com.infomaniak.mail.databinding.ItemMenuDrawerFooterBinding
3232
import com.infomaniak.mail.databinding.ItemMenuDrawerMailboxBinding
3333
import com.infomaniak.mail.databinding.ItemMenuDrawerMailboxesHeaderBinding
34-
import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerAdapter.ItemType.DIVIDER_ITEM
35-
import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerAdapter.ItemType.EMPTY_CUSTOM_FOLDERS_ITEM
36-
import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerAdapter.ItemType.FOLDERS_HEADER_ITEM
3734
import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerAdapter.MenuDrawerViewHolder
38-
import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerAdapter.ViewType.DIVIDER_VIEW
39-
import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerAdapter.ViewType.EMPTY_FOLDERS_VIEW
40-
import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerAdapter.ViewType.FOLDERS_HEADER_VIEW
41-
import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerAdapter.ViewType.FOLDER_VIEW
42-
import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerAdapter.ViewType.FOOTER_VIEW
43-
import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerAdapter.ViewType.INVALID_MAILBOX_VIEW
44-
import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerAdapter.ViewType.MAILBOXES_HEADER_VIEW
45-
import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerAdapter.ViewType.MAILBOX_VIEW
4635
import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerFragment.MediatorContainer
4736
import com.infomaniak.mail.ui.main.menuDrawer.items.DividerItemViewHolder
4837
import com.infomaniak.mail.ui.main.menuDrawer.items.EmptyFoldersViewHolder
@@ -95,7 +84,7 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
9584
if (areMailboxesExpanded) addAll(otherMailboxes)
9685

9786
// Default Folders
98-
add(DIVIDER_ITEM)
87+
add(ItemType.DIVIDER)
9988
while (count < allFolders.count() && (allFolders[count].role != null || !allFolders[count].isRoot)) {
10089
val defaultFolder = allFolders[count]
10190
if (defaultFolder.canBeCollapsed) temporaryHasCollapsableDefaultFolder = true
@@ -104,11 +93,11 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
10493
}
10594

10695
// Custom Folders
107-
add(DIVIDER_ITEM)
108-
add(FOLDERS_HEADER_ITEM)
96+
add(ItemType.DIVIDER)
97+
add(ItemType.FOLDERS_HEADER)
10998
if (areCustomFoldersExpanded) {
11099
if (count == allFolders.count()) {
111-
add(EMPTY_CUSTOM_FOLDERS_ITEM)
100+
add(ItemType.EMPTY_FOLDERS)
112101
} else {
113102
while (count < allFolders.count()) {
114103
val customFolder = allFolders[count]
@@ -122,7 +111,7 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
122111
hasCollapsableCustomFolder = temporaryHasCollapsableCustomFolder
123112

124113
// Footer
125-
add(DIVIDER_ITEM)
114+
add(ItemType.DIVIDER)
126115
add(MenuDrawerFooter(permissions, quotas))
127116
}
128117
}
@@ -139,7 +128,7 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
139128
var newIsFound = false
140129
for (index in currentList.indices) {
141130

142-
if (getItemViewType(index) != FOLDER_VIEW.ordinal) continue
131+
if (getItemViewType(index) != ItemType.FOLDER.ordinal) continue
143132

144133
val itemId = (currentList[index] as Folder).id
145134
if (itemId == oldId) {
@@ -159,13 +148,13 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
159148

160149
override fun getItemViewType(position: Int): Int = runCatchingRealm {
161150
return@runCatchingRealm when (val item = currentList[position]) {
162-
DIVIDER_ITEM -> DIVIDER_VIEW.ordinal
163-
is MailboxesHeader -> MAILBOXES_HEADER_VIEW.ordinal
164-
is Mailbox -> if (item.isValid) MAILBOX_VIEW.ordinal else INVALID_MAILBOX_VIEW.ordinal
165-
FOLDERS_HEADER_ITEM -> FOLDERS_HEADER_VIEW.ordinal
166-
is Folder -> FOLDER_VIEW.ordinal
167-
EMPTY_CUSTOM_FOLDERS_ITEM -> EMPTY_FOLDERS_VIEW.ordinal
168-
is MenuDrawerFooter -> FOOTER_VIEW.ordinal
151+
ItemType.DIVIDER -> ItemType.DIVIDER.ordinal
152+
is MailboxesHeader -> ItemType.MAILBOXES_HEADER.ordinal
153+
is Mailbox -> if (item.isValid) ItemType.MAILBOX.ordinal else ItemType.INVALID_MAILBOX.ordinal
154+
ItemType.FOLDERS_HEADER -> ItemType.FOLDERS_HEADER.ordinal
155+
is Folder -> ItemType.FOLDER.ordinal
156+
ItemType.EMPTY_FOLDERS -> ItemType.EMPTY_FOLDERS.ordinal
157+
is MenuDrawerFooter -> ItemType.FOOTER.ordinal
169158
else -> error("Failed to find a viewType for MenuDrawer item")
170159
}
171160
}.getOrDefault(super.getItemViewType(position))
@@ -174,14 +163,14 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
174163
val inflater = LayoutInflater.from(parent.context)
175164

176165
return when (viewType) {
177-
DIVIDER_VIEW.ordinal -> DividerItemViewHolder(inflater, parent)
178-
MAILBOXES_HEADER_VIEW.ordinal -> MailboxesHeaderViewHolder(inflater, parent)
179-
MAILBOX_VIEW.ordinal -> MailboxViewHolder(inflater, parent)
180-
INVALID_MAILBOX_VIEW.ordinal -> InvalidMailboxViewHolder(inflater, parent)
181-
FOLDERS_HEADER_VIEW.ordinal -> FoldersHeaderViewHolder(inflater, parent)
182-
FOLDER_VIEW.ordinal -> FolderViewHolder(inflater, parent)
183-
EMPTY_FOLDERS_VIEW.ordinal -> EmptyFoldersViewHolder(inflater, parent)
184-
FOOTER_VIEW.ordinal -> FooterViewHolder(inflater, parent)
166+
ItemType.DIVIDER.ordinal -> DividerItemViewHolder(inflater, parent)
167+
ItemType.MAILBOXES_HEADER.ordinal -> MailboxesHeaderViewHolder(inflater, parent)
168+
ItemType.MAILBOX.ordinal -> MailboxViewHolder(inflater, parent)
169+
ItemType.INVALID_MAILBOX.ordinal -> InvalidMailboxViewHolder(inflater, parent)
170+
ItemType.FOLDERS_HEADER.ordinal -> FoldersHeaderViewHolder(inflater, parent)
171+
ItemType.FOLDER.ordinal -> FolderViewHolder(inflater, parent)
172+
ItemType.EMPTY_FOLDERS.ordinal -> EmptyFoldersViewHolder(inflater, parent)
173+
ItemType.FOOTER.ordinal -> FooterViewHolder(inflater, parent)
185174
else -> error("Failed to find a binding for MenuDrawer viewType")
186175
}
187176
}
@@ -245,21 +234,15 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
245234

246235
abstract class MenuDrawerViewHolder(val binding: ViewBinding) : ViewHolder(binding.root)
247236

248-
private enum class ItemType {
249-
DIVIDER_ITEM,
250-
FOLDERS_HEADER_ITEM,
251-
EMPTY_CUSTOM_FOLDERS_ITEM,
252-
}
253-
254-
enum class ViewType {
255-
DIVIDER_VIEW,
256-
MAILBOXES_HEADER_VIEW,
257-
MAILBOX_VIEW,
258-
INVALID_MAILBOX_VIEW,
259-
FOLDERS_HEADER_VIEW,
260-
FOLDER_VIEW,
261-
EMPTY_FOLDERS_VIEW,
262-
FOOTER_VIEW,
237+
enum class ItemType {
238+
DIVIDER,
239+
MAILBOXES_HEADER,
240+
MAILBOX,
241+
INVALID_MAILBOX,
242+
FOLDERS_HEADER,
243+
FOLDER,
244+
EMPTY_FOLDERS,
245+
FOOTER,
263246
}
264247

265248
private enum class NotifyType {
@@ -270,34 +253,34 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
270253

271254
override fun areItemsTheSame(oldItem: Any, newItem: Any) = runCatchingRealm {
272255
when (oldItem) {
273-
DIVIDER_ITEM -> newItem == DIVIDER_ITEM
256+
ItemType.DIVIDER -> newItem == ItemType.DIVIDER
274257
is MailboxesHeader -> newItem is MailboxesHeader && newItem.mailbox?.objectId == oldItem.mailbox?.objectId
275258
is Mailbox -> newItem is Mailbox && newItem.objectId == oldItem.objectId
276-
FOLDERS_HEADER_ITEM -> newItem == FOLDERS_HEADER_ITEM
259+
ItemType.FOLDERS_HEADER -> newItem == ItemType.FOLDERS_HEADER
277260
is Folder -> newItem is Folder && newItem.id == oldItem.id
278-
EMPTY_CUSTOM_FOLDERS_ITEM -> newItem == EMPTY_CUSTOM_FOLDERS_ITEM
261+
ItemType.EMPTY_FOLDERS -> newItem == ItemType.EMPTY_FOLDERS
279262
is MenuDrawerFooter -> newItem is MenuDrawerFooter
280263
else -> error("oldItem wasn't any known item type (in MenuDrawer `areItemsTheSame`)")
281264
}
282265
}.getOrDefault(false)
283266

284267
override fun areContentsTheSame(oldItem: Any, newItem: Any) = runCatchingRealm {
285268
when (oldItem) {
286-
DIVIDER_ITEM -> true
269+
ItemType.DIVIDER -> true
287270
is MailboxesHeader -> newItem is MailboxesHeader
288271
&& newItem.hasMoreThanOneMailbox == oldItem.hasMoreThanOneMailbox
289272
&& newItem.isExpanded == oldItem.isExpanded
290273
&& newItem.mailbox?.unreadCountDisplay?.count == oldItem.mailbox?.unreadCountDisplay?.count
291274
is Mailbox -> newItem is Mailbox && newItem.unreadCountDisplay.count == oldItem.unreadCountDisplay.count
292-
FOLDERS_HEADER_ITEM -> true
275+
ItemType.FOLDERS_HEADER -> true
293276
is Folder -> newItem is Folder &&
294277
newItem.name == oldItem.name &&
295278
newItem.isFavorite == oldItem.isFavorite &&
296279
newItem.path == oldItem.path &&
297280
newItem.unreadCountDisplay == oldItem.unreadCountDisplay &&
298281
newItem.threads.count() == oldItem.threads.count() &&
299282
newItem.canBeCollapsed == oldItem.canBeCollapsed
300-
EMPTY_CUSTOM_FOLDERS_ITEM -> true
283+
ItemType.EMPTY_FOLDERS -> true
301284
is MenuDrawerFooter -> newItem is MenuDrawerFooter && newItem.quotas?.size == oldItem.quotas?.size
302285
else -> error("oldItem wasn't any known item type (in MenuDrawer `areContentsTheSame`)")
303286
}

0 commit comments

Comments
 (0)