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) - } -}