mirror of
https://github.com/element-hq/element-android
synced 2024-11-28 13:38:49 +03:00
Convert to ViewEvents -> RoomMemberProfileViewModel
This commit is contained in:
parent
256a6e4322
commit
24667f38b8
4 changed files with 33 additions and 48 deletions
|
@ -20,8 +20,7 @@ package im.vector.riotx.features.roommemberprofile
|
|||
import im.vector.riotx.core.platform.VectorViewModelAction
|
||||
|
||||
sealed class RoomMemberProfileAction : VectorViewModelAction {
|
||||
|
||||
object RetryFetchingInfo: RoomMemberProfileAction()
|
||||
object IgnoreUser: RoomMemberProfileAction()
|
||||
data class VerifyUser(val userId: String? = null, val roomId: String? = null, val canCrossSign: Boolean? = true): RoomMemberProfileAction()
|
||||
object RetryFetchingInfo : RoomMemberProfileAction()
|
||||
object IgnoreUser : RoomMemberProfileAction()
|
||||
object VerifyUser : RoomMemberProfileAction()
|
||||
}
|
||||
|
|
|
@ -35,7 +35,6 @@ import im.vector.riotx.core.animations.MatrixItemAppBarStateChangeListener
|
|||
import im.vector.riotx.core.extensions.cleanup
|
||||
import im.vector.riotx.core.extensions.configureWith
|
||||
import im.vector.riotx.core.extensions.exhaustive
|
||||
import im.vector.riotx.core.extensions.observeEvent
|
||||
import im.vector.riotx.core.extensions.setTextOrHide
|
||||
import im.vector.riotx.core.platform.StateView
|
||||
import im.vector.riotx.core.platform.VectorBaseFragment
|
||||
|
@ -94,33 +93,27 @@ class RoomMemberProfileFragment @Inject constructor(
|
|||
is RoomMemberProfileViewEvents.Loading -> showLoading(it.message)
|
||||
is RoomMemberProfileViewEvents.Failure -> showFailure(it.throwable)
|
||||
is RoomMemberProfileViewEvents.OnIgnoreActionSuccess -> Unit
|
||||
is RoomMemberProfileViewEvents.StartVerification -> handleStartVerification(it)
|
||||
}.exhaustive
|
||||
}
|
||||
viewModel.actionResultLiveData.observeEvent(this) { async ->
|
||||
when (async) {
|
||||
is Success -> {
|
||||
when (val action = async.invoke()) {
|
||||
is RoomMemberProfileAction.VerifyUser -> {
|
||||
if (action.canCrossSign == true) {
|
||||
VerificationBottomSheet
|
||||
.withArgs(roomId = null, otherUserId = action.userId!!)
|
||||
.show(parentFragmentManager, "VERIF")
|
||||
} else {
|
||||
AlertDialog.Builder(requireContext())
|
||||
.setTitle(R.string.dialog_title_warning)
|
||||
.setMessage(R.string.verify_cannot_cross_sign)
|
||||
.setPositiveButton(R.string.verification_profile_verify) { _, _ ->
|
||||
VerificationBottomSheet
|
||||
.withArgs(roomId = null, otherUserId = action.userId!!)
|
||||
.show(parentFragmentManager, "VERIF")
|
||||
}
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleStartVerification(startVerification: RoomMemberProfileViewEvents.StartVerification) {
|
||||
if (startVerification.canCrossSign) {
|
||||
VerificationBottomSheet
|
||||
.withArgs(roomId = null, otherUserId = startVerification.userId)
|
||||
.show(parentFragmentManager, "VERIF")
|
||||
} else {
|
||||
AlertDialog.Builder(requireContext())
|
||||
.setTitle(R.string.dialog_title_warning)
|
||||
.setMessage(R.string.verify_cannot_cross_sign)
|
||||
.setPositiveButton(R.string.verification_profile_verify) { _, _ ->
|
||||
VerificationBottomSheet
|
||||
.withArgs(roomId = null, otherUserId = startVerification.userId)
|
||||
.show(parentFragmentManager, "VERIF")
|
||||
}
|
||||
}
|
||||
}
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -197,7 +190,7 @@ class RoomMemberProfileFragment @Inject constructor(
|
|||
}
|
||||
|
||||
override fun onTapVerify() {
|
||||
viewModel.handle(RoomMemberProfileAction.VerifyUser())
|
||||
viewModel.handle(RoomMemberProfileAction.VerifyUser)
|
||||
}
|
||||
|
||||
override fun onShowDeviceList() = withState(viewModel) {
|
||||
|
|
|
@ -26,4 +26,9 @@ sealed class RoomMemberProfileViewEvents : VectorViewEvents {
|
|||
data class Failure(val throwable: Throwable) : RoomMemberProfileViewEvents()
|
||||
|
||||
object OnIgnoreActionSuccess : RoomMemberProfileViewEvents()
|
||||
|
||||
data class StartVerification(
|
||||
val userId: String,
|
||||
val canCrossSign: Boolean
|
||||
) : RoomMemberProfileViewEvents()
|
||||
}
|
||||
|
|
|
@ -17,10 +17,7 @@
|
|||
|
||||
package im.vector.riotx.features.roommemberprofile
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.airbnb.mvrx.Async
|
||||
import com.airbnb.mvrx.FragmentViewModelContext
|
||||
import com.airbnb.mvrx.MvRxViewModelFactory
|
||||
import com.airbnb.mvrx.Success
|
||||
|
@ -49,7 +46,6 @@ import im.vector.matrix.rx.unwrap
|
|||
import im.vector.riotx.R
|
||||
import im.vector.riotx.core.platform.VectorViewModel
|
||||
import im.vector.riotx.core.resources.StringProvider
|
||||
import im.vector.riotx.core.utils.LiveEvent
|
||||
import io.reactivex.Observable
|
||||
import io.reactivex.functions.BiFunction
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
@ -75,10 +71,6 @@ class RoomMemberProfileViewModel @AssistedInject constructor(@Assisted private v
|
|||
}
|
||||
}
|
||||
|
||||
private val _actionResultLiveData = MutableLiveData<LiveEvent<Async<RoomMemberProfileAction>>>()
|
||||
val actionResultLiveData: LiveData<LiveEvent<Async<RoomMemberProfileAction>>>
|
||||
get() = _actionResultLiveData
|
||||
|
||||
private val room = if (initialState.roomId != null) {
|
||||
session.getRoom(initialState.roomId)
|
||||
} else {
|
||||
|
@ -145,23 +137,19 @@ class RoomMemberProfileViewModel @AssistedInject constructor(@Assisted private v
|
|||
when (action) {
|
||||
is RoomMemberProfileAction.RetryFetchingInfo -> fetchProfileInfo()
|
||||
is RoomMemberProfileAction.IgnoreUser -> handleIgnoreAction()
|
||||
is RoomMemberProfileAction.VerifyUser -> prepareVerification(action)
|
||||
is RoomMemberProfileAction.VerifyUser -> prepareVerification()
|
||||
}
|
||||
}
|
||||
|
||||
private fun prepareVerification(action: RoomMemberProfileAction.VerifyUser) = withState { state ->
|
||||
private fun prepareVerification() = withState { state ->
|
||||
// Sanity
|
||||
if (state.isRoomEncrypted) {
|
||||
if (!state.isMine && state.userMXCrossSigningInfo?.isTrusted() == false) {
|
||||
// ok, let's find or create the DM room
|
||||
_actionResultLiveData.postValue(
|
||||
LiveEvent(Success(
|
||||
action.copy(
|
||||
userId = state.userId,
|
||||
canCrossSign = session.getCrossSigningService().canCrossSign()
|
||||
)
|
||||
))
|
||||
)
|
||||
_viewEvents.post(RoomMemberProfileViewEvents.StartVerification(
|
||||
userId = state.userId,
|
||||
canCrossSign = session.getCrossSigningService().canCrossSign()
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue