@@ -35,6 +35,7 @@ import io.realm.kotlin.serializers.RealmListKSerializer
35
35
import io.realm.kotlin.types.RealmInstant
36
36
import io.realm.kotlin.types.RealmList
37
37
import io.realm.kotlin.types.RealmObject
38
+ import io.realm.kotlin.types.annotations.Ignore
38
39
import io.realm.kotlin.types.annotations.PrimaryKey
39
40
import kotlinx.serialization.SerialName
40
41
import kotlinx.serialization.Serializable
@@ -43,7 +44,7 @@ import kotlinx.serialization.UseSerializers
43
44
import kotlin.math.max
44
45
45
46
@Serializable
46
- class Folder : RealmObject {
47
+ class Folder : RealmObject , Cloneable {
47
48
48
49
// region Remote data
49
50
@PrimaryKey
@@ -81,6 +82,14 @@ class Folder : RealmObject {
81
82
var isHidden: Boolean = false // For children only (a children Folder is hidden if its parent is collapsed)
82
83
@Transient
83
84
var isCollapsed: Boolean = false // For parents only (collapsing a parent Folder will hide its children)
85
+ @Transient
86
+ var roleOrder: Int = CUSTOM_FOLDER_ROLE_ORDER
87
+ // endregion
88
+
89
+ // region UI data (Transient & Ignore)
90
+ @Transient
91
+ @Ignore
92
+ var shouldDisplayDivider: Boolean = false
84
93
// endregion
85
94
86
95
private val _parents by backlinks(Folder ::children)
@@ -122,6 +131,7 @@ class Folder : RealmObject {
122
131
this .isHistoryComplete = isHistoryComplete
123
132
this .isHidden = isHidden
124
133
this .isCollapsed = isCollapsed
134
+ this .roleOrder = role?.order ? : CUSTOM_FOLDER_ROLE_ORDER
125
135
}
126
136
127
137
fun getLocalizedName (context : Context ): String {
@@ -137,20 +147,26 @@ class Folder : RealmObject {
137
147
138
148
override fun hashCode (): Int = id.hashCode()
139
149
150
+ /* *
151
+ * We've had a reference issue when modifying the `shouldDisplayDivider` of a Folder before sending it to the Adapter.
152
+ * Cloning it to do a deep copy resolved the issue.
153
+ */
154
+ public override fun clone () = super .clone() as Folder
155
+
140
156
enum class FolderRole (
141
157
@StringRes val folderNameRes : Int ,
142
158
@DrawableRes val folderIconRes : Int ,
143
159
val order : Int ,
144
160
val matomoValue : String ,
145
161
) {
146
- INBOX (R .string.inboxFolder, R .drawable.ic_drawer_inbox, 0 , " inboxFolder" ),
162
+ INBOX (R .string.inboxFolder, R .drawable.ic_drawer_inbox, 8 , " inboxFolder" ),
163
+ COMMERCIAL (R .string.commercialFolder, R .drawable.ic_promotions, 7 , " commercialFolder" ),
164
+ SOCIALNETWORKS (R .string.socialNetworksFolder, R .drawable.ic_social_media, 6 , " socialNetworksFolder" ),
165
+ SENT (R .string.sentFolder, R .drawable.ic_sent_messages, 5 , " sentFolder" ),
147
166
DRAFT (R .string.draftFolder, R .drawable.ic_draft, 4 , " draftFolder" ),
148
- SENT (R .string.sentFolder, R .drawable.ic_sent_messages, 3 , " sentFolder" ),
149
- SPAM (R .string.spamFolder, R .drawable.ic_spam, 5 , " spamFolder" ),
150
- TRASH (R .string.trashFolder, R .drawable.ic_bin, 6 , " trashFolder" ),
151
- ARCHIVE (R .string.archiveFolder, R .drawable.ic_archive_folder, 7 , " archiveFolder" ),
152
- COMMERCIAL (R .string.commercialFolder, R .drawable.ic_promotions, 1 , " commercialFolder" ),
153
- SOCIALNETWORKS (R .string.socialNetworksFolder, R .drawable.ic_social_media, 2 , " socialNetworksFolder" ),
167
+ SPAM (R .string.spamFolder, R .drawable.ic_spam, 3 , " spamFolder" ),
168
+ TRASH (R .string.trashFolder, R .drawable.ic_bin, 2 , " trashFolder" ),
169
+ ARCHIVE (R .string.archiveFolder, R .drawable.ic_archive_folder, 1 , " archiveFolder" ),
154
170
}
155
171
156
172
companion object {
@@ -161,5 +177,6 @@ class Folder : RealmObject {
161
177
const val DEFAULT_IS_HISTORY_COMPLETE = false
162
178
163
179
const val INBOX_FOLDER_ID = " eJzz9HPyjwAABGYBgQ--"
180
+ private const val CUSTOM_FOLDER_ROLE_ORDER = 0
164
181
}
165
182
}
0 commit comments