@@ -31,20 +31,23 @@ import com.infomaniak.mail.databinding.ItemMenuDrawerFolderBinding
31
31
import com.infomaniak.mail.databinding.ItemMenuDrawerFooterBinding
32
32
import com.infomaniak.mail.databinding.ItemMenuDrawerMailboxBinding
33
33
import com.infomaniak.mail.databinding.ItemMenuDrawerMailboxesHeaderBinding
34
- import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerAdapter.MenuDrawerItemType.DIVIDER_ITEM_VIEW_HOLDER
35
- import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerAdapter.MenuDrawerItemType.EMPTY_FOLDERS_ITEM
36
- import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerAdapter.MenuDrawerItemType.FOLDERS_HEADER_ITEM
37
- import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerAdapter.MenuDrawerItemType.FOLDER_ITEM
38
- import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerAdapter.MenuDrawerItemType.FOOTER_ITEM
39
- import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerAdapter.MenuDrawerItemType.INVALID_MAILBOX_ITEM
40
- import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerAdapter.MenuDrawerItemType.MAILBOXES_HEADER_ITEM
41
- import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerAdapter.MenuDrawerItemType.MAILBOX_ITEM
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
42
37
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
43
46
import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerFragment.MediatorContainer
44
47
import com.infomaniak.mail.ui.main.menuDrawer.items.DividerItemViewHolder
45
- import com.infomaniak.mail.ui.main.menuDrawer.items.EmptyFoldersItem
48
+ import com.infomaniak.mail.ui.main.menuDrawer.items.EmptyFoldersViewHolder
46
49
import com.infomaniak.mail.ui.main.menuDrawer.items.FolderViewHolder
47
- import com.infomaniak.mail.ui.main.menuDrawer.items.FoldersHeaderItem
50
+ import com.infomaniak.mail.ui.main.menuDrawer.items.FoldersHeaderViewHolder
48
51
import com.infomaniak.mail.ui.main.menuDrawer.items.FooterViewHolder
49
52
import com.infomaniak.mail.ui.main.menuDrawer.items.FooterViewHolder.MenuDrawerFooter
50
53
import com.infomaniak.mail.ui.main.menuDrawer.items.InvalidMailboxViewHolder
@@ -92,7 +95,7 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
92
95
if (areMailboxesExpanded) addAll(otherMailboxes)
93
96
94
97
// Default Folders
95
- add(ItemType . DIVIDER )
98
+ add(DIVIDER_ITEM )
96
99
while (count < allFolders.count() && (allFolders[count].role != null || ! allFolders[count].isRoot)) {
97
100
val defaultFolder = allFolders[count]
98
101
if (defaultFolder.canBeCollapsed) temporaryHasCollapsableDefaultFolder = true
@@ -101,11 +104,11 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
101
104
}
102
105
103
106
// Custom Folders
104
- add(ItemType . DIVIDER )
105
- add(ItemType . CUSTOM_FOLDERS_HEADER )
107
+ add(DIVIDER_ITEM )
108
+ add(FOLDERS_HEADER_ITEM )
106
109
if (areCustomFoldersExpanded) {
107
110
if (count == allFolders.count()) {
108
- add(ItemType . EMPTY_CUSTOM_FOLDERS )
111
+ add(EMPTY_CUSTOM_FOLDERS_ITEM )
109
112
} else {
110
113
while (count < allFolders.count()) {
111
114
val customFolder = allFolders[count]
@@ -119,7 +122,7 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
119
122
hasCollapsableCustomFolder = temporaryHasCollapsableCustomFolder
120
123
121
124
// Footer
122
- add(ItemType . DIVIDER )
125
+ add(DIVIDER_ITEM )
123
126
add(MenuDrawerFooter (permissions, quotas))
124
127
}
125
128
}
@@ -136,7 +139,7 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
136
139
var newIsFound = false
137
140
for (index in currentList.indices) {
138
141
139
- if (getItemViewType(index) != FOLDER_ITEM .ordinal) continue
142
+ if (getItemViewType(index) != FOLDER_VIEW .ordinal) continue
140
143
141
144
val itemId = (currentList[index] as Folder ).id
142
145
if (itemId == oldId) {
@@ -156,13 +159,13 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
156
159
157
160
override fun getItemViewType (position : Int ): Int = runCatchingRealm {
158
161
return @runCatchingRealm when (val item = currentList[position]) {
159
- is MailboxesHeader -> MAILBOXES_HEADER_ITEM .ordinal
160
- is Mailbox -> if (item.isValid) MAILBOX_ITEM .ordinal else INVALID_MAILBOX_ITEM .ordinal
161
- is Folder -> FOLDER_ITEM .ordinal
162
- ItemType . CUSTOM_FOLDERS_HEADER -> FOLDERS_HEADER_ITEM .ordinal
163
- ItemType . EMPTY_CUSTOM_FOLDERS -> EMPTY_FOLDERS_ITEM .ordinal
164
- is MenuDrawerFooter -> FOOTER_ITEM .ordinal
165
- ItemType . DIVIDER -> DIVIDER_ITEM_VIEW_HOLDER .ordinal
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
166
169
else -> error(" Failed to find a viewType for MenuDrawer item" )
167
170
}
168
171
}.getOrDefault(super .getItemViewType(position))
@@ -171,14 +174,14 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
171
174
val inflater = LayoutInflater .from(parent.context)
172
175
173
176
return when (viewType) {
174
- MAILBOXES_HEADER_ITEM .ordinal -> MailboxesHeaderViewHolder (inflater, parent)
175
- MAILBOX_ITEM .ordinal -> MailboxViewHolder (inflater, parent)
176
- INVALID_MAILBOX_ITEM .ordinal -> InvalidMailboxViewHolder (inflater, parent)
177
- FOLDER_ITEM .ordinal -> FolderViewHolder (inflater, parent)
178
- FOLDERS_HEADER_ITEM .ordinal -> FoldersHeaderItem (inflater, parent)
179
- EMPTY_FOLDERS_ITEM .ordinal -> EmptyFoldersItem (inflater, parent)
180
- FOOTER_ITEM .ordinal -> FooterViewHolder (inflater, parent)
181
- DIVIDER_ITEM_VIEW_HOLDER .ordinal -> DividerItemViewHolder (inflater, parent)
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)
182
185
else -> error(" Failed to find a binding for MenuDrawer viewType" )
183
186
}
184
187
}
@@ -214,6 +217,11 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
214
217
onLockedMailboxClicked = callbacks.onLockedMailboxClicked,
215
218
onInvalidPasswordMailboxClicked = callbacks.onInvalidPasswordMailboxClicked,
216
219
)
220
+ is FoldersHeaderViewHolder -> holder.displayFoldersHeader(
221
+ binding = this as ItemMenuDrawerCustomFoldersHeaderBinding ,
222
+ onFoldersHeaderClicked = callbacks.onFoldersHeaderClicked,
223
+ onCreateFolderClicked = callbacks.onCreateFolderClicked,
224
+ )
217
225
is FolderViewHolder -> holder.displayFolder(
218
226
folder = item as Folder ,
219
227
binding = this as ItemMenuDrawerFolderBinding ,
@@ -222,11 +230,6 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
222
230
onFolderClicked = callbacks.onFolderClicked,
223
231
onCollapseChildrenClicked = callbacks.onCollapseChildrenClicked,
224
232
)
225
- is FoldersHeaderItem -> holder.displayCustomFoldersHeader(
226
- binding = this as ItemMenuDrawerCustomFoldersHeaderBinding ,
227
- onCustomFoldersHeaderClicked = callbacks.onCustomFoldersHeaderClicked,
228
- onCreateFolderClicked = callbacks.onCreateFolderClicked,
229
- )
230
233
is FooterViewHolder -> holder.displayFooter(
231
234
footer = item as MenuDrawerFooter ,
232
235
binding = this as ItemMenuDrawerFooterBinding ,
@@ -242,60 +245,60 @@ class MenuDrawerAdapter @Inject constructor() : ListAdapter<Any, MenuDrawerViewH
242
245
243
246
abstract class MenuDrawerViewHolder (val binding : ViewBinding ) : ViewHolder(binding.root)
244
247
248
+ enum class ViewType {
249
+ DIVIDER_VIEW ,
250
+ MAILBOXES_HEADER_VIEW ,
251
+ MAILBOX_VIEW ,
252
+ INVALID_MAILBOX_VIEW ,
253
+ FOLDERS_HEADER_VIEW ,
254
+ FOLDER_VIEW ,
255
+ EMPTY_FOLDERS_VIEW ,
256
+ FOOTER_VIEW ,
257
+ }
258
+
245
259
private enum class ItemType {
246
- CUSTOM_FOLDERS_HEADER ,
247
- EMPTY_CUSTOM_FOLDERS ,
248
- DIVIDER ,
260
+ DIVIDER_ITEM ,
261
+ FOLDERS_HEADER_ITEM ,
262
+ EMPTY_CUSTOM_FOLDERS_ITEM ,
249
263
}
250
264
251
265
private enum class NotifyType {
252
266
MAILBOXES_HEADER_CLICKED ,
253
267
}
254
268
255
- enum class MenuDrawerItemType {
256
- MAILBOXES_HEADER_ITEM ,
257
- MAILBOX_ITEM ,
258
- INVALID_MAILBOX_ITEM ,
259
- FOLDER_ITEM ,
260
- FOLDERS_HEADER_ITEM ,
261
- EMPTY_FOLDERS_ITEM ,
262
- FOOTER_ITEM ,
263
- DIVIDER_ITEM_VIEW_HOLDER ,
264
- }
265
-
266
269
private class FolderDiffCallback : DiffUtil .ItemCallback <Any >() {
267
270
268
271
override fun areItemsTheSame (oldItem : Any , newItem : Any ) = runCatchingRealm {
269
272
when (oldItem) {
273
+ DIVIDER_ITEM -> newItem == DIVIDER_ITEM
270
274
is MailboxesHeader -> newItem is MailboxesHeader && newItem.mailbox?.objectId == oldItem.mailbox?.objectId
271
275
is Mailbox -> newItem is Mailbox && newItem.objectId == oldItem.objectId
276
+ FOLDERS_HEADER_ITEM -> newItem == FOLDERS_HEADER_ITEM
272
277
is Folder -> newItem is Folder && newItem.id == oldItem.id
273
- ItemType .CUSTOM_FOLDERS_HEADER -> newItem == ItemType .CUSTOM_FOLDERS_HEADER
274
- ItemType .EMPTY_CUSTOM_FOLDERS -> newItem == ItemType .EMPTY_CUSTOM_FOLDERS
278
+ EMPTY_CUSTOM_FOLDERS_ITEM -> newItem == EMPTY_CUSTOM_FOLDERS_ITEM
275
279
is MenuDrawerFooter -> newItem is MenuDrawerFooter
276
- ItemType .DIVIDER -> newItem == ItemType .DIVIDER
277
280
else -> error(" oldItem wasn't any known item type (in MenuDrawer `areItemsTheSame`)" )
278
281
}
279
282
}.getOrDefault(false )
280
283
281
284
override fun areContentsTheSame (oldItem : Any , newItem : Any ) = runCatchingRealm {
282
285
when (oldItem) {
286
+ DIVIDER_ITEM -> true
283
287
is MailboxesHeader -> newItem is MailboxesHeader
284
288
&& newItem.hasMoreThanOneMailbox == oldItem.hasMoreThanOneMailbox
285
289
&& newItem.isExpanded == oldItem.isExpanded
286
290
&& newItem.mailbox?.unreadCountDisplay?.count == oldItem.mailbox?.unreadCountDisplay?.count
287
291
is Mailbox -> newItem is Mailbox && newItem.unreadCountDisplay.count == oldItem.unreadCountDisplay.count
292
+ FOLDERS_HEADER_ITEM -> true
288
293
is Folder -> newItem is Folder &&
289
294
newItem.name == oldItem.name &&
290
295
newItem.isFavorite == oldItem.isFavorite &&
291
296
newItem.path == oldItem.path &&
292
297
newItem.unreadCountDisplay == oldItem.unreadCountDisplay &&
293
298
newItem.threads.count() == oldItem.threads.count() &&
294
299
newItem.canBeCollapsed == oldItem.canBeCollapsed
295
- ItemType .CUSTOM_FOLDERS_HEADER -> true
296
- ItemType .EMPTY_CUSTOM_FOLDERS -> true
300
+ EMPTY_CUSTOM_FOLDERS_ITEM -> true
297
301
is MenuDrawerFooter -> newItem is MenuDrawerFooter && newItem.quotas?.size == oldItem.quotas?.size
298
- ItemType .DIVIDER -> false
299
302
else -> error(" oldItem wasn't any known item type (in MenuDrawer `areContentsTheSame`)" )
300
303
}
301
304
}.getOrDefault(false )
0 commit comments