diff --git a/vector/src/main/java/im/vector/riotx/features/roomdirectory/PublicRoomsFragment.kt b/vector/src/main/java/im/vector/riotx/features/roomdirectory/PublicRoomsFragment.kt index 580844ddfa..0cb2a7feca 100644 --- a/vector/src/main/java/im/vector/riotx/features/roomdirectory/PublicRoomsFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/roomdirectory/PublicRoomsFragment.kt @@ -28,7 +28,7 @@ import im.vector.matrix.android.api.session.room.model.roomdirectory.PublicRoom import im.vector.riotx.R import im.vector.riotx.core.extensions.cleanup import im.vector.riotx.core.extensions.configureWith -import im.vector.riotx.core.extensions.observeEvent +import im.vector.riotx.core.extensions.exhaustive import im.vector.riotx.core.platform.VectorBaseFragment import io.reactivex.rxkotlin.subscribeBy import kotlinx.android.synthetic.main.fragment_public_rooms.* @@ -75,13 +75,20 @@ class PublicRoomsFragment @Inject constructor( sharedActionViewModel.post(RoomDirectorySharedAction.CreateRoom) } - // TODO remove this, replace by ViewEvents - viewModel.joinRoomErrorLiveData.observeEvent(this) { throwable -> - Snackbar.make(publicRoomsCoordinator, errorFormatter.toHumanReadable(throwable), Snackbar.LENGTH_SHORT) - .show() + viewModel.observeViewEvents { + handleViewEvents(it) } } + private fun handleViewEvents(viewEvents: RoomDirectoryViewEvents) { + when (viewEvents) { + is RoomDirectoryViewEvents.Failure -> { + Snackbar.make(publicRoomsCoordinator, errorFormatter.toHumanReadable(viewEvents.throwable), Snackbar.LENGTH_SHORT) + .show() + } + }.exhaustive + } + override fun onDestroyView() { publicRoomsController.callback = null publicRoomsList.cleanup() diff --git a/vector/src/main/java/im/vector/riotx/features/roomdirectory/RoomDirectoryViewEvents.kt b/vector/src/main/java/im/vector/riotx/features/roomdirectory/RoomDirectoryViewEvents.kt new file mode 100644 index 0000000000..2fb46efd81 --- /dev/null +++ b/vector/src/main/java/im/vector/riotx/features/roomdirectory/RoomDirectoryViewEvents.kt @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2020 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.roomdirectory + +import im.vector.riotx.core.platform.VectorViewEvents + +/** + * Transient events for room directory screen + */ +sealed class RoomDirectoryViewEvents : VectorViewEvents { + // data class Loading(val message: CharSequence? = null) : RoomDirectoryViewEvents() + data class Failure(val throwable: Throwable) : RoomDirectoryViewEvents() +} diff --git a/vector/src/main/java/im/vector/riotx/features/roomdirectory/RoomDirectoryViewModel.kt b/vector/src/main/java/im/vector/riotx/features/roomdirectory/RoomDirectoryViewModel.kt index bab07795e9..9f81e8b076 100644 --- a/vector/src/main/java/im/vector/riotx/features/roomdirectory/RoomDirectoryViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/roomdirectory/RoomDirectoryViewModel.kt @@ -16,9 +16,13 @@ package im.vector.riotx.features.roomdirectory -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import com.airbnb.mvrx.* +import com.airbnb.mvrx.ActivityViewModelContext +import com.airbnb.mvrx.Fail +import com.airbnb.mvrx.Loading +import com.airbnb.mvrx.MvRxViewModelFactory +import com.airbnb.mvrx.Success +import com.airbnb.mvrx.ViewModelContext +import com.airbnb.mvrx.appendAt import com.squareup.inject.assisted.Assisted import com.squareup.inject.assisted.AssistedInject import im.vector.matrix.android.api.MatrixCallback @@ -32,17 +36,14 @@ import im.vector.matrix.android.api.session.room.model.thirdparty.RoomDirectoryD import im.vector.matrix.android.api.session.room.roomSummaryQueryParams import im.vector.matrix.android.api.util.Cancelable import im.vector.matrix.rx.rx -import im.vector.riotx.core.extensions.postLiveEvent -import im.vector.riotx.core.platform.EmptyViewEvents import im.vector.riotx.core.platform.VectorViewModel -import im.vector.riotx.core.utils.LiveEvent import timber.log.Timber private const val PUBLIC_ROOMS_LIMIT = 20 class RoomDirectoryViewModel @AssistedInject constructor(@Assisted initialState: PublicRoomsViewState, private val session: Session) - : VectorViewModel(initialState) { + : VectorViewModel(initialState) { @AssistedInject.Factory interface Factory { @@ -58,10 +59,6 @@ class RoomDirectoryViewModel @AssistedInject constructor(@Assisted initialState: } } - private val _joinRoomErrorLiveData = MutableLiveData>() - val joinRoomErrorLiveData: LiveData> - get() = _joinRoomErrorLiveData - private var since: String? = null private var currentTask: Cancelable? = null @@ -109,9 +106,9 @@ class RoomDirectoryViewModel @AssistedInject constructor(@Assisted initialState: override fun handle(action: RoomDirectoryAction) { when (action) { is RoomDirectoryAction.SetRoomDirectoryData -> setRoomDirectoryData(action) - is RoomDirectoryAction.FilterWith -> filterWith(action) - RoomDirectoryAction.LoadMore -> loadMore() - is RoomDirectoryAction.JoinRoom -> joinRoom(action) + is RoomDirectoryAction.FilterWith -> filterWith(action) + RoomDirectoryAction.LoadMore -> loadMore() + is RoomDirectoryAction.JoinRoom -> joinRoom(action) } } @@ -227,7 +224,7 @@ class RoomDirectoryViewModel @AssistedInject constructor(@Assisted initialState: override fun onFailure(failure: Throwable) { // Notify the user - _joinRoomErrorLiveData.postLiveEvent(failure) + _viewEvents.post(RoomDirectoryViewEvents.Failure(failure)) setState { copy(