Skip to content

Commit 924eff7

Browse files
Merge pull request #1898 from Infomaniak/move-files
Rename & move packages
2 parents 6cf6a4f + 662e573 commit 924eff7

File tree

55 files changed

+270
-258
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+270
-258
lines changed

app/src/main/java/com/infomaniak/mail/data/cache/RealmDatabase.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ object RealmDatabase {
162162
//region Configurations versions
163163
const val USER_INFO_SCHEMA_VERSION = 1L
164164
const val MAILBOX_INFO_SCHEMA_VERSION = 5L
165-
const val MAILBOX_CONTENT_SCHEMA_VERSION = 13L
165+
const val MAILBOX_CONTENT_SCHEMA_VERSION = 14L
166166
//endregion
167167

168168
//region Configurations names

app/src/main/java/com/infomaniak/mail/data/cache/mailboxContent/FolderController.kt

+14-3
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ class FolderController @Inject constructor(
4545
) {
4646

4747
//region Get data
48-
fun getCustomFolders(): RealmResults<Folder> {
49-
return getCustomFoldersQuery(mailboxContentRealm()).find()
48+
fun getMoveFolders(): RealmResults<Folder> {
49+
return getMoveFoldersQuery(mailboxContentRealm()).find()
5050
}
5151

5252
fun getRootsFoldersAsync(): Flow<ResultsChange<Folder>> {
@@ -147,7 +147,9 @@ class FolderController @Inject constructor(
147147

148148
private fun getDefaultFoldersQuery(realm: TypedRealm): RealmQuery<Folder> {
149149
val hasRole = "${Folder.rolePropertyName} != nil"
150-
return realm.query("$isNotSearch AND $hasRole")
150+
return realm
151+
.query<Folder>("$isNotSearch AND $hasRole")
152+
.sort(Folder::roleOrder.name, Sort.DESCENDING)
151153
}
152154

153155
private fun getCustomFoldersQuery(realm: TypedRealm): RealmQuery<Folder> {
@@ -162,6 +164,15 @@ class FolderController @Inject constructor(
162164
return realm.query("NOT ${Folder::id.name} IN $0 AND $isNotSearch", exceptionsFoldersIds)
163165
}
164166

167+
private fun getMoveFoldersQuery(realm: TypedRealm): RealmQuery<Folder> {
168+
val isNotDraft = "${Folder.rolePropertyName} != '${FolderRole.DRAFT.name}'"
169+
return realm
170+
.query<Folder>("$isNotSearch AND $isRootFolder AND $isNotDraft")
171+
.sort(Folder::name.name, Sort.ASCENDING)
172+
.sort(Folder::isFavorite.name, Sort.DESCENDING)
173+
.sort(Folder::roleOrder.name, Sort.DESCENDING)
174+
}
175+
165176
private fun getFolderQuery(key: String, value: String, realm: TypedRealm): RealmSingleQuery<Folder> {
166177
return realm.query<Folder>("$key == $0", value).first()
167178
}

app/src/main/java/com/infomaniak/mail/data/models/Folder.kt

+25-8
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import io.realm.kotlin.serializers.RealmListKSerializer
3535
import io.realm.kotlin.types.RealmInstant
3636
import io.realm.kotlin.types.RealmList
3737
import io.realm.kotlin.types.RealmObject
38+
import io.realm.kotlin.types.annotations.Ignore
3839
import io.realm.kotlin.types.annotations.PrimaryKey
3940
import kotlinx.serialization.SerialName
4041
import kotlinx.serialization.Serializable
@@ -43,7 +44,7 @@ import kotlinx.serialization.UseSerializers
4344
import kotlin.math.max
4445

4546
@Serializable
46-
class Folder : RealmObject {
47+
class Folder : RealmObject, Cloneable {
4748

4849
//region Remote data
4950
@PrimaryKey
@@ -81,6 +82,14 @@ class Folder : RealmObject {
8182
var isHidden: Boolean = false // For children only (a children Folder is hidden if its parent is collapsed)
8283
@Transient
8384
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
8493
//endregion
8594

8695
private val _parents by backlinks(Folder::children)
@@ -122,6 +131,7 @@ class Folder : RealmObject {
122131
this.isHistoryComplete = isHistoryComplete
123132
this.isHidden = isHidden
124133
this.isCollapsed = isCollapsed
134+
this.roleOrder = role?.order ?: CUSTOM_FOLDER_ROLE_ORDER
125135
}
126136

127137
fun getLocalizedName(context: Context): String {
@@ -137,20 +147,26 @@ class Folder : RealmObject {
137147

138148
override fun hashCode(): Int = id.hashCode()
139149

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+
140156
enum class FolderRole(
141157
@StringRes val folderNameRes: Int,
142158
@DrawableRes val folderIconRes: Int,
143159
val order: Int,
144160
val matomoValue: String,
145161
) {
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"),
147166
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"),
154170
}
155171

156172
companion object {
@@ -161,5 +177,6 @@ class Folder : RealmObject {
161177
const val DEFAULT_IS_HISTORY_COMPLETE = false
162178

163179
const val INBOX_FOLDER_ID = "eJzz9HPyjwAABGYBgQ--"
180+
private const val CUSTOM_FOLDER_ROLE_ORDER = 0
164181
}
165182
}

app/src/main/java/com/infomaniak/mail/ui/MainActivity.kt

+1-5
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,9 @@ import com.infomaniak.mail.data.models.draft.Draft.DraftAction
6262
import com.infomaniak.mail.databinding.ActivityMainBinding
6363
import com.infomaniak.mail.firebase.RegisterFirebaseBroadcastReceiver
6464
import com.infomaniak.mail.ui.alertDialogs.DescriptionAlertDialog
65-
import com.infomaniak.mail.ui.alertDialogs.TitleAlertDialog
6665
import com.infomaniak.mail.ui.main.SnackbarManager
6766
import com.infomaniak.mail.ui.main.folder.TwoPaneFragment
68-
import com.infomaniak.mail.ui.main.menu.MenuDrawerFragment
67+
import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerFragment
6968
import com.infomaniak.mail.ui.main.onboarding.PermissionsOnboardingPagerFragment
7069
import com.infomaniak.mail.ui.main.search.SearchFragmentArgs
7170
import com.infomaniak.mail.ui.newMessage.NewMessageActivity
@@ -139,9 +138,6 @@ class MainActivity : BaseActivity() {
139138
@Inject
140139
lateinit var descriptionDialog: DescriptionAlertDialog
141140

142-
@Inject
143-
lateinit var titleDialog: TitleAlertDialog
144-
145141
@Inject
146142
lateinit var permissionUtils: PermissionUtils
147143

app/src/main/java/com/infomaniak/mail/ui/MainViewModel.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -138,12 +138,12 @@ class MainViewModel @Inject constructor(
138138
}.asLiveData(ioCoroutineContext)
139139

140140
val currentDefaultFoldersLive = _currentMailboxObjectId.flatMapLatest { objectId ->
141-
objectId?.let { folderController.getDefaultFoldersAsync().map { it.list.getDefaultMenuFolders() } } ?: emptyFlow()
141+
objectId?.let { folderController.getDefaultFoldersAsync().map { it.list.flattenFolderChildren() } } ?: emptyFlow()
142142
}.asLiveData(ioCoroutineContext)
143143

144144
val currentCustomFoldersLive = _currentMailboxObjectId.flatMapLatest { objectId ->
145145
objectId
146-
?.let { folderController.getCustomFoldersAsync().map { it.list.getCustomMenuFolders(dismissHiddenChildren = true) } }
146+
?.let { folderController.getCustomFoldersAsync().map { it.list.flattenFolderChildren(dismissHiddenChildren = true) } }
147147
?: emptyFlow()
148148
}.asLiveData(ioCoroutineContext)
149149

app/src/main/java/com/infomaniak/mail/ui/main/MailboxListFragment.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import com.infomaniak.lib.core.utils.safeNavigate
2323
import com.infomaniak.mail.R
2424
import com.infomaniak.mail.data.models.mailbox.Mailbox
2525
import com.infomaniak.mail.ui.bottomSheetDialogs.LockedMailboxBottomSheetDialogArgs
26-
import com.infomaniak.mail.ui.main.menu.MailboxesAdapter
26+
import com.infomaniak.mail.ui.main.menuDrawer.MailboxesAdapter
2727
import com.infomaniak.mail.utils.AccountUtils
2828
import kotlinx.coroutines.launch
2929

@@ -49,7 +49,7 @@ interface MailboxListFragment {
4949
)
5050
}
5151

52-
fun Fragment.onValidMailboxClicked(mailboxId: Int) {
53-
lifecycleScope.launch { AccountUtils.switchToMailbox(mailboxId) }
52+
fun Fragment.onValidMailboxClicked(mailboxId: Int) = lifecycleScope.launch {
53+
AccountUtils.switchToMailbox(mailboxId)
5454
}
5555
}

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

+7-7
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* You should have received a copy of the GNU General Public License
1616
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
*/
18-
package com.infomaniak.mail.ui.main.menu
18+
package com.infomaniak.mail.ui.main.menuDrawer
1919

2020
import android.view.LayoutInflater
2121
import android.view.View.OnClickListener
@@ -29,9 +29,9 @@ import com.infomaniak.mail.MatomoMail.trackMenuDrawerEvent
2929
import com.infomaniak.mail.R
3030
import com.infomaniak.mail.data.models.mailbox.Mailbox
3131
import com.infomaniak.mail.databinding.ItemInvalidMailboxBinding
32-
import com.infomaniak.mail.databinding.ItemMailboxMenuDrawerBinding
32+
import com.infomaniak.mail.databinding.ItemMenuDrawerMailboxBinding
3333
import com.infomaniak.mail.databinding.ItemSelectableMailboxBinding
34-
import com.infomaniak.mail.ui.main.menu.MailboxesAdapter.MailboxesViewHolder
34+
import com.infomaniak.mail.ui.main.menuDrawer.MailboxesAdapter.MailboxesViewHolder
3535
import com.infomaniak.mail.utils.AccountUtils
3636
import com.infomaniak.mail.utils.Utils.runCatchingRealm
3737
import com.infomaniak.mail.views.itemViews.DecoratedItemView.SelectionStyle
@@ -50,7 +50,7 @@ class MailboxesAdapter(
5050
val layoutInflater = LayoutInflater.from(parent.context)
5151
val binding = when (viewType) {
5252
DisplayType.SIMPLE_MAILBOX.layout -> ItemSelectableMailboxBinding.inflate(layoutInflater, parent, false)
53-
DisplayType.MENU_DRAWER_MAILBOX.layout -> ItemMailboxMenuDrawerBinding.inflate(layoutInflater, parent, false)
53+
DisplayType.MENU_DRAWER_MAILBOX.layout -> ItemMenuDrawerMailboxBinding.inflate(layoutInflater, parent, false)
5454
else -> ItemInvalidMailboxBinding.inflate(layoutInflater, parent, false)
5555
}
5656

@@ -67,7 +67,7 @@ class MailboxesAdapter(
6767
(this as ItemSelectableMailboxBinding).displaySimpleMailbox(mailbox, isCurrentMailbox)
6868
}
6969
DisplayType.MENU_DRAWER_MAILBOX.layout -> {
70-
(this as ItemMailboxMenuDrawerBinding).displayMenuDrawerMailbox(mailbox, isCurrentMailbox)
70+
(this as ItemMenuDrawerMailboxBinding).displayMenuDrawerMailbox(mailbox, isCurrentMailbox)
7171
}
7272
DisplayType.INVALID_MAILBOX.layout -> (this as ItemInvalidMailboxBinding).displayInvalidMailbox(mailbox)
7373
}
@@ -94,7 +94,7 @@ class MailboxesAdapter(
9494
setSelectedState(isCurrentMailbox)
9595
}
9696

97-
private fun ItemMailboxMenuDrawerBinding.displayMenuDrawerMailbox(mailbox: Mailbox, isCurrentMailbox: Boolean) = with(root) {
97+
private fun ItemMenuDrawerMailboxBinding.displayMenuDrawerMailbox(mailbox: Mailbox, isCurrentMailbox: Boolean) = with(root) {
9898
displayValidMailbox(mailbox, isCurrentMailbox) { context.trackMenuDrawerEvent(SWITCH_MAILBOX_NAME) }
9999

100100
unreadCount = mailbox.unreadCountDisplay.count
@@ -141,7 +141,7 @@ class MailboxesAdapter(
141141

142142
private enum class DisplayType(val layout: Int) {
143143
INVALID_MAILBOX(R.layout.item_invalid_mailbox),
144-
MENU_DRAWER_MAILBOX(R.layout.item_mailbox_menu_drawer),
144+
MENU_DRAWER_MAILBOX(R.layout.item_menu_drawer_mailbox),
145145
SIMPLE_MAILBOX(R.layout.item_selectable_mailbox),
146146
}
147147

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* You should have received a copy of the GNU General Public License
1616
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
*/
18-
package com.infomaniak.mail.ui.main.menu
18+
package com.infomaniak.mail.ui.main.menuDrawer
1919

2020
import android.content.Context
2121
import android.util.AttributeSet

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* You should have received a copy of the GNU General Public License
1616
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
*/
18-
package com.infomaniak.mail.ui.main.menu
18+
package com.infomaniak.mail.ui.main.menuDrawer
1919

2020
import android.annotation.SuppressLint
2121
import android.content.Intent

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* You should have received a copy of the GNU General Public License
1616
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
*/
18-
package com.infomaniak.mail.ui.main.menu
18+
package com.infomaniak.mail.ui.main.menuDrawer
1919

2020
import androidx.lifecycle.ViewModel
2121
import androidx.lifecycle.asLiveData

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* You should have received a copy of the GNU General Public License
1616
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
*/
18-
package com.infomaniak.mail.ui.main.menu
18+
package com.infomaniak.mail.ui.main.menuDrawer
1919

2020
import android.os.Bundle
2121
import android.view.View
@@ -26,6 +26,7 @@ import com.infomaniak.mail.R
2626
import com.infomaniak.mail.data.cache.mailboxContent.FolderController
2727
import com.infomaniak.mail.ui.MainViewModel
2828
import com.infomaniak.mail.ui.alertDialogs.InputAlertDialog
29+
import com.infomaniak.mail.ui.main.move.FolderAdapter
2930
import com.infomaniak.mail.utils.extensions.bindAlertToViewLifecycle
3031
import dagger.hilt.android.AndroidEntryPoint
3132
import javax.inject.Inject

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* You should have received a copy of the GNU General Public License
1616
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
*/
18-
package com.infomaniak.mail.ui.main.menu
18+
package com.infomaniak.mail.ui.main.menuDrawer
1919

2020
import android.os.Bundle
2121
import android.view.LayoutInflater

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* You should have received a copy of the GNU General Public License
1616
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
*/
18-
package com.infomaniak.mail.ui.main.menu
18+
package com.infomaniak.mail.ui.main.menuDrawer
1919

2020
import androidx.lifecycle.LiveData
2121
import androidx.lifecycle.ViewModel

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* You should have received a copy of the GNU General Public License
1616
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
*/
18-
package com.infomaniak.mail.ui.main.menu
18+
package com.infomaniak.mail.ui.main.menuDrawer
1919

2020
import android.content.Context
2121
import android.util.AttributeSet

0 commit comments

Comments
 (0)