diff --git a/Core b/Core
index ea4d650a87..db4e2a0bcb 160000
--- a/Core
+++ b/Core
@@ -1 +1 @@
-Subproject commit ea4d650a87062439663460fb4154be822ec25a1e
+Subproject commit db4e2a0bcbc07befef8d5093d858949abba8b8ed
diff --git a/app/src/main/java/com/infomaniak/mail/ui/MainViewModel.kt b/app/src/main/java/com/infomaniak/mail/ui/MainViewModel.kt
index 07db769e4f..775240b2b2 100644
--- a/app/src/main/java/com/infomaniak/mail/ui/MainViewModel.kt
+++ b/app/src/main/java/com/infomaniak/mail/ui/MainViewModel.kt
@@ -319,7 +319,7 @@ class MainViewModel @Inject constructor(
AccountUtils.updateCurrentUser()
// Refresh My kSuite asynchronously, because it's not required for the threads list display
- launch { MyKSuiteDataUtils.fetchMyKSuiteData() }
+ launch { MyKSuiteDataUtils.fetchData() }
// Refresh Mailboxes
SentryLog.d(TAG, "Refresh mailboxes from remote")
diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/settings/KSuiteDashboardFragment.kt b/app/src/main/java/com/infomaniak/mail/ui/main/settings/KSuiteDashboardFragment.kt
index b027fb2570..984786543d 100644
--- a/app/src/main/java/com/infomaniak/mail/ui/main/settings/KSuiteDashboardFragment.kt
+++ b/app/src/main/java/com/infomaniak/mail/ui/main/settings/KSuiteDashboardFragment.kt
@@ -20,8 +20,9 @@ package com.infomaniak.mail.ui.main.settings
import android.os.Bundle
import android.view.View
import androidx.fragment.app.viewModels
+import com.infomaniak.core.myksuite.ui.utils.MyKSuiteUiUtils
import com.infomaniak.core.myksuite.ui.views.MyKSuiteDashboardFragment
-import com.infomaniak.mail.utils.MyKSuiteUiUtils.getDashboardData
+import com.infomaniak.mail.utils.AccountUtils
import com.infomaniak.mail.utils.extensions.observeNotNull
import com.infomaniak.mail.utils.extensions.setSystemBarsColors
import dagger.hilt.android.AndroidEntryPoint
@@ -39,7 +40,13 @@ class KSuiteDashboardFragment : MyKSuiteDashboardFragment() {
myKSuiteViewModel.refreshMyKSuite()
myKSuiteViewModel.myKSuiteDataResult.observeNotNull(viewLifecycleOwner) { myKSuiteData ->
- resetContent(dashboardData = getDashboardData(requireContext(), myKSuiteData))
+ resetContent(
+ dashboardData = MyKSuiteUiUtils.getDashboardData(
+ context = requireContext(),
+ myKSuiteData = myKSuiteData,
+ avatarUri = AccountUtils.currentUser?.avatar ?: "",
+ ),
+ )
}
}
}
diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/settings/MykSuiteViewModel.kt b/app/src/main/java/com/infomaniak/mail/ui/main/settings/MykSuiteViewModel.kt
index a43c1f7c47..eef1fa15bd 100644
--- a/app/src/main/java/com/infomaniak/mail/ui/main/settings/MykSuiteViewModel.kt
+++ b/app/src/main/java/com/infomaniak/mail/ui/main/settings/MykSuiteViewModel.kt
@@ -56,6 +56,6 @@ class MykSuiteViewModel @Inject constructor(
}
fun refreshMyKSuite() = viewModelScope.launch(ioCoroutineContext) {
- myKSuiteDataResult.postValue(MyKSuiteDataUtils.fetchMyKSuiteData())
+ myKSuiteDataResult.postValue(MyKSuiteDataUtils.fetchData())
}
}
diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/settings/SettingsFragment.kt b/app/src/main/java/com/infomaniak/mail/ui/main/settings/SettingsFragment.kt
index 96750b6bb7..47f755e894 100644
--- a/app/src/main/java/com/infomaniak/mail/ui/main/settings/SettingsFragment.kt
+++ b/app/src/main/java/com/infomaniak/mail/ui/main/settings/SettingsFragment.kt
@@ -27,6 +27,8 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.viewModels
import com.infomaniak.core.myksuite.ui.data.MyKSuiteData
+import com.infomaniak.core.myksuite.ui.utils.MyKSuiteUiUtils
+import com.infomaniak.core.myksuite.ui.views.MyKSuiteDashboardFragmentArgs
import com.infomaniak.lib.applock.LockActivity
import com.infomaniak.lib.applock.Utils.silentlyReverseSwitch
import com.infomaniak.lib.core.utils.openAppNotificationSettings
@@ -40,8 +42,8 @@ import com.infomaniak.mail.data.LocalSettings
import com.infomaniak.mail.data.models.FeatureFlag
import com.infomaniak.mail.databinding.FragmentSettingsBinding
import com.infomaniak.mail.ui.MainViewModel
+import com.infomaniak.mail.utils.AccountUtils
import com.infomaniak.mail.utils.MyKSuiteDataUtils
-import com.infomaniak.mail.utils.MyKSuiteUiUtils.openMyKSuiteDashboard
import com.infomaniak.mail.utils.UiUtils.saveFocusWhenNavigatingBack
import com.infomaniak.mail.utils.extensions.animatedNavigation
import com.infomaniak.mail.utils.extensions.launchSyncAutoConfigActivityForResult
@@ -118,6 +120,13 @@ class SettingsFragment : Fragment() {
myKSuiteViewModel.myKSuiteDataResult.observeNotNull(viewLifecycleOwner) { data -> setupMyKSuiteLayout(data) }
}
+ private fun openMyKSuiteDashboard(myKSuiteData: MyKSuiteData) {
+ val args = MyKSuiteDashboardFragmentArgs(
+ dashboardData = MyKSuiteUiUtils.getDashboardData(requireContext(), myKSuiteData, AccountUtils.currentUser?.avatar)
+ )
+ animatedNavigation(resId = R.id.myKSuiteDashboardFragment, args = args.toBundle())
+ }
+
override fun onResume() {
super.onResume()
setSwitchesInitialState()
diff --git a/app/src/main/java/com/infomaniak/mail/utils/MyKSuiteDataUtils.kt b/app/src/main/java/com/infomaniak/mail/utils/MyKSuiteDataUtils.kt
index cabab981fb..4838bdf36b 100644
--- a/app/src/main/java/com/infomaniak/mail/utils/MyKSuiteDataUtils.kt
+++ b/app/src/main/java/com/infomaniak/mail/utils/MyKSuiteDataUtils.kt
@@ -34,7 +34,7 @@ object MyKSuiteDataUtils : MyKSuiteDataManager() {
override var myKSuite: MyKSuiteData? = null
- suspend fun fetchMyKSuiteData(): MyKSuiteData? = runCatching {
+ override suspend fun fetchData(): MyKSuiteData? = runCatching {
MyKSuiteDataUtils.requestKSuiteData()
val apiResponse = ApiRepository.getMyKSuiteData(HttpClient.okHttpClient)
if (apiResponse.data != null) {
diff --git a/app/src/main/java/com/infomaniak/mail/utils/MyKSuiteUiUtils.kt b/app/src/main/java/com/infomaniak/mail/utils/MyKSuiteUiUtils.kt
deleted file mode 100644
index ad3fec9eff..0000000000
--- a/app/src/main/java/com/infomaniak/mail/utils/MyKSuiteUiUtils.kt
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Infomaniak Mail - Android
- * Copyright (C) 2025 Infomaniak Network SA
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package com.infomaniak.mail.utils
-
-import android.content.Context
-import androidx.fragment.app.Fragment
-import com.infomaniak.core.FormatterFileSize.formatShortFileSize
-import com.infomaniak.core.myksuite.ui.data.MyKSuiteData
-import com.infomaniak.core.myksuite.ui.screens.MyKSuiteDashboardScreenData
-import com.infomaniak.core.myksuite.ui.screens.components.KSuiteProductsWithQuotas
-import com.infomaniak.core.myksuite.ui.views.MyKSuiteDashboardFragmentArgs
-import com.infomaniak.mail.R
-import com.infomaniak.mail.utils.extensions.animatedNavigation
-
-object MyKSuiteUiUtils {
-
- fun Fragment.openMyKSuiteDashboard(myKSuiteData: MyKSuiteData) {
- val args = MyKSuiteDashboardFragmentArgs(dashboardData = getDashboardData(requireContext(), myKSuiteData))
- animatedNavigation(resId = R.id.myKSuiteDashboardFragment, args = args.toBundle())
- }
-
- fun getDashboardData(context: Context, myKSuiteData: MyKSuiteData): MyKSuiteDashboardScreenData {
- return MyKSuiteDashboardScreenData(
- myKSuiteTier = myKSuiteData.tier,
- email = myKSuiteData.mail.email,
- avatarUri = AccountUtils.currentUser?.avatar ?: "",
- dailySendingLimit = myKSuiteData.mail.dailyLimitSent.toString(),
- kSuiteProductsWithQuotas = context.getKSuiteQuotasApp(myKSuiteData).toList(),
- trialExpiryDate = myKSuiteData.trialExpiryDate,
- )
- }
-
- private fun Context.getKSuiteQuotasApp(myKSuite: MyKSuiteData): Array {
-
- val mailProduct = with(myKSuite.mail) {
- KSuiteProductsWithQuotas.Mail(
- usedSize = formatShortFileSize(usedSizeInBytes),
- maxSize = formatShortFileSize(storageSizeLimit),
- progress = (usedSizeInBytes.toDouble() / storageSizeLimit.toDouble()).toFloat(),
- )
- }
-
- val driveProduct = with(myKSuite.drive) {
- KSuiteProductsWithQuotas.Drive(
- usedSize = formatShortFileSize(usedSize),
- maxSize = formatShortFileSize(size),
- progress = (usedSize.toDouble() / size.toDouble()).toFloat(),
- )
- }
-
- return arrayOf(mailProduct, driveProduct)
- }
-}