From 321cc17dbd3d2384458c761629276a50189f1753 Mon Sep 17 00:00:00 2001 From: Fabian DEVEL Date: Tue, 25 Feb 2025 08:46:37 +0100 Subject: [PATCH 1/2] feat(StorageExceeded): Prompt upgrade bottomsheet when user quotas are exceeded creating office files --- .../ui/addFiles/AddFileBottomSheetDialog.kt | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/infomaniak/drive/ui/addFiles/AddFileBottomSheetDialog.kt b/app/src/main/java/com/infomaniak/drive/ui/addFiles/AddFileBottomSheetDialog.kt index f9dc759a6b..d193e50aa4 100644 --- a/app/src/main/java/com/infomaniak/drive/ui/addFiles/AddFileBottomSheetDialog.kt +++ b/app/src/main/java/com/infomaniak/drive/ui/addFiles/AddFileBottomSheetDialog.kt @@ -32,6 +32,8 @@ import androidx.fragment.app.activityViewModels import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import com.infomaniak.core.myksuite.ui.screens.KSuiteApp +import com.infomaniak.core.myksuite.ui.utils.MyKSuiteUiUtils.openMyKSuiteUpgradeBottomSheet import com.infomaniak.core.utils.FORMAT_NEW_FILE import com.infomaniak.core.utils.format import com.infomaniak.drive.GeniusScanUtils.scanResultProcessing @@ -39,6 +41,7 @@ import com.infomaniak.drive.GeniusScanUtils.startScanFlow import com.infomaniak.drive.MainApplication import com.infomaniak.drive.MatomoDrive.trackNewElementEvent import com.infomaniak.drive.R +import com.infomaniak.drive.data.api.ErrorCode import com.infomaniak.drive.data.models.CreateFile import com.infomaniak.drive.data.models.File import com.infomaniak.drive.data.models.File.Office @@ -51,6 +54,7 @@ import com.infomaniak.drive.ui.menu.SharedWithMeFragment import com.infomaniak.drive.utils.* import com.infomaniak.drive.utils.AccountUtils.currentUserId import com.infomaniak.drive.utils.SyncUtils.syncImmediately +import com.infomaniak.lib.core.utils.ApiErrorCode.Companion.translateError import com.infomaniak.lib.core.utils.context import com.infomaniak.lib.core.utils.safeBinding import com.infomaniak.lib.core.utils.safeNavigate @@ -197,7 +201,19 @@ class AddFileBottomSheetDialog : BottomSheetDialogFragment() { showSnackbar(getString(R.string.modalCreateFileSucces, createFile.name), showAboveFab = true) apiResponse.data?.let { file -> requireContext().openOnlyOfficeActivity(file) } } else { - showSnackbar(R.string.errorFileAlreadyExists, showAboveFab = true) + val error = apiResponse.translateError() + val quotaErrorCode = ErrorCode.apiErrorCodes.firstOrNull { it.code == ErrorCode.QUOTA_EXCEEDED_ERROR } + if (error == quotaErrorCode?.translateRes) { + val navController = findNavController() + showSnackbar( + error, + showAboveFab = true, + actionButtonTitle = R.string.buttonUpgrade, + onActionClicked = { navController.openMyKSuiteUpgradeBottomSheet(KSuiteApp.Drive) }, + ) + } else { + showSnackbar(error, showAboveFab = true) + } } mainViewModel.refreshActivities.value = true dialog.dismiss() From 28b7d8523bd31cf6fe26a58970cd7b6a464bba6d Mon Sep 17 00:00:00 2001 From: Fabian DEVEL Date: Tue, 25 Feb 2025 09:21:51 +0100 Subject: [PATCH 2/2] feat(StorageExceeded): Prompt upgrade bottomsheet on main fab click --- .../com/infomaniak/drive/data/models/drive/Drive.kt | 2 ++ .../java/com/infomaniak/drive/ui/MainActivity.kt | 8 +++++++- .../drive/ui/addFiles/AddFileBottomSheetDialog.kt | 11 ++--------- .../java/com/infomaniak/drive/utils/Extensions.kt | 12 ++++++++++++ 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/infomaniak/drive/data/models/drive/Drive.kt b/app/src/main/java/com/infomaniak/drive/data/models/drive/Drive.kt index 6b9b512edd..de1260709d 100644 --- a/app/src/main/java/com/infomaniak/drive/data/models/drive/Drive.kt +++ b/app/src/main/java/com/infomaniak/drive/data/models/drive/Drive.kt @@ -119,6 +119,8 @@ open class Drive( inline val canCreateDropbox get() = pack?.capabilities?.useDropbox == true && (!isFreeTier || quotas.canCreateDropbox) inline val canCreateShareLink get() = !isFreeTier || quotas.canCreateShareLink + inline val isDriveFull get() = usedSize >= size + fun isUserAdmin(): Boolean = role == DriveUser.Role.ADMIN fun isDriveUser(): Boolean = role != DriveUser.Role.NONE && role != DriveUser.Role.EXTERNAL diff --git a/app/src/main/java/com/infomaniak/drive/ui/MainActivity.kt b/app/src/main/java/com/infomaniak/drive/ui/MainActivity.kt index 90ac206263..a35bd4b504 100644 --- a/app/src/main/java/com/infomaniak/drive/ui/MainActivity.kt +++ b/app/src/main/java/com/infomaniak/drive/ui/MainActivity.kt @@ -271,7 +271,13 @@ class MainActivity : BaseActivity() { private fun setupFab(fab: FloatingActionButton, shouldShowSmallFab: Boolean = false) { val args = AddFileBottomSheetDialogArgs(shouldShowSmallFab).toBundle() - fab.setOnClickListener { navController.navigate(R.id.addFileBottomSheetDialog, args) } + fab.setOnClickListener { + if (AccountUtils.getCurrentDrive()?.isDriveFull == true) { + showQuotasExceededSnackbar(navController) + } else { + navController.navigate(R.id.addFileBottomSheetDialog, args) + } + } } private fun setupDrivePermissions() { diff --git a/app/src/main/java/com/infomaniak/drive/ui/addFiles/AddFileBottomSheetDialog.kt b/app/src/main/java/com/infomaniak/drive/ui/addFiles/AddFileBottomSheetDialog.kt index d193e50aa4..fd6d3c0ea6 100644 --- a/app/src/main/java/com/infomaniak/drive/ui/addFiles/AddFileBottomSheetDialog.kt +++ b/app/src/main/java/com/infomaniak/drive/ui/addFiles/AddFileBottomSheetDialog.kt @@ -32,8 +32,6 @@ import androidx.fragment.app.activityViewModels import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import com.google.android.material.bottomsheet.BottomSheetDialogFragment -import com.infomaniak.core.myksuite.ui.screens.KSuiteApp -import com.infomaniak.core.myksuite.ui.utils.MyKSuiteUiUtils.openMyKSuiteUpgradeBottomSheet import com.infomaniak.core.utils.FORMAT_NEW_FILE import com.infomaniak.core.utils.format import com.infomaniak.drive.GeniusScanUtils.scanResultProcessing @@ -48,6 +46,7 @@ import com.infomaniak.drive.data.models.File.Office import com.infomaniak.drive.data.models.UploadFile import com.infomaniak.drive.data.models.UserDrive import com.infomaniak.drive.databinding.FragmentBottomSheetAddFileBinding +import com.infomaniak.drive.ui.MainActivity import com.infomaniak.drive.ui.MainViewModel import com.infomaniak.drive.ui.fileList.FileListFragment import com.infomaniak.drive.ui.menu.SharedWithMeFragment @@ -204,13 +203,7 @@ class AddFileBottomSheetDialog : BottomSheetDialogFragment() { val error = apiResponse.translateError() val quotaErrorCode = ErrorCode.apiErrorCodes.firstOrNull { it.code == ErrorCode.QUOTA_EXCEEDED_ERROR } if (error == quotaErrorCode?.translateRes) { - val navController = findNavController() - showSnackbar( - error, - showAboveFab = true, - actionButtonTitle = R.string.buttonUpgrade, - onActionClicked = { navController.openMyKSuiteUpgradeBottomSheet(KSuiteApp.Drive) }, - ) + (requireActivity() as? MainActivity)?.showQuotasExceededSnackbar(findNavController()) } else { showSnackbar(error, showAboveFab = true) } diff --git a/app/src/main/java/com/infomaniak/drive/utils/Extensions.kt b/app/src/main/java/com/infomaniak/drive/utils/Extensions.kt index 6d5dd8424c..fa7c2a23be 100644 --- a/app/src/main/java/com/infomaniak/drive/utils/Extensions.kt +++ b/app/src/main/java/com/infomaniak/drive/utils/Extensions.kt @@ -54,6 +54,7 @@ import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LiveData import androidx.lifecycle.lifecycleScope +import androidx.navigation.NavController import androidx.navigation.fragment.findNavController import androidx.work.OneTimeWorkRequest import androidx.work.OutOfQuotaPolicy @@ -65,6 +66,8 @@ import com.google.android.material.shape.CornerFamily import com.google.android.material.textfield.MaterialAutoCompleteTextView import com.google.android.material.textfield.TextInputEditText import com.google.android.material.textfield.TextInputLayout +import com.infomaniak.core.myksuite.ui.screens.KSuiteApp +import com.infomaniak.core.myksuite.ui.utils.MyKSuiteUiUtils.openMyKSuiteUpgradeBottomSheet import com.infomaniak.drive.BuildConfig import com.infomaniak.drive.BuildConfig.SUPPORT_URL import com.infomaniak.drive.MatomoDrive.trackShareRightsEvent @@ -539,3 +542,12 @@ fun Fragment.setupRootPendingFilesIndicator(countLiveData: LiveData, pendin pendingFilesView.setUploadFileInProgress(this, OTHER_ROOT_ID) countLiveData.observe(viewLifecycleOwner, pendingFilesView::updateUploadFileInProgress) } + +fun MainActivity.showQuotasExceededSnackbar(navController: NavController) { + showSnackbar( + title = R.string.errorQuotaExceeded, + anchor = getMainFab(), + actionButtonTitle = R.string.buttonUpgrade, + onActionClicked = { navController.openMyKSuiteUpgradeBottomSheet(KSuiteApp.Drive) }, + ) +}