Skip to content

Commit

Permalink
Merge pull request #1898 from Infomaniak/move-files
Browse files Browse the repository at this point in the history
Rename & move packages
  • Loading branch information
KevinBoulongne committed Jun 13, 2024
2 parents 6cf6a4f + 662e573 commit 924eff7
Show file tree
Hide file tree
Showing 55 changed files with 270 additions and 258 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ object RealmDatabase {
//region Configurations versions
const val USER_INFO_SCHEMA_VERSION = 1L
const val MAILBOX_INFO_SCHEMA_VERSION = 5L
const val MAILBOX_CONTENT_SCHEMA_VERSION = 13L
const val MAILBOX_CONTENT_SCHEMA_VERSION = 14L
//endregion

//region Configurations names
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ class FolderController @Inject constructor(
) {

//region Get data
fun getCustomFolders(): RealmResults<Folder> {
return getCustomFoldersQuery(mailboxContentRealm()).find()
fun getMoveFolders(): RealmResults<Folder> {
return getMoveFoldersQuery(mailboxContentRealm()).find()
}

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

private fun getDefaultFoldersQuery(realm: TypedRealm): RealmQuery<Folder> {
val hasRole = "${Folder.rolePropertyName} != nil"
return realm.query("$isNotSearch AND $hasRole")
return realm
.query<Folder>("$isNotSearch AND $hasRole")
.sort(Folder::roleOrder.name, Sort.DESCENDING)
}

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

private fun getMoveFoldersQuery(realm: TypedRealm): RealmQuery<Folder> {
val isNotDraft = "${Folder.rolePropertyName} != '${FolderRole.DRAFT.name}'"
return realm
.query<Folder>("$isNotSearch AND $isRootFolder AND $isNotDraft")
.sort(Folder::name.name, Sort.ASCENDING)
.sort(Folder::isFavorite.name, Sort.DESCENDING)
.sort(Folder::roleOrder.name, Sort.DESCENDING)
}

private fun getFolderQuery(key: String, value: String, realm: TypedRealm): RealmSingleQuery<Folder> {
return realm.query<Folder>("$key == $0", value).first()
}
Expand Down
33 changes: 25 additions & 8 deletions app/src/main/java/com/infomaniak/mail/data/models/Folder.kt
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import io.realm.kotlin.serializers.RealmListKSerializer
import io.realm.kotlin.types.RealmInstant
import io.realm.kotlin.types.RealmList
import io.realm.kotlin.types.RealmObject
import io.realm.kotlin.types.annotations.Ignore
import io.realm.kotlin.types.annotations.PrimaryKey
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
Expand All @@ -43,7 +44,7 @@ import kotlinx.serialization.UseSerializers
import kotlin.math.max

@Serializable
class Folder : RealmObject {
class Folder : RealmObject, Cloneable {

//region Remote data
@PrimaryKey
Expand Down Expand Up @@ -81,6 +82,14 @@ class Folder : RealmObject {
var isHidden: Boolean = false // For children only (a children Folder is hidden if its parent is collapsed)
@Transient
var isCollapsed: Boolean = false // For parents only (collapsing a parent Folder will hide its children)
@Transient
var roleOrder: Int = CUSTOM_FOLDER_ROLE_ORDER
//endregion

//region UI data (Transient & Ignore)
@Transient
@Ignore
var shouldDisplayDivider: Boolean = false
//endregion

private val _parents by backlinks(Folder::children)
Expand Down Expand Up @@ -122,6 +131,7 @@ class Folder : RealmObject {
this.isHistoryComplete = isHistoryComplete
this.isHidden = isHidden
this.isCollapsed = isCollapsed
this.roleOrder = role?.order ?: CUSTOM_FOLDER_ROLE_ORDER
}

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

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

/**
* We've had a reference issue when modifying the `shouldDisplayDivider` of a Folder before sending it to the Adapter.
* Cloning it to do a deep copy resolved the issue.
*/
public override fun clone() = super.clone() as Folder

enum class FolderRole(
@StringRes val folderNameRes: Int,
@DrawableRes val folderIconRes: Int,
val order: Int,
val matomoValue: String,
) {
INBOX(R.string.inboxFolder, R.drawable.ic_drawer_inbox, 0, "inboxFolder"),
INBOX(R.string.inboxFolder, R.drawable.ic_drawer_inbox, 8, "inboxFolder"),
COMMERCIAL(R.string.commercialFolder, R.drawable.ic_promotions, 7, "commercialFolder"),
SOCIALNETWORKS(R.string.socialNetworksFolder, R.drawable.ic_social_media, 6, "socialNetworksFolder"),
SENT(R.string.sentFolder, R.drawable.ic_sent_messages, 5, "sentFolder"),
DRAFT(R.string.draftFolder, R.drawable.ic_draft, 4, "draftFolder"),
SENT(R.string.sentFolder, R.drawable.ic_sent_messages, 3, "sentFolder"),
SPAM(R.string.spamFolder, R.drawable.ic_spam, 5, "spamFolder"),
TRASH(R.string.trashFolder, R.drawable.ic_bin, 6, "trashFolder"),
ARCHIVE(R.string.archiveFolder, R.drawable.ic_archive_folder, 7, "archiveFolder"),
COMMERCIAL(R.string.commercialFolder, R.drawable.ic_promotions, 1, "commercialFolder"),
SOCIALNETWORKS(R.string.socialNetworksFolder, R.drawable.ic_social_media, 2, "socialNetworksFolder"),
SPAM(R.string.spamFolder, R.drawable.ic_spam, 3, "spamFolder"),
TRASH(R.string.trashFolder, R.drawable.ic_bin, 2, "trashFolder"),
ARCHIVE(R.string.archiveFolder, R.drawable.ic_archive_folder, 1, "archiveFolder"),
}

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

const val INBOX_FOLDER_ID = "eJzz9HPyjwAABGYBgQ--"
private const val CUSTOM_FOLDER_ROLE_ORDER = 0
}
}
6 changes: 1 addition & 5 deletions app/src/main/java/com/infomaniak/mail/ui/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,9 @@ import com.infomaniak.mail.data.models.draft.Draft.DraftAction
import com.infomaniak.mail.databinding.ActivityMainBinding
import com.infomaniak.mail.firebase.RegisterFirebaseBroadcastReceiver
import com.infomaniak.mail.ui.alertDialogs.DescriptionAlertDialog
import com.infomaniak.mail.ui.alertDialogs.TitleAlertDialog
import com.infomaniak.mail.ui.main.SnackbarManager
import com.infomaniak.mail.ui.main.folder.TwoPaneFragment
import com.infomaniak.mail.ui.main.menu.MenuDrawerFragment
import com.infomaniak.mail.ui.main.menuDrawer.MenuDrawerFragment
import com.infomaniak.mail.ui.main.onboarding.PermissionsOnboardingPagerFragment
import com.infomaniak.mail.ui.main.search.SearchFragmentArgs
import com.infomaniak.mail.ui.newMessage.NewMessageActivity
Expand Down Expand Up @@ -139,9 +138,6 @@ class MainActivity : BaseActivity() {
@Inject
lateinit var descriptionDialog: DescriptionAlertDialog

@Inject
lateinit var titleDialog: TitleAlertDialog

@Inject
lateinit var permissionUtils: PermissionUtils

Expand Down
4 changes: 2 additions & 2 deletions app/src/main/java/com/infomaniak/mail/ui/MainViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -138,12 +138,12 @@ class MainViewModel @Inject constructor(
}.asLiveData(ioCoroutineContext)

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

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import com.infomaniak.lib.core.utils.safeNavigate
import com.infomaniak.mail.R
import com.infomaniak.mail.data.models.mailbox.Mailbox
import com.infomaniak.mail.ui.bottomSheetDialogs.LockedMailboxBottomSheetDialogArgs
import com.infomaniak.mail.ui.main.menu.MailboxesAdapter
import com.infomaniak.mail.ui.main.menuDrawer.MailboxesAdapter
import com.infomaniak.mail.utils.AccountUtils
import kotlinx.coroutines.launch

Expand All @@ -49,7 +49,7 @@ interface MailboxListFragment {
)
}

fun Fragment.onValidMailboxClicked(mailboxId: Int) {
lifecycleScope.launch { AccountUtils.switchToMailbox(mailboxId) }
fun Fragment.onValidMailboxClicked(mailboxId: Int) = lifecycleScope.launch {
AccountUtils.switchToMailbox(mailboxId)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.infomaniak.mail.ui.main.menu
package com.infomaniak.mail.ui.main.menuDrawer

import android.view.LayoutInflater
import android.view.View.OnClickListener
Expand All @@ -29,9 +29,9 @@ import com.infomaniak.mail.MatomoMail.trackMenuDrawerEvent
import com.infomaniak.mail.R
import com.infomaniak.mail.data.models.mailbox.Mailbox
import com.infomaniak.mail.databinding.ItemInvalidMailboxBinding
import com.infomaniak.mail.databinding.ItemMailboxMenuDrawerBinding
import com.infomaniak.mail.databinding.ItemMenuDrawerMailboxBinding
import com.infomaniak.mail.databinding.ItemSelectableMailboxBinding
import com.infomaniak.mail.ui.main.menu.MailboxesAdapter.MailboxesViewHolder
import com.infomaniak.mail.ui.main.menuDrawer.MailboxesAdapter.MailboxesViewHolder
import com.infomaniak.mail.utils.AccountUtils
import com.infomaniak.mail.utils.Utils.runCatchingRealm
import com.infomaniak.mail.views.itemViews.DecoratedItemView.SelectionStyle
Expand All @@ -50,7 +50,7 @@ class MailboxesAdapter(
val layoutInflater = LayoutInflater.from(parent.context)
val binding = when (viewType) {
DisplayType.SIMPLE_MAILBOX.layout -> ItemSelectableMailboxBinding.inflate(layoutInflater, parent, false)
DisplayType.MENU_DRAWER_MAILBOX.layout -> ItemMailboxMenuDrawerBinding.inflate(layoutInflater, parent, false)
DisplayType.MENU_DRAWER_MAILBOX.layout -> ItemMenuDrawerMailboxBinding.inflate(layoutInflater, parent, false)
else -> ItemInvalidMailboxBinding.inflate(layoutInflater, parent, false)
}

Expand All @@ -67,7 +67,7 @@ class MailboxesAdapter(
(this as ItemSelectableMailboxBinding).displaySimpleMailbox(mailbox, isCurrentMailbox)
}
DisplayType.MENU_DRAWER_MAILBOX.layout -> {
(this as ItemMailboxMenuDrawerBinding).displayMenuDrawerMailbox(mailbox, isCurrentMailbox)
(this as ItemMenuDrawerMailboxBinding).displayMenuDrawerMailbox(mailbox, isCurrentMailbox)
}
DisplayType.INVALID_MAILBOX.layout -> (this as ItemInvalidMailboxBinding).displayInvalidMailbox(mailbox)
}
Expand All @@ -94,7 +94,7 @@ class MailboxesAdapter(
setSelectedState(isCurrentMailbox)
}

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

unreadCount = mailbox.unreadCountDisplay.count
Expand Down Expand Up @@ -141,7 +141,7 @@ class MailboxesAdapter(

private enum class DisplayType(val layout: Int) {
INVALID_MAILBOX(R.layout.item_invalid_mailbox),
MENU_DRAWER_MAILBOX(R.layout.item_mailbox_menu_drawer),
MENU_DRAWER_MAILBOX(R.layout.item_menu_drawer_mailbox),
SIMPLE_MAILBOX(R.layout.item_selectable_mailbox),
}

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

import android.content.Context
import android.util.AttributeSet
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.infomaniak.mail.ui.main.menu
package com.infomaniak.mail.ui.main.menuDrawer

import android.annotation.SuppressLint
import android.content.Intent
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.infomaniak.mail.ui.main.menu
package com.infomaniak.mail.ui.main.menuDrawer

import androidx.lifecycle.ViewModel
import androidx.lifecycle.asLiveData
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.infomaniak.mail.ui.main.menu
package com.infomaniak.mail.ui.main.menuDrawer

import android.os.Bundle
import android.view.View
Expand All @@ -26,6 +26,7 @@ import com.infomaniak.mail.R
import com.infomaniak.mail.data.cache.mailboxContent.FolderController
import com.infomaniak.mail.ui.MainViewModel
import com.infomaniak.mail.ui.alertDialogs.InputAlertDialog
import com.infomaniak.mail.ui.main.move.FolderAdapter
import com.infomaniak.mail.utils.extensions.bindAlertToViewLifecycle
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.infomaniak.mail.ui.main.menu
package com.infomaniak.mail.ui.main.menuDrawer

import android.os.Bundle
import android.view.LayoutInflater
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.infomaniak.mail.ui.main.menu
package com.infomaniak.mail.ui.main.menuDrawer

import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.infomaniak.mail.ui.main.menu
package com.infomaniak.mail.ui.main.menuDrawer

import android.content.Context
import android.util.AttributeSet
Expand Down
Loading

0 comments on commit 924eff7

Please sign in to comment.