diff --git a/storage-sample/src/main/java/com/omh/android/storage/sample/presentation/file_viewer/FileViewerActivity.kt b/storage-sample/src/main/java/com/omh/android/storage/sample/presentation/file_viewer/FileViewerActivity.kt index c58f6b1a..4e072e6c 100644 --- a/storage-sample/src/main/java/com/omh/android/storage/sample/presentation/file_viewer/FileViewerActivity.kt +++ b/storage-sample/src/main/java/com/omh/android/storage/sample/presentation/file_viewer/FileViewerActivity.kt @@ -46,7 +46,8 @@ class FileViewerActivity : private lateinit var binding: ActivityFileViewerBinding private var filesAdapter: FileAdapter? = null private lateinit var onBackPressedCallback: OnBackPressedCallback - private lateinit var filePicker: ActivityResultLauncher + private lateinit var filePickerUpload: ActivityResultLauncher + private lateinit var filePickerUpdate: ActivityResultLauncher private lateinit var requestPermissionLauncher: ActivityResultLauncher> override fun onCreate(savedInstanceState: Bundle?) { @@ -61,17 +62,18 @@ class FileViewerActivity : } } - filePicker = registerForActivityResult( + filePickerUpload = registerForActivityResult(ActivityResultContracts.GetContent() + ) { uri: Uri? -> + uri?.let { + showUploadFileDialog(uri) + } + } + + filePickerUpdate = registerForActivityResult( ActivityResultContracts.GetContent() ) { uri: Uri? -> uri?.let { - val fileName = DocumentFile.fromSingleUri(this, uri)?.name - ?: FileViewerViewModel.DEFAULT_FILE_NAME - if (viewModel.isUpload) { - showUploadFileDialog(uri, fileName) - } else { - showUpdateFileDialog(uri, fileName) - } + showUpdateFileDialog(uri) } } @@ -95,6 +97,9 @@ class FileViewerActivity : } } + private fun getFileName(uri: Uri) = (DocumentFile.fromSingleUri(this, uri)?.name + ?: FileViewerViewModel.DEFAULT_FILE_NAME) + override fun onResume() { super.onResume() onBackPressedDispatcher.addCallback(this, onBackPressedCallback) @@ -116,8 +121,7 @@ class FileViewerActivity : } R.id.uploadFile -> { - viewModel.isUpload = true - filePicker.launch(FileViewerViewModel.ANY_MIME_TYPE) + filePickerUpload.launch(FileViewerViewModel.ANY_MIME_TYPE) } R.id.signOut -> { @@ -135,6 +139,7 @@ class FileViewerActivity : FileViewerViewState.Finish -> buildFinishState() FileViewerViewState.CheckPermissions -> requestPermissions() FileViewerViewState.SignOut -> buildSignOutState() + is FileViewerViewState.FilePicker -> buildFilePicker() } private fun buildInitialState() { @@ -201,9 +206,11 @@ class FileViewerActivity : } override fun onUpdateClicked(file: OmhFile) { - viewModel.lastFileClicked = file - viewModel.isUpload = false - filePicker.launch(FileViewerViewModel.ANY_MIME_TYPE) + dispatchEvent(FileViewerViewEvent.UpdateFileClicked(file)) + } + + private fun buildFilePicker() { + filePickerUpdate.launch(FileViewerViewModel.ANY_MIME_TYPE) } private fun buildFinishState() = finish().also { finishAffinity() } @@ -277,8 +284,10 @@ class FileViewerActivity : } } - private fun showUploadFileDialog(uri: Uri, fileName: String) { + private fun showUploadFileDialog(uri: Uri) { val dialogUploadFileView = DialogUploadFileBinding.inflate(layoutInflater) + val fileName = getFileName(uri) + dialogUploadFileView.fileName.text = fileName val uploadFileDialogBuilder = AlertDialog.Builder(this) @@ -298,8 +307,10 @@ class FileViewerActivity : createFileAlertDialog.show() } - private fun showUpdateFileDialog(uri: Uri, fileName: String) { + private fun showUpdateFileDialog(uri: Uri) { val dialogUploadFileView = DialogUploadFileBinding.inflate(layoutInflater) + val fileName = getFileName(uri) + dialogUploadFileView.fileName.text = fileName val uploadFileDialogBuilder = AlertDialog.Builder(this) diff --git a/storage-sample/src/main/java/com/omh/android/storage/sample/presentation/file_viewer/FileViewerViewEvent.kt b/storage-sample/src/main/java/com/omh/android/storage/sample/presentation/file_viewer/FileViewerViewEvent.kt index 84cd0bbe..7f48a5f4 100644 --- a/storage-sample/src/main/java/com/omh/android/storage/sample/presentation/file_viewer/FileViewerViewEvent.kt +++ b/storage-sample/src/main/java/com/omh/android/storage/sample/presentation/file_viewer/FileViewerViewEvent.kt @@ -61,4 +61,9 @@ sealed class FileViewerViewEvent : ViewEvent { override fun getEventName() = "FileViewerViewEvent.SignOut" } + + class UpdateFileClicked(val file: OmhFile) : FileViewerViewEvent() { + + override fun getEventName() = "FileViewerViewEvent.UpdateFileClicked" + } } diff --git a/storage-sample/src/main/java/com/omh/android/storage/sample/presentation/file_viewer/FileViewerViewModel.kt b/storage-sample/src/main/java/com/omh/android/storage/sample/presentation/file_viewer/FileViewerViewModel.kt index acf4d4d4..21d61e59 100644 --- a/storage-sample/src/main/java/com/omh/android/storage/sample/presentation/file_viewer/FileViewerViewModel.kt +++ b/storage-sample/src/main/java/com/omh/android/storage/sample/presentation/file_viewer/FileViewerViewModel.kt @@ -59,6 +59,7 @@ class FileViewerViewModel @Inject constructor( is FileViewerViewEvent.UpdateFile -> updateFile(event) FileViewerViewEvent.SignOut -> signOut() FileViewerViewEvent.DownloadFile -> downloadFileEvent() + is FileViewerViewEvent.UpdateFileClicked -> updateFileClicked(event) } } @@ -112,14 +113,14 @@ class FileViewerViewModel @Inject constructor( } private fun downloadFileEvent() { - setState(FileViewerViewState.Loading) - lastFileClicked?.let { file -> if (!file.isDownloadable()) { toastMessage.postValue("${file.name} is not downloadable") return } + setState(FileViewerViewState.Loading) + val mimeType = file.normalizedMimeType() val cancellable = omhStorageClient.downloadFile(file.id, mimeType) .addOnSuccess { data -> @@ -264,6 +265,11 @@ class FileViewerViewModel @Inject constructor( cancellableCollector.addCancellable(cancellable) } + private fun updateFileClicked(event: FileViewerViewEvent.UpdateFileClicked) { + lastFileClicked = event.file + setState(FileViewerViewState.FilePicker) + } + private fun handleDownloadSuccess( result: DownloadFileUseCaseResult, file: OmhFile diff --git a/storage-sample/src/main/java/com/omh/android/storage/sample/presentation/file_viewer/FileViewerViewState.kt b/storage-sample/src/main/java/com/omh/android/storage/sample/presentation/file_viewer/FileViewerViewState.kt index ebc51fe0..af462878 100644 --- a/storage-sample/src/main/java/com/omh/android/storage/sample/presentation/file_viewer/FileViewerViewState.kt +++ b/storage-sample/src/main/java/com/omh/android/storage/sample/presentation/file_viewer/FileViewerViewState.kt @@ -39,4 +39,9 @@ sealed class FileViewerViewState : ViewState { override fun getName() = "FileViewerViewState.SignOut" } + + object FilePicker : FileViewerViewState() { + + override fun getName() = "FileViewerViewState.FilePicker" + } }