From b6bcc888eaee52a133e01f7123fad09f03a0cdcc Mon Sep 17 00:00:00 2001 From: Aitorbp Date: Tue, 21 Nov 2023 15:56:32 +0000 Subject: [PATCH] cr - some improvements in vms and fragments --- changelog/unreleased/4214 | 0 .../dependecyinjection/UseCaseModule.kt | 4 +- .../SettingsPictureUploadsFragment.kt | 13 ++--- .../SettingsPictureUploadsViewModel.kt | 51 ++++++++++--------- .../SettingsVideoUploadsFragment.kt | 12 ++--- .../SettingsVideoUploadsViewModel.kt | 49 +++++++++--------- .../ui/activity/FolderPickerActivity.kt | 13 ++--- 7 files changed, 67 insertions(+), 75 deletions(-) create mode 100644 changelog/unreleased/4214 diff --git a/changelog/unreleased/4214 b/changelog/unreleased/4214 new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/owncloudApp/src/main/java/com/owncloud/android/dependecyinjection/UseCaseModule.kt b/owncloudApp/src/main/java/com/owncloud/android/dependecyinjection/UseCaseModule.kt index 835a10a7c955..395f9d37ad10 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/dependecyinjection/UseCaseModule.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/dependecyinjection/UseCaseModule.kt @@ -93,7 +93,7 @@ import com.owncloud.android.domain.spaces.usecases.GetProjectSpacesWithSpecialsF import com.owncloud.android.domain.spaces.usecases.GetSpaceWithSpecialsByIdForAccountUseCase import com.owncloud.android.domain.spaces.usecases.GetSpacesFromEveryAccountUseCaseAsStream import com.owncloud.android.domain.spaces.usecases.RefreshSpacesFromServerAsyncUseCase -import com.owncloud.android.domain.spaces.usecases.GetSpaceByIdUseCase +import com.owncloud.android.domain.spaces.usecases.GetSpaceByIdForAccountUseCase import com.owncloud.android.domain.transfers.usecases.ClearSuccessfulTransfersUseCase import com.owncloud.android.domain.transfers.usecases.GetAllTransfersAsStreamUseCase import com.owncloud.android.domain.transfers.usecases.GetAllTransfersUseCase @@ -215,7 +215,7 @@ val useCaseModule = module { factoryOf(::GetSpacesFromEveryAccountUseCaseAsStream) factoryOf(::GetWebDavUrlForSpaceUseCase) factoryOf(::RefreshSpacesFromServerAsyncUseCase) - factoryOf(::GetSpaceByIdUseCase) + factoryOf(::GetSpaceByIdForAccountUseCase) // Transfers factoryOf(::CancelDownloadForFileUseCase) diff --git a/owncloudApp/src/main/java/com/owncloud/android/presentation/settings/autouploads/SettingsPictureUploadsFragment.kt b/owncloudApp/src/main/java/com/owncloud/android/presentation/settings/autouploads/SettingsPictureUploadsFragment.kt index fc262bcb3e7d..789ee7677b48 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/presentation/settings/autouploads/SettingsPictureUploadsFragment.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/presentation/settings/autouploads/SettingsPictureUploadsFragment.kt @@ -127,11 +127,7 @@ class SettingsPictureUploadsFragment : PreferenceFragmentCompat() { enablePictureUploads(pictureUploadsConfiguration != null) pictureUploadsConfiguration?.let { prefPictureUploadsAccount?.value = it.accountName - prefPictureUploadsPath?.summary = picturesViewModel.modifyUploadPath( - uploadPath = it.uploadPath, - spaceId = it.spaceId, - spaceName = it.spaceName - ) + prefPictureUploadsPath?.summary = picturesViewModel.getUploadPathString() prefPictureUploadsSourcePath?.summary = DisplayUtils.getPathWithoutLastSlash(it.sourcePath.toUri().path) prefPictureUploadsOnWifi?.isChecked = it.wifiOnly prefPictureUploadsOnCharging?.isChecked = it.chargingOnly @@ -175,10 +171,9 @@ class SettingsPictureUploadsFragment : PreferenceFragmentCompat() { uploadPath += File.separator } val intent = Intent(activity, FolderPickerActivity::class.java).apply { - val accountName = picturesViewModel.getPictureUploadsAccount() - putExtra(FolderPickerActivity.EXTRA_PICKER_MODE, FolderPickerActivity.PickerMode.UPLOAD_PATH) - putExtra(FolderPickerActivity.KEY_PERSONAL_SPACE_ID, spaceId) - putExtra(FolderPickerActivity.KEY_ACCOUNT_NAME, accountName) + putExtra(FolderPickerActivity.EXTRA_PICKER_MODE, FolderPickerActivity.PickerMode.CAMERA_FOLDER) + putExtra(FolderPickerActivity.KEY_SPACE_ID, spaceId) + putExtra(FolderPickerActivity.KEY_ACCOUNT_NAME, picturesViewModel.getPictureUploadsAccount()) } selectPictureUploadsPathLauncher.launch(intent) true diff --git a/owncloudApp/src/main/java/com/owncloud/android/presentation/settings/autouploads/SettingsPictureUploadsViewModel.kt b/owncloudApp/src/main/java/com/owncloud/android/presentation/settings/autouploads/SettingsPictureUploadsViewModel.kt index 70609b47537d..f41a17f4591b 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/presentation/settings/autouploads/SettingsPictureUploadsViewModel.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/presentation/settings/autouploads/SettingsPictureUploadsViewModel.kt @@ -4,7 +4,7 @@ * @author Juan Carlos Garrote Gascón * @author Aitor Ballesteros Pavón * - * Copyright (C) 2021 ownCloud GmbH. + * Copyright (C) 2023 ownCloud GmbH. *

* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, @@ -25,6 +25,7 @@ import android.content.Intent import android.net.Uri import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.owncloud.android.R import com.owncloud.android.db.PreferenceManager.PREF__CAMERA_UPLOADS_DEFAULT_PATH import com.owncloud.android.domain.camerauploads.model.FolderBackUpConfiguration import com.owncloud.android.domain.camerauploads.model.FolderBackUpConfiguration.Companion.pictureUploadsName @@ -35,8 +36,9 @@ import com.owncloud.android.domain.camerauploads.usecases.SavePictureUploadsConf import com.owncloud.android.domain.files.model.OCFile import com.owncloud.android.domain.spaces.model.OCSpace import com.owncloud.android.domain.spaces.usecases.GetPersonalSpaceForAccountUseCase -import com.owncloud.android.domain.spaces.usecases.GetSpaceByIdUseCase +import com.owncloud.android.domain.spaces.usecases.GetSpaceByIdForAccountUseCase import com.owncloud.android.providers.AccountProvider +import com.owncloud.android.providers.ContextProvider import com.owncloud.android.providers.CoroutinesDispatcherProvider import com.owncloud.android.providers.WorkManagerProvider import com.owncloud.android.ui.activity.FolderPickerActivity @@ -53,15 +55,16 @@ class SettingsPictureUploadsViewModel( private val getPictureUploadsConfigurationStreamUseCase: GetPictureUploadsConfigurationStreamUseCase, private val resetPictureUploadsUseCase: ResetPictureUploadsUseCase, private val getPersonalSpaceForAccountUseCase: GetPersonalSpaceForAccountUseCase, - private val getSpaceByIdUseCase: GetSpaceByIdUseCase, + private val getSpaceByIdForAccountUseCase: GetSpaceByIdForAccountUseCase, private val workManagerProvider: WorkManagerProvider, private val coroutinesDispatcherProvider: CoroutinesDispatcherProvider, + private val contextProvider: ContextProvider, ) : ViewModel() { private val _pictureUploads: MutableStateFlow = MutableStateFlow(null) val pictureUploads: StateFlow = _pictureUploads - private val _spaceFlow: MutableStateFlow = MutableStateFlow(null) + private var _space: OCSpace? = null init { initPictureUploads() @@ -70,6 +73,9 @@ class SettingsPictureUploadsViewModel( private fun initPictureUploads() { viewModelScope.launch(coroutinesDispatcherProvider.io) { getPictureUploadsConfigurationStreamUseCase(Unit).collect { pictureUploadsConfiguration -> + if(pictureUploadsConfiguration?.accountName != null) { + getSpaceById(spaceId = pictureUploadsConfiguration.spaceId, accountName = pictureUploadsConfiguration.accountName) + } _pictureUploads.update { pictureUploadsConfiguration } } } @@ -84,7 +90,7 @@ class SettingsPictureUploadsViewModel( SavePictureUploadsConfigurationUseCase.Params( composePictureUploadsConfiguration( accountName = name, - spaceId = _spaceFlow.value?.id, + spaceId = _space?.id, ) ) ) @@ -128,13 +134,12 @@ class SettingsPictureUploadsViewModel( val folderToUpload = data?.getParcelableExtra(FolderPickerActivity.EXTRA_FOLDER) folderToUpload?.remotePath?.let { viewModelScope.launch(coroutinesDispatcherProvider.io) { - getSpaceById(_pictureUploads.value?.accountName!!, folderToUpload.spaceId) + getSpaceById(spaceId = folderToUpload.spaceId, accountName = _pictureUploads.value?.accountName!!) savePictureUploadsConfigurationUseCase( SavePictureUploadsConfigurationUseCase.Params( composePictureUploadsConfiguration( uploadPath = it, - spaceId = _spaceFlow.value?.id, - spaceName = _spaceFlow.value?.name, + spaceId = _space?.id, ) ) ) @@ -150,7 +155,7 @@ class SettingsPictureUploadsViewModel( composePictureUploadsConfiguration( accountName = accountName, uploadPath = null, - spaceId = _spaceFlow.value?.id, + spaceId = _space?.id, ) ) ) @@ -196,8 +201,6 @@ class SettingsPictureUploadsViewModel( behavior: UploadBehavior? = _pictureUploads.value?.behavior, timestamp: Long? = _pictureUploads.value?.lastSyncTimestamp, spaceId: String? = _pictureUploads.value?.spaceId, - spaceName: String? = _spaceFlow.value?.name, - ): FolderBackUpConfiguration = FolderBackUpConfiguration( accountName = accountName ?: accountProvider.getCurrentOwnCloudAccount()!!.name, behavior = behavior ?: UploadBehavior.COPY, @@ -208,20 +211,24 @@ class SettingsPictureUploadsViewModel( lastSyncTimestamp = timestamp ?: System.currentTimeMillis(), name = _pictureUploads.value?.name ?: pictureUploadsName, spaceId = spaceId, - spaceName = handleSpaceName(spaceName), ).also { Timber.d("Picture uploads configuration updated. New configuration: $it") } private fun handleSpaceName(spaceName: String?): String? { - return if (_spaceFlow.value?.isPersonal == true) { - PERSONAL_SPACE_NAME + return if (_space?.isPersonal == true) { + contextProvider.getString(R.string.bottom_nav_personal) } else { spaceName } } - fun modifyUploadPath(uploadPath: String?, spaceId: String?, spaceName: String?): String { + fun getUploadPathString(): String { + + val spaceName = handleSpaceName(_space?.name) + val uploadPath = pictureUploads.value?.uploadPath + val spaceId = pictureUploads.value?.spaceId + return if (uploadPath != null) { if (spaceId != null) { "$spaceName: $uploadPath" @@ -243,20 +250,16 @@ class SettingsPictureUploadsViewModel( accountName = accountName ) ) - _spaceFlow.value = result + _space = result } - private fun getSpaceById(accountName: String, spaceId: String?) { - val result = getSpaceByIdUseCase( - GetSpaceByIdUseCase.Params( + private fun getSpaceById(spaceId: String?, accountName: String) { + val result = getSpaceByIdForAccountUseCase( + GetSpaceByIdForAccountUseCase.Params( accountName = accountName, spaceId = spaceId ) ) - _spaceFlow.value = result - } - - companion object { - private const val PERSONAL_SPACE_NAME = "Personal" + _space = result } } diff --git a/owncloudApp/src/main/java/com/owncloud/android/presentation/settings/autouploads/SettingsVideoUploadsFragment.kt b/owncloudApp/src/main/java/com/owncloud/android/presentation/settings/autouploads/SettingsVideoUploadsFragment.kt index 9473165c33e2..47dfd70b51c7 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/presentation/settings/autouploads/SettingsVideoUploadsFragment.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/presentation/settings/autouploads/SettingsVideoUploadsFragment.kt @@ -124,10 +124,7 @@ class SettingsVideoUploadsFragment : PreferenceFragmentCompat() { enableVideoUploads(videoUploadsConfiguration != null) videoUploadsConfiguration?.let { prefVideoUploadsAccount?.value = it.accountName - prefVideoUploadsPath?.summary = videosViewModel.modifyUploadPath( - uploadPath = it.uploadPath, - spaceId = it.spaceId, - spaceName = it.spaceName) + prefVideoUploadsPath?.summary = videosViewModel.getUploadPathString() prefVideoUploadsSourcePath?.summary = DisplayUtils.getPathWithoutLastSlash(it.sourcePath.toUri().path) prefVideoUploadsOnWifi?.isChecked = it.wifiOnly prefVideoUploadsOnCharging?.isChecked = it.chargingOnly @@ -171,10 +168,9 @@ class SettingsVideoUploadsFragment : PreferenceFragmentCompat() { uploadPath += File.separator } val intent = Intent(activity, FolderPickerActivity::class.java).apply { - val accountName = videosViewModel.getVideoUploadsAccount() - putExtra(FolderPickerActivity.EXTRA_PICKER_MODE, FolderPickerActivity.PickerMode.UPLOAD_PATH) - putExtra(FolderPickerActivity.KEY_PERSONAL_SPACE_ID, spaceId) - putExtra(FolderPickerActivity.KEY_ACCOUNT_NAME, accountName) + putExtra(FolderPickerActivity.EXTRA_PICKER_MODE, FolderPickerActivity.PickerMode.CAMERA_FOLDER) + putExtra(FolderPickerActivity.KEY_SPACE_ID, spaceId) + putExtra(FolderPickerActivity.KEY_ACCOUNT_NAME, videosViewModel.getVideoUploadsAccount()) } selectVideoUploadsPathLauncher.launch(intent) true diff --git a/owncloudApp/src/main/java/com/owncloud/android/presentation/settings/autouploads/SettingsVideoUploadsViewModel.kt b/owncloudApp/src/main/java/com/owncloud/android/presentation/settings/autouploads/SettingsVideoUploadsViewModel.kt index 8b734b43dd65..6e160e64b228 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/presentation/settings/autouploads/SettingsVideoUploadsViewModel.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/presentation/settings/autouploads/SettingsVideoUploadsViewModel.kt @@ -25,6 +25,7 @@ import android.content.Intent import android.net.Uri import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.owncloud.android.R import com.owncloud.android.db.PreferenceManager.PREF__CAMERA_UPLOADS_DEFAULT_PATH import com.owncloud.android.domain.camerauploads.model.FolderBackUpConfiguration import com.owncloud.android.domain.camerauploads.model.FolderBackUpConfiguration.Companion.videoUploadsName @@ -35,8 +36,9 @@ import com.owncloud.android.domain.camerauploads.usecases.SaveVideoUploadsConfig import com.owncloud.android.domain.files.model.OCFile import com.owncloud.android.domain.spaces.model.OCSpace import com.owncloud.android.domain.spaces.usecases.GetPersonalSpaceForAccountUseCase -import com.owncloud.android.domain.spaces.usecases.GetSpaceByIdUseCase +import com.owncloud.android.domain.spaces.usecases.GetSpaceByIdForAccountUseCase import com.owncloud.android.providers.AccountProvider +import com.owncloud.android.providers.ContextProvider import com.owncloud.android.providers.CoroutinesDispatcherProvider import com.owncloud.android.providers.WorkManagerProvider import com.owncloud.android.ui.activity.FolderPickerActivity @@ -53,16 +55,16 @@ class SettingsVideoUploadsViewModel( private val getVideoUploadsConfigurationStreamUseCase: GetVideoUploadsConfigurationStreamUseCase, private val resetVideoUploadsUseCase: ResetVideoUploadsUseCase, private val getPersonalSpaceForAccountUseCase: GetPersonalSpaceForAccountUseCase, - private val getSpaceByIdUseCase: GetSpaceByIdUseCase, + private val getSpaceByIdForAccountUseCase: GetSpaceByIdForAccountUseCase, private val workManagerProvider: WorkManagerProvider, private val coroutinesDispatcherProvider: CoroutinesDispatcherProvider, + private val contextProvider: ContextProvider, ) : ViewModel() { private val _videoUploads: MutableStateFlow = MutableStateFlow(null) val videoUploads: StateFlow = _videoUploads - private val _spaceFlow: MutableStateFlow = MutableStateFlow(null) - + private var _space: OCSpace? = null init { initVideoUploads() } @@ -70,6 +72,9 @@ class SettingsVideoUploadsViewModel( private fun initVideoUploads() { viewModelScope.launch(coroutinesDispatcherProvider.io) { getVideoUploadsConfigurationStreamUseCase(Unit).collect { videoUploadsConfiguration -> + if(videoUploadsConfiguration?.accountName != null) { + getSpaceById(spaceId = videoUploadsConfiguration.spaceId, accountName = videoUploadsConfiguration.accountName) + } _videoUploads.update { videoUploadsConfiguration } } } @@ -84,7 +89,7 @@ class SettingsVideoUploadsViewModel( SaveVideoUploadsConfigurationUseCase.Params( composeVideoUploadsConfiguration( accountName = name, - spaceId = _spaceFlow.value?.id, + spaceId = _space?.id, ) ) ) @@ -128,13 +133,12 @@ class SettingsVideoUploadsViewModel( val folderToUpload = data?.getParcelableExtra(FolderPickerActivity.EXTRA_FOLDER) folderToUpload?.remotePath?.let { viewModelScope.launch(coroutinesDispatcherProvider.io) { - getSpaceById(_videoUploads.value?.accountName!!, folderToUpload.spaceId) + getSpaceById(spaceId = folderToUpload.spaceId, accountName = _videoUploads.value?.accountName!!) saveVideoUploadsConfigurationUseCase( SaveVideoUploadsConfigurationUseCase.Params( composeVideoUploadsConfiguration( uploadPath = it, - spaceId = _spaceFlow.value?.id, - spaceName = _spaceFlow.value?.name, + spaceId = _space?.id, ) ) ) @@ -150,7 +154,7 @@ class SettingsVideoUploadsViewModel( composeVideoUploadsConfiguration( accountName = accountName, uploadPath = null, - spaceId = _spaceFlow.value?.id, + spaceId = _space?.id, ) ) ) @@ -196,7 +200,6 @@ class SettingsVideoUploadsViewModel( behavior: UploadBehavior? = _videoUploads.value?.behavior, timestamp: Long? = _videoUploads.value?.lastSyncTimestamp, spaceId: String? = _videoUploads.value?.spaceId, - spaceName: String? = _spaceFlow.value?.name, ): FolderBackUpConfiguration = FolderBackUpConfiguration( accountName = accountName ?: accountProvider.getCurrentOwnCloudAccount()!!.name, @@ -208,20 +211,24 @@ class SettingsVideoUploadsViewModel( lastSyncTimestamp = timestamp ?: System.currentTimeMillis(), name = _videoUploads.value?.name ?: videoUploadsName, spaceId = spaceId, - spaceName = handleSpaceName(spaceName), ).also { Timber.d("Video uploads configuration updated. New configuration: $it") } private fun handleSpaceName(spaceName: String?): String? { - return if (_spaceFlow.value?.isPersonal == true) { - PERSONAL_SPACE_NAME + return if (_space?.isPersonal == true) { + contextProvider.getString(R.string.bottom_nav_personal) } else { spaceName } } - fun modifyUploadPath(uploadPath: String?, spaceId: String?, spaceName: String?): String { + fun getUploadPathString(): String { + + val spaceName = handleSpaceName(_space?.name) + val uploadPath = videoUploads.value?.uploadPath + val spaceId = videoUploads.value?.spaceId + return if (uploadPath != null) { if (spaceId != null) { "$spaceName: $uploadPath" @@ -243,20 +250,16 @@ class SettingsVideoUploadsViewModel( accountName = accountName ) ) - _spaceFlow.value = result + _space = result } - private fun getSpaceById(accountName: String, spaceId: String?) { - val result = getSpaceByIdUseCase( - GetSpaceByIdUseCase.Params( + private fun getSpaceById(spaceId: String?, accountName: String) { + val result = getSpaceByIdForAccountUseCase( + GetSpaceByIdForAccountUseCase.Params( accountName = accountName, spaceId = spaceId ) ) - _spaceFlow.value = result - } - - companion object { - private const val PERSONAL_SPACE_NAME = "Personal" + _space = result } } diff --git a/owncloudApp/src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.kt b/owncloudApp/src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.kt index 0ca5ceb5947a..d4b5881c6616 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.kt @@ -86,13 +86,9 @@ open class FolderPickerActivity : FileActivity(), } } PickerMode.CAMERA_FOLDER -> { - // Show the personal space - initAndShowListOfFilesFragment(spaceId = null) - } - PickerMode.UPLOAD_PATH -> { - val personalSpaceId = intent.getStringExtra(KEY_PERSONAL_SPACE_ID) + val spaceId = intent.getStringExtra(KEY_SPACE_ID) - if (personalSpaceId != null) { + if (spaceId != null) { // Show the list of spaces initAndShowListOfSpaces() } else { @@ -356,7 +352,7 @@ open class FolderPickerActivity : FileActivity(), } enum class PickerMode { - MOVE, COPY, CAMERA_FOLDER, UPLOAD_PATH; + MOVE, COPY, CAMERA_FOLDER; @StringRes fun toStringRes(): Int { @@ -364,14 +360,13 @@ open class FolderPickerActivity : FileActivity(), MOVE -> R.string.folder_picker_move_here_button_text COPY -> R.string.folder_picker_copy_here_button_text CAMERA_FOLDER -> R.string.folder_picker_choose_button_text - UPLOAD_PATH -> R.string.folder_picker_choose_button_text } } } companion object { const val KEY_ACCOUNT_NAME = "KEY_ACCOUNT_NAME" - const val KEY_PERSONAL_SPACE_ID = "KEY_PERSONAL_SPACE_ID" + const val KEY_SPACE_ID = "KEY_PERSONAL_SPACE_ID" const val EXTRA_FOLDER = "FOLDER_PICKER_EXTRA_FOLDER" const val EXTRA_FILES = "FOLDER_PICKER_EXTRA_FILES" const val EXTRA_PICKER_MODE = "FOLDER_PICKER_EXTRA_PICKER_MODE"