getUser() can return null more often than before, since the SDK will retrieve data asynchronously. So ensure that the initial state can always be built.
This commit is contained in:
parent
8fc35ef792
commit
0a6d620f27
@ -29,11 +29,13 @@ import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
|||||||
import im.vector.app.core.di.SingletonEntryPoint
|
import im.vector.app.core.di.SingletonEntryPoint
|
||||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||||
import im.vector.app.core.platform.VectorViewModel
|
import im.vector.app.core.platform.VectorViewModel
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import org.matrix.android.sdk.api.extensions.tryOrNull
|
||||||
import org.matrix.android.sdk.api.session.Session
|
import org.matrix.android.sdk.api.session.Session
|
||||||
import org.matrix.android.sdk.api.session.crypto.crosssigning.MXCrossSigningInfo
|
import org.matrix.android.sdk.api.session.crypto.crosssigning.MXCrossSigningInfo
|
||||||
import org.matrix.android.sdk.api.session.crypto.model.CryptoDeviceInfo
|
import org.matrix.android.sdk.api.session.crypto.model.CryptoDeviceInfo
|
||||||
import org.matrix.android.sdk.api.session.crypto.verification.VerificationMethod
|
import org.matrix.android.sdk.api.session.crypto.verification.VerificationMethod
|
||||||
import org.matrix.android.sdk.api.session.getUser
|
import org.matrix.android.sdk.api.session.getUserOrDefault
|
||||||
import org.matrix.android.sdk.api.util.MatrixItem
|
import org.matrix.android.sdk.api.util.MatrixItem
|
||||||
import org.matrix.android.sdk.api.util.toMatrixItem
|
import org.matrix.android.sdk.api.util.toMatrixItem
|
||||||
import org.matrix.android.sdk.flow.flow
|
import org.matrix.android.sdk.flow.flow
|
||||||
@ -60,17 +62,15 @@ class DeviceListBottomSheetViewModel @AssistedInject constructor(
|
|||||||
|
|
||||||
companion object : MavericksViewModelFactory<DeviceListBottomSheetViewModel, DeviceListViewState> by hiltMavericksViewModelFactory() {
|
companion object : MavericksViewModelFactory<DeviceListBottomSheetViewModel, DeviceListViewState> by hiltMavericksViewModelFactory() {
|
||||||
|
|
||||||
override fun initialState(viewModelContext: ViewModelContext): DeviceListViewState? {
|
override fun initialState(viewModelContext: ViewModelContext): DeviceListViewState {
|
||||||
val args = viewModelContext.args<DeviceListBottomSheet.Args>()
|
val args = viewModelContext.args<DeviceListBottomSheet.Args>()
|
||||||
val userId = args.userId
|
val userId = args.userId
|
||||||
val session = EntryPoints.get(viewModelContext.app(), SingletonEntryPoint::class.java).activeSessionHolder().getActiveSession()
|
val session = EntryPoints.get(viewModelContext.app(), SingletonEntryPoint::class.java).activeSessionHolder().getActiveSession()
|
||||||
return session.getUser(userId)?.toMatrixItem()?.let {
|
return DeviceListViewState(
|
||||||
DeviceListViewState(
|
userId = userId,
|
||||||
userId = userId,
|
allowDeviceAction = args.allowDeviceAction,
|
||||||
allowDeviceAction = args.allowDeviceAction,
|
userItem = session.getUserOrDefault(userId).toMatrixItem(),
|
||||||
userItem = it,
|
)
|
||||||
)
|
|
||||||
} ?: return super.initialState(viewModelContext)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,6 +86,16 @@ class DeviceListBottomSheetViewModel @AssistedInject constructor(
|
|||||||
.execute {
|
.execute {
|
||||||
copy(memberCrossSigningKey = it.invoke()?.getOrNull())
|
copy(memberCrossSigningKey = it.invoke()?.getOrNull())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateMatrixItem()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateMatrixItem() {
|
||||||
|
viewModelScope.launch {
|
||||||
|
tryOrNull { session.userService().resolveUser(initialState.userId) }
|
||||||
|
?.toMatrixItem()
|
||||||
|
?.let { setState { copy(userItem = it) } }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun handle(action: DeviceListAction) {
|
override fun handle(action: DeviceListAction) {
|
||||||
|
Loading…
Reference in New Issue
Block a user