From abeb741cad9c35af7fba5594c5937d7910efb52b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 7 Feb 2020 19:50:15 +0100 Subject: [PATCH] Convert to ViewEvents -> RoomDetailViewModel part 5 --- .../home/room/detail/DownloadFileState.kt | 25 ------------------- .../home/room/detail/RoomDetailFragment.kt | 22 ++++++++-------- .../home/room/detail/RoomDetailViewEvents.kt | 7 ++++++ .../home/room/detail/RoomDetailViewModel.kt | 13 ++-------- 4 files changed, 20 insertions(+), 47 deletions(-) delete mode 100644 vector/src/main/java/im/vector/riotx/features/home/room/detail/DownloadFileState.kt diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/DownloadFileState.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/DownloadFileState.kt deleted file mode 100644 index 717c59aade..0000000000 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/DownloadFileState.kt +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2019 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package im.vector.riotx.features.home.room.detail - -import java.io.File - -data class DownloadFileState( - val mimeType: String, - val file: File?, - val throwable: Throwable? - ) diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt index 61ea7da608..9e4d7d8163 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt @@ -89,7 +89,6 @@ import im.vector.riotx.core.epoxy.LayoutManagerStateRestorer import im.vector.riotx.core.extensions.cleanup import im.vector.riotx.core.extensions.exhaustive import im.vector.riotx.core.extensions.hideKeyboard -import im.vector.riotx.core.extensions.observeEvent import im.vector.riotx.core.extensions.setTextOrHide import im.vector.riotx.core.extensions.showKeyboard import im.vector.riotx.core.files.addEntryToDownloadManager @@ -265,16 +264,6 @@ class RoomDetailFragment @Inject constructor( renderTombstoneEventHandling(it) } - roomDetailViewModel.downloadedFileEvent.observeEvent(this) { downloadFileState -> - val activity = requireActivity() - if (downloadFileState.throwable != null) { - activity.toast(errorFormatter.toHumanReadable(downloadFileState.throwable)) - } else if (downloadFileState.file != null) { - activity.toast(getString(R.string.downloaded_file, downloadFileState.file.path)) - addEntryToDownloadManager(activity, downloadFileState.file, downloadFileState.mimeType) - } - } - roomDetailViewModel.selectSubscribe(RoomDetailViewState::sendMode) { mode -> when (mode) { is SendMode.REGULAR -> renderRegularMode(mode.text) @@ -297,6 +286,7 @@ class RoomDetailFragment @Inject constructor( is RoomDetailViewEvents.ShowMessage -> showSnackWithMessage(it.message, Snackbar.LENGTH_LONG) is RoomDetailViewEvents.NavigateToEvent -> navigateToEvent(it) is RoomDetailViewEvents.FileTooBigError -> displayFileTooBigError(it) + is RoomDetailViewEvents.DownloadFileState -> handleDownloadFileState(it) is RoomDetailViewEvents.SendMessageResult -> renderSendMessageResult(it) }.exhaustive } @@ -374,6 +364,16 @@ class RoomDetailFragment @Inject constructor( .show() } + private fun handleDownloadFileState(action: RoomDetailViewEvents.DownloadFileState) { + val activity = requireActivity() + if (action.throwable != null) { + activity.toast(errorFormatter.toHumanReadable(action.throwable)) + } else if (action.file != null) { + activity.toast(getString(R.string.downloaded_file, action.file.path)) + addEntryToDownloadManager(activity, action.file, action.mimeType) + } + } + private fun setupNotificationView() { notificationAreaView.delegate = object : NotificationAreaView.Delegate { override fun onTombstoneEventClicked(tombstoneEvent: Event) { diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailViewEvents.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailViewEvents.kt index f3c8333554..fcbe7f37c0 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailViewEvents.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailViewEvents.kt @@ -19,6 +19,7 @@ package im.vector.riotx.features.home.room.detail import androidx.annotation.StringRes import im.vector.riotx.core.platform.VectorViewEvents import im.vector.riotx.features.command.Command +import java.io.File /** * Transient events for RoomDetail @@ -40,6 +41,12 @@ sealed class RoomDetailViewEvents : VectorViewEvents { val homeServerLimitInBytes: Long ) : RoomDetailViewEvents() + data class DownloadFileState( + val mimeType: String, + val file: File?, + val throwable: Throwable? + ) : RoomDetailViewEvents() + abstract class SendMessageResult : RoomDetailViewEvents() object MessageSent : SendMessageResult() diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailViewModel.kt index ef3afa8272..710c70a948 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailViewModel.kt @@ -18,8 +18,6 @@ package im.vector.riotx.features.home.room.detail import android.net.Uri import androidx.annotation.IdRes -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import com.airbnb.mvrx.FragmentViewModelContext import com.airbnb.mvrx.MvRxViewModelFactory import com.airbnb.mvrx.Success @@ -60,11 +58,9 @@ import im.vector.matrix.rx.rx import im.vector.matrix.rx.unwrap import im.vector.riotx.R import im.vector.riotx.core.extensions.exhaustive -import im.vector.riotx.core.extensions.postLiveEvent import im.vector.riotx.core.platform.VectorViewModel import im.vector.riotx.core.resources.StringProvider import im.vector.riotx.core.resources.UserPreferencesProvider -import im.vector.riotx.core.utils.LiveEvent import im.vector.riotx.core.utils.subscribeLogError import im.vector.riotx.features.command.CommandParser import im.vector.riotx.features.command.ParsedCommand @@ -313,11 +309,6 @@ class RoomDetailViewModel @AssistedInject constructor(@Assisted initialState: Ro } } - // TODO Cleanup this and use ViewEvents - private val _downloadedFileEvent = MutableLiveData>() - val downloadedFileEvent: LiveData> - get() = _downloadedFileEvent - fun isMenuItemVisible(@IdRes itemId: Int) = when (itemId) { R.id.clear_message_queue -> /* For now always disable on production, worker cancellation is not working properly */ @@ -701,7 +692,7 @@ class RoomDetailViewModel @AssistedInject constructor(@Assisted initialState: Ro action.messageFileContent.encryptedFileInfo?.toElementToDecrypt(), object : MatrixCallback { override fun onSuccess(data: File) { - _downloadedFileEvent.postLiveEvent(DownloadFileState( + _viewEvents.post(RoomDetailViewEvents.DownloadFileState( action.messageFileContent.getMimeType(), data, null @@ -709,7 +700,7 @@ class RoomDetailViewModel @AssistedInject constructor(@Assisted initialState: Ro } override fun onFailure(failure: Throwable) { - _downloadedFileEvent.postLiveEvent(DownloadFileState( + _viewEvents.post(RoomDetailViewEvents.DownloadFileState( action.messageFileContent.getMimeType(), null, failure