Ensure MatrixItem.UserItem
is not null at other places
This commit is contained in:
parent
42fc601c59
commit
3ddaf0c51f
@ -32,5 +32,13 @@ fun Session.getRoomSummary(roomIdOrAlias: String): RoomSummary? = roomService().
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a user using the UserService of a Session.
|
* Get a user using the UserService of a Session.
|
||||||
|
* @param userId the userId to look for.
|
||||||
|
* @return a user with userId or null if the User is not known yet by the SDK.
|
||||||
|
* See [org.matrix.android.sdk.api.session.user.UserService.resolveUser] to ensure that a User is retrieved.
|
||||||
*/
|
*/
|
||||||
fun Session.getUser(userId: String): User? = userService().getUser(userId)
|
fun Session.getUser(userId: String): User? = userService().getUser(userId)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Similar to [getUser], but fallback to a User without details if the User is not known by the SDK, or if Session is null.
|
||||||
|
*/
|
||||||
|
fun Session?.getUserOrDefault(userId: String): User = this?.userService()?.getUser(userId) ?: User(userId)
|
||||||
|
@ -29,7 +29,7 @@ interface UserService {
|
|||||||
/**
|
/**
|
||||||
* Get a user from a userId.
|
* Get a user from a userId.
|
||||||
* @param userId the userId to look for.
|
* @param userId the userId to look for.
|
||||||
* @return a user with userId or null
|
* @return a user with userId or null if the User is not known yet by the SDK. See [resolveUser] to ensure that a User is retrieved.
|
||||||
*/
|
*/
|
||||||
fun getUser(userId: String): User?
|
fun getUser(userId: String): User?
|
||||||
|
|
||||||
|
@ -37,11 +37,10 @@ import kotlinx.coroutines.launch
|
|||||||
import org.matrix.android.sdk.api.extensions.orFalse
|
import org.matrix.android.sdk.api.extensions.orFalse
|
||||||
import org.matrix.android.sdk.api.raw.RawService
|
import org.matrix.android.sdk.api.raw.RawService
|
||||||
import org.matrix.android.sdk.api.session.Session
|
import org.matrix.android.sdk.api.session.Session
|
||||||
import org.matrix.android.sdk.api.session.getUser
|
import org.matrix.android.sdk.api.session.getUserOrDefault
|
||||||
import org.matrix.android.sdk.api.session.permalinks.PermalinkData
|
import org.matrix.android.sdk.api.session.permalinks.PermalinkData
|
||||||
import org.matrix.android.sdk.api.session.permalinks.PermalinkParser
|
import org.matrix.android.sdk.api.session.permalinks.PermalinkParser
|
||||||
import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams
|
import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams
|
||||||
import org.matrix.android.sdk.api.session.user.model.User
|
|
||||||
|
|
||||||
class CreateDirectRoomViewModel @AssistedInject constructor(
|
class CreateDirectRoomViewModel @AssistedInject constructor(
|
||||||
@Assisted initialState: CreateDirectRoomViewState,
|
@Assisted initialState: CreateDirectRoomViewState,
|
||||||
@ -78,11 +77,7 @@ class CreateDirectRoomViewModel @AssistedInject constructor(
|
|||||||
_viewEvents.post(CreateDirectRoomViewEvents.DmSelf)
|
_viewEvents.post(CreateDirectRoomViewEvents.DmSelf)
|
||||||
} else {
|
} else {
|
||||||
// Try to get user from known users and fall back to creating a User object from MXID
|
// Try to get user from known users and fall back to creating a User object from MXID
|
||||||
val qrInvitee = if (session.getUser(mxid) != null) {
|
val qrInvitee = session.getUserOrDefault(mxid)
|
||||||
session.getUser(mxid)!!
|
|
||||||
} else {
|
|
||||||
User(mxid, null, null)
|
|
||||||
}
|
|
||||||
onSubmitInvitees(setOf(PendingSelection.UserPendingSelection(qrInvitee)))
|
onSubmitInvitees(setOf(PendingSelection.UserPendingSelection(qrInvitee)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,7 @@ import org.matrix.android.sdk.api.session.crypto.verification.PendingVerificatio
|
|||||||
import org.matrix.android.sdk.api.session.crypto.verification.VerificationService
|
import org.matrix.android.sdk.api.session.crypto.verification.VerificationService
|
||||||
import org.matrix.android.sdk.api.session.crypto.verification.VerificationTransaction
|
import org.matrix.android.sdk.api.session.crypto.verification.VerificationTransaction
|
||||||
import org.matrix.android.sdk.api.session.crypto.verification.VerificationTxState
|
import org.matrix.android.sdk.api.session.crypto.verification.VerificationTxState
|
||||||
|
import org.matrix.android.sdk.api.session.getUserOrDefault
|
||||||
import org.matrix.android.sdk.api.util.toMatrixItem
|
import org.matrix.android.sdk.api.util.toMatrixItem
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@ -67,8 +68,8 @@ class IncomingVerificationRequestHandler @Inject constructor(
|
|||||||
when (tx.state) {
|
when (tx.state) {
|
||||||
is VerificationTxState.OnStarted -> {
|
is VerificationTxState.OnStarted -> {
|
||||||
// Add a notification for every incoming request
|
// Add a notification for every incoming request
|
||||||
val user = session?.userService()?.getUser(tx.otherUserId)
|
val user = session.getUserOrDefault(tx.otherUserId).toMatrixItem()
|
||||||
val name = user?.toMatrixItem()?.getBestName() ?: tx.otherUserId
|
val name = user.getBestName()
|
||||||
val alert = VerificationVectorAlert(
|
val alert = VerificationVectorAlert(
|
||||||
uid,
|
uid,
|
||||||
context.getString(R.string.sas_incoming_request_notif_title),
|
context.getString(R.string.sas_incoming_request_notif_title),
|
||||||
@ -86,7 +87,7 @@ class IncomingVerificationRequestHandler @Inject constructor(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
.apply {
|
.apply {
|
||||||
viewBinder = VerificationVectorAlert.ViewBinder(user?.toMatrixItem(), avatarRenderer.get())
|
viewBinder = VerificationVectorAlert.ViewBinder(user, avatarRenderer.get())
|
||||||
contentAction = Runnable {
|
contentAction = Runnable {
|
||||||
(weakCurrentActivity?.get() as? VectorBaseActivity<*>)?.let {
|
(weakCurrentActivity?.get() as? VectorBaseActivity<*>)?.let {
|
||||||
it.navigator.performDeviceVerification(it, tx.otherUserId, tx.transactionId)
|
it.navigator.performDeviceVerification(it, tx.otherUserId, tx.transactionId)
|
||||||
@ -131,8 +132,8 @@ class IncomingVerificationRequestHandler @Inject constructor(
|
|||||||
// XXX this is a bit hard coded :/
|
// XXX this is a bit hard coded :/
|
||||||
popupAlertManager.cancelAlert("review_login")
|
popupAlertManager.cancelAlert("review_login")
|
||||||
}
|
}
|
||||||
val user = session?.userService()?.getUser(pr.otherUserId)?.toMatrixItem()
|
val user = session.getUserOrDefault(pr.otherUserId).toMatrixItem()
|
||||||
val name = user?.getBestName() ?: pr.otherUserId
|
val name = user.getBestName()
|
||||||
val description = if (name == pr.otherUserId) {
|
val description = if (name == pr.otherUserId) {
|
||||||
name
|
name
|
||||||
} else {
|
} else {
|
||||||
|
@ -136,7 +136,7 @@ class VerificationEmojiCodeController @Inject constructor(
|
|||||||
if (state.isWaitingFromOther) {
|
if (state.isWaitingFromOther) {
|
||||||
bottomSheetVerificationWaitingItem {
|
bottomSheetVerificationWaitingItem {
|
||||||
id("waiting")
|
id("waiting")
|
||||||
title(host.stringProvider.getString(R.string.verification_request_waiting_for, state.otherUser?.getBestName() ?: ""))
|
title(host.stringProvider.getString(R.string.verification_request_waiting_for, state.otherUser.getBestName()))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
bottomSheetVerificationActionItem {
|
bottomSheetVerificationActionItem {
|
||||||
|
@ -68,13 +68,13 @@ class VerificationEmojiCodeFragment :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onMatchButtonTapped() = withState(viewModel) { state ->
|
override fun onMatchButtonTapped() = withState(viewModel) { state ->
|
||||||
val otherUserId = state.otherUser?.id ?: return@withState
|
val otherUserId = state.otherUser.id
|
||||||
val txId = state.transactionId ?: return@withState
|
val txId = state.transactionId ?: return@withState
|
||||||
sharedViewModel.handle(VerificationAction.SASMatchAction(otherUserId, txId))
|
sharedViewModel.handle(VerificationAction.SASMatchAction(otherUserId, txId))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDoNotMatchButtonTapped() = withState(viewModel) { state ->
|
override fun onDoNotMatchButtonTapped() = withState(viewModel) { state ->
|
||||||
val otherUserId = state.otherUser?.id ?: return@withState
|
val otherUserId = state.otherUser.id
|
||||||
val txId = state.transactionId ?: return@withState
|
val txId = state.transactionId ?: return@withState
|
||||||
sharedViewModel.handle(VerificationAction.SASDoNotMatchAction(otherUserId, txId))
|
sharedViewModel.handle(VerificationAction.SASDoNotMatchAction(otherUserId, txId))
|
||||||
}
|
}
|
||||||
|
@ -40,13 +40,13 @@ import org.matrix.android.sdk.api.session.crypto.verification.SasVerificationTra
|
|||||||
import org.matrix.android.sdk.api.session.crypto.verification.VerificationService
|
import org.matrix.android.sdk.api.session.crypto.verification.VerificationService
|
||||||
import org.matrix.android.sdk.api.session.crypto.verification.VerificationTransaction
|
import org.matrix.android.sdk.api.session.crypto.verification.VerificationTransaction
|
||||||
import org.matrix.android.sdk.api.session.crypto.verification.VerificationTxState
|
import org.matrix.android.sdk.api.session.crypto.verification.VerificationTxState
|
||||||
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
|
||||||
|
|
||||||
data class VerificationEmojiCodeViewState(
|
data class VerificationEmojiCodeViewState(
|
||||||
val transactionId: String?,
|
val transactionId: String?,
|
||||||
val otherUser: MatrixItem? = null,
|
val otherUser: MatrixItem,
|
||||||
val supportsEmoji: Boolean = true,
|
val supportsEmoji: Boolean = true,
|
||||||
val emojiDescription: Async<List<EmojiRepresentation>> = Uninitialized,
|
val emojiDescription: Async<List<EmojiRepresentation>> = Uninitialized,
|
||||||
val decimalDescription: Async<String> = Uninitialized,
|
val decimalDescription: Async<String> = Uninitialized,
|
||||||
@ -59,15 +59,13 @@ class VerificationEmojiCodeViewModel @AssistedInject constructor(
|
|||||||
) : VectorViewModel<VerificationEmojiCodeViewState, EmptyAction, EmptyViewEvents>(initialState), VerificationService.Listener {
|
) : VectorViewModel<VerificationEmojiCodeViewState, EmptyAction, EmptyViewEvents>(initialState), VerificationService.Listener {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
withState { state ->
|
refreshStateFromTx(
|
||||||
refreshStateFromTx(
|
session.cryptoService().verificationService()
|
||||||
session.cryptoService().verificationService()
|
.getExistingTransaction(
|
||||||
.getExistingTransaction(
|
otherUserId = initialState.otherUser.id,
|
||||||
state.otherUser?.id ?: "", state.transactionId
|
tid = initialState.transactionId ?: ""
|
||||||
?: ""
|
) as? SasVerificationTransaction
|
||||||
) as? SasVerificationTransaction
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
session.cryptoService().verificationService().addListener(this)
|
session.cryptoService().verificationService().addListener(this)
|
||||||
}
|
}
|
||||||
@ -165,10 +163,10 @@ class VerificationEmojiCodeViewModel @AssistedInject constructor(
|
|||||||
|
|
||||||
companion object : MavericksViewModelFactory<VerificationEmojiCodeViewModel, VerificationEmojiCodeViewState> by hiltMavericksViewModelFactory() {
|
companion object : MavericksViewModelFactory<VerificationEmojiCodeViewModel, VerificationEmojiCodeViewState> by hiltMavericksViewModelFactory() {
|
||||||
|
|
||||||
override fun initialState(viewModelContext: ViewModelContext): VerificationEmojiCodeViewState? {
|
override fun initialState(viewModelContext: ViewModelContext): VerificationEmojiCodeViewState {
|
||||||
val args = viewModelContext.args<VerificationBottomSheet.VerificationArgs>()
|
val args = viewModelContext.args<VerificationBottomSheet.VerificationArgs>()
|
||||||
val session = EntryPoints.get(viewModelContext.app(), SingletonEntryPoint::class.java).activeSessionHolder().getActiveSession()
|
val session = EntryPoints.get(viewModelContext.app(), SingletonEntryPoint::class.java).activeSessionHolder().getActiveSession()
|
||||||
val matrixItem = session.getUser(args.otherUserId)?.toMatrixItem()
|
val matrixItem = session.getUserOrDefault(args.otherUserId).toMatrixItem()
|
||||||
|
|
||||||
return VerificationEmojiCodeViewState(
|
return VerificationEmojiCodeViewState(
|
||||||
transactionId = args.verificationId,
|
transactionId = args.verificationId,
|
||||||
|
@ -514,7 +514,7 @@ class HomeActivity :
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun promptSecurityEvent(userItem: MatrixItem.UserItem?, titleRes: Int, descRes: Int, action: ((VectorBaseActivity<*>) -> Unit)) {
|
private fun promptSecurityEvent(userItem: MatrixItem.UserItem, titleRes: Int, descRes: Int, action: ((VectorBaseActivity<*>) -> Unit)) {
|
||||||
popupAlertManager.postVectorAlert(
|
popupAlertManager.postVectorAlert(
|
||||||
VerificationVectorAlert(
|
VerificationVectorAlert(
|
||||||
uid = "upgradeSecurity",
|
uid = "upgradeSecurity",
|
||||||
|
@ -20,13 +20,13 @@ import im.vector.app.core.platform.VectorViewEvents
|
|||||||
import org.matrix.android.sdk.api.util.MatrixItem
|
import org.matrix.android.sdk.api.util.MatrixItem
|
||||||
|
|
||||||
sealed interface HomeActivityViewEvents : VectorViewEvents {
|
sealed interface HomeActivityViewEvents : VectorViewEvents {
|
||||||
data class AskPasswordToInitCrossSigning(val userItem: MatrixItem.UserItem?) : HomeActivityViewEvents
|
data class AskPasswordToInitCrossSigning(val userItem: MatrixItem.UserItem) : HomeActivityViewEvents
|
||||||
data class CurrentSessionNotVerified(
|
data class CurrentSessionNotVerified(
|
||||||
val userItem: MatrixItem.UserItem?,
|
val userItem: MatrixItem.UserItem,
|
||||||
val waitForIncomingRequest: Boolean = true,
|
val waitForIncomingRequest: Boolean = true,
|
||||||
) : HomeActivityViewEvents
|
) : HomeActivityViewEvents
|
||||||
data class CurrentSessionCannotBeVerified(
|
data class CurrentSessionCannotBeVerified(
|
||||||
val userItem: MatrixItem.UserItem?,
|
val userItem: MatrixItem.UserItem,
|
||||||
) : HomeActivityViewEvents
|
) : HomeActivityViewEvents
|
||||||
data class OnCrossSignedInvalidated(val userItem: MatrixItem.UserItem) : HomeActivityViewEvents
|
data class OnCrossSignedInvalidated(val userItem: MatrixItem.UserItem) : HomeActivityViewEvents
|
||||||
object PromptToEnableSessionPush : HomeActivityViewEvents
|
object PromptToEnableSessionPush : HomeActivityViewEvents
|
||||||
|
@ -60,7 +60,7 @@ import org.matrix.android.sdk.api.raw.RawService
|
|||||||
import org.matrix.android.sdk.api.session.crypto.crosssigning.CrossSigningService
|
import org.matrix.android.sdk.api.session.crypto.crosssigning.CrossSigningService
|
||||||
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.model.MXUsersDevicesMap
|
import org.matrix.android.sdk.api.session.crypto.model.MXUsersDevicesMap
|
||||||
import org.matrix.android.sdk.api.session.getUser
|
import org.matrix.android.sdk.api.session.getUserOrDefault
|
||||||
import org.matrix.android.sdk.api.session.pushrules.RuleIds
|
import org.matrix.android.sdk.api.session.pushrules.RuleIds
|
||||||
import org.matrix.android.sdk.api.session.room.model.Membership
|
import org.matrix.android.sdk.api.session.room.model.Membership
|
||||||
import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
|
import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
|
||||||
@ -312,10 +312,10 @@ class HomeActivityViewModel @AssistedInject constructor(
|
|||||||
} else {
|
} else {
|
||||||
// cross signing keys have been reset
|
// cross signing keys have been reset
|
||||||
// Trigger a popup to re-verify
|
// Trigger a popup to re-verify
|
||||||
// Note: user can be null in case of logout
|
// Note: user can be unknown in case of logout
|
||||||
session.getUser(session.myUserId)
|
session.getUserOrDefault(session.myUserId)
|
||||||
?.toMatrixItem()
|
.toMatrixItem()
|
||||||
?.let { user ->
|
.let { user ->
|
||||||
_viewEvents.post(HomeActivityViewEvents.OnCrossSignedInvalidated(user))
|
_viewEvents.post(HomeActivityViewEvents.OnCrossSignedInvalidated(user))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -396,7 +396,7 @@ class HomeActivityViewModel @AssistedInject constructor(
|
|||||||
// New session
|
// New session
|
||||||
_viewEvents.post(
|
_viewEvents.post(
|
||||||
HomeActivityViewEvents.CurrentSessionNotVerified(
|
HomeActivityViewEvents.CurrentSessionNotVerified(
|
||||||
session.getUser(session.myUserId)?.toMatrixItem(),
|
session.getUserOrDefault(session.myUserId).toMatrixItem(),
|
||||||
// Always send request instead of waiting for an incoming as per recent EW changes
|
// Always send request instead of waiting for an incoming as per recent EW changes
|
||||||
false
|
false
|
||||||
)
|
)
|
||||||
@ -404,7 +404,7 @@ class HomeActivityViewModel @AssistedInject constructor(
|
|||||||
} else {
|
} else {
|
||||||
_viewEvents.post(
|
_viewEvents.post(
|
||||||
HomeActivityViewEvents.CurrentSessionCannotBeVerified(
|
HomeActivityViewEvents.CurrentSessionCannotBeVerified(
|
||||||
session.getUser(session.myUserId)?.toMatrixItem(),
|
session.getUserOrDefault(session.myUserId).toMatrixItem(),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -424,7 +424,7 @@ class HomeActivityViewModel @AssistedInject constructor(
|
|||||||
// Check this is not an SSO account
|
// Check this is not an SSO account
|
||||||
if (session.homeServerCapabilitiesService().getHomeServerCapabilities().canChangePassword) {
|
if (session.homeServerCapabilitiesService().getHomeServerCapabilities().canChangePassword) {
|
||||||
// Ask password to the user: Upgrade security
|
// Ask password to the user: Upgrade security
|
||||||
_viewEvents.post(HomeActivityViewEvents.AskPasswordToInitCrossSigning(session.getUser(session.myUserId)?.toMatrixItem()))
|
_viewEvents.post(HomeActivityViewEvents.AskPasswordToInitCrossSigning(session.getUserOrDefault(session.myUserId).toMatrixItem()))
|
||||||
}
|
}
|
||||||
// Else (SSO) just ignore for the moment
|
// Else (SSO) just ignore for the moment
|
||||||
} else {
|
} else {
|
||||||
|
@ -21,10 +21,13 @@ import com.airbnb.mvrx.MavericksState
|
|||||||
import com.airbnb.mvrx.MavericksViewModelFactory
|
import com.airbnb.mvrx.MavericksViewModelFactory
|
||||||
import com.airbnb.mvrx.Success
|
import com.airbnb.mvrx.Success
|
||||||
import com.airbnb.mvrx.Uninitialized
|
import com.airbnb.mvrx.Uninitialized
|
||||||
|
import com.airbnb.mvrx.ViewModelContext
|
||||||
import dagger.assisted.Assisted
|
import dagger.assisted.Assisted
|
||||||
import dagger.assisted.AssistedFactory
|
import dagger.assisted.AssistedFactory
|
||||||
import dagger.assisted.AssistedInject
|
import dagger.assisted.AssistedInject
|
||||||
|
import dagger.hilt.EntryPoints
|
||||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||||
|
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.EmptyViewEvents
|
import im.vector.app.core.platform.EmptyViewEvents
|
||||||
import im.vector.app.core.platform.VectorViewModel
|
import im.vector.app.core.platform.VectorViewModel
|
||||||
@ -40,14 +43,14 @@ import org.matrix.android.sdk.api.NoOpMatrixCallback
|
|||||||
import org.matrix.android.sdk.api.extensions.orFalse
|
import org.matrix.android.sdk.api.extensions.orFalse
|
||||||
import org.matrix.android.sdk.api.session.Session
|
import org.matrix.android.sdk.api.session.Session
|
||||||
import org.matrix.android.sdk.api.session.crypto.model.DeviceInfo
|
import org.matrix.android.sdk.api.session.crypto.model.DeviceInfo
|
||||||
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
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
||||||
data class UnknownDevicesState(
|
data class UnknownDevicesState(
|
||||||
val myMatrixItem: MatrixItem.UserItem? = null,
|
val myMatrixItem: MatrixItem.UserItem,
|
||||||
val unknownSessions: Async<List<DeviceDetectionInfo>> = Uninitialized
|
val unknownSessions: Async<List<DeviceDetectionInfo>> = Uninitialized
|
||||||
) : MavericksState
|
) : MavericksState
|
||||||
|
|
||||||
@ -73,7 +76,15 @@ class UnknownDeviceDetectorSharedViewModel @AssistedInject constructor(
|
|||||||
override fun create(initialState: UnknownDevicesState): UnknownDeviceDetectorSharedViewModel
|
override fun create(initialState: UnknownDevicesState): UnknownDeviceDetectorSharedViewModel
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object : MavericksViewModelFactory<UnknownDeviceDetectorSharedViewModel, UnknownDevicesState> by hiltMavericksViewModelFactory()
|
companion object : MavericksViewModelFactory<UnknownDeviceDetectorSharedViewModel, UnknownDevicesState> by hiltMavericksViewModelFactory() {
|
||||||
|
override fun initialState(viewModelContext: ViewModelContext): UnknownDevicesState {
|
||||||
|
val session = EntryPoints.get(viewModelContext.app(), SingletonEntryPoint::class.java).activeSessionHolder().getActiveSession()
|
||||||
|
|
||||||
|
return UnknownDevicesState(
|
||||||
|
myMatrixItem = session.getUserOrDefault(session.myUserId).toMatrixItem()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private val ignoredDeviceList = ArrayList<String>()
|
private val ignoredDeviceList = ArrayList<String>()
|
||||||
|
|
||||||
@ -118,7 +129,7 @@ class UnknownDeviceDetectorSharedViewModel @AssistedInject constructor(
|
|||||||
.execute { async ->
|
.execute { async ->
|
||||||
// Timber.v("## Detector trigger passed distinct")
|
// Timber.v("## Detector trigger passed distinct")
|
||||||
copy(
|
copy(
|
||||||
myMatrixItem = session.getUser(session.myUserId)?.toMatrixItem(),
|
myMatrixItem = session.getUserOrDefault(session.myUserId).toMatrixItem(),
|
||||||
unknownSessions = async
|
unknownSessions = async
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,7 @@ import im.vector.app.core.platform.StateView
|
|||||||
import im.vector.app.core.platform.VectorViewModel
|
import im.vector.app.core.platform.VectorViewModel
|
||||||
import im.vector.app.core.resources.DrawableProvider
|
import im.vector.app.core.resources.DrawableProvider
|
||||||
import im.vector.app.core.resources.StringProvider
|
import im.vector.app.core.resources.StringProvider
|
||||||
|
import im.vector.app.features.displayname.getBestName
|
||||||
import im.vector.app.features.home.room.list.home.header.HomeRoomFilter
|
import im.vector.app.features.home.room.list.home.header.HomeRoomFilter
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
@ -53,6 +54,7 @@ import org.matrix.android.sdk.api.query.RoomTagQueryFilter
|
|||||||
import org.matrix.android.sdk.api.query.toActiveSpaceOrNoFilter
|
import org.matrix.android.sdk.api.query.toActiveSpaceOrNoFilter
|
||||||
import org.matrix.android.sdk.api.session.Session
|
import org.matrix.android.sdk.api.session.Session
|
||||||
import org.matrix.android.sdk.api.session.getRoom
|
import org.matrix.android.sdk.api.session.getRoom
|
||||||
|
import org.matrix.android.sdk.api.session.getUserOrDefault
|
||||||
import org.matrix.android.sdk.api.session.room.RoomSortOrder
|
import org.matrix.android.sdk.api.session.room.RoomSortOrder
|
||||||
import org.matrix.android.sdk.api.session.room.RoomSummaryQueryParams
|
import org.matrix.android.sdk.api.session.room.RoomSummaryQueryParams
|
||||||
import org.matrix.android.sdk.api.session.room.UpdatableLivePageResult
|
import org.matrix.android.sdk.api.session.room.UpdatableLivePageResult
|
||||||
@ -62,6 +64,7 @@ import org.matrix.android.sdk.api.session.room.model.tag.RoomTag
|
|||||||
import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
|
import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
|
||||||
import org.matrix.android.sdk.api.session.room.state.isPublic
|
import org.matrix.android.sdk.api.session.room.state.isPublic
|
||||||
import org.matrix.android.sdk.api.util.Optional
|
import org.matrix.android.sdk.api.util.Optional
|
||||||
|
import org.matrix.android.sdk.api.util.toMatrixItem
|
||||||
import org.matrix.android.sdk.flow.flow
|
import org.matrix.android.sdk.flow.flow
|
||||||
|
|
||||||
class HomeRoomListViewModel @AssistedInject constructor(
|
class HomeRoomListViewModel @AssistedInject constructor(
|
||||||
@ -298,7 +301,7 @@ class HomeRoomListViewModel @AssistedInject constructor(
|
|||||||
isBigImage = true
|
isBigImage = true
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
val userName = session.userService().getUser(session.myUserId)?.displayName ?: ""
|
val userName = session.getUserOrDefault(session.myUserId).toMatrixItem().getBestName()
|
||||||
StateView.State.Empty(
|
StateView.State.Empty(
|
||||||
title = stringProvider.getString(R.string.home_empty_no_rooms_title, userName),
|
title = stringProvider.getString(R.string.home_empty_no_rooms_title, userName),
|
||||||
message = stringProvider.getString(R.string.home_empty_no_rooms_message),
|
message = stringProvider.getString(R.string.home_empty_no_rooms_message),
|
||||||
|
@ -38,13 +38,13 @@ class VerificationVectorAlert(
|
|||||||
override val layoutRes = R.layout.alerter_verification_layout
|
override val layoutRes = R.layout.alerter_verification_layout
|
||||||
|
|
||||||
class ViewBinder(
|
class ViewBinder(
|
||||||
private val matrixItem: MatrixItem?,
|
private val matrixItem: MatrixItem,
|
||||||
private val avatarRenderer: AvatarRenderer
|
private val avatarRenderer: AvatarRenderer
|
||||||
) : VectorAlert.ViewBinder {
|
) : VectorAlert.ViewBinder {
|
||||||
|
|
||||||
override fun bind(view: View) {
|
override fun bind(view: View) {
|
||||||
val views = AlerterVerificationLayoutBinding.bind(view)
|
val views = AlerterVerificationLayoutBinding.bind(view)
|
||||||
matrixItem?.let { avatarRenderer.render(it, views.ivUserAvatar, GlideApp.with(view.context.applicationContext)) }
|
avatarRenderer.render(matrixItem, views.ivUserAvatar, GlideApp.with(view.context.applicationContext))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,7 @@ import org.matrix.android.sdk.api.session.Session
|
|||||||
import org.matrix.android.sdk.api.session.events.model.toContent
|
import org.matrix.android.sdk.api.session.events.model.toContent
|
||||||
import org.matrix.android.sdk.api.session.events.model.toModel
|
import org.matrix.android.sdk.api.session.events.model.toModel
|
||||||
import org.matrix.android.sdk.api.session.getRoom
|
import org.matrix.android.sdk.api.session.getRoom
|
||||||
|
import org.matrix.android.sdk.api.session.getUserOrDefault
|
||||||
import org.matrix.android.sdk.api.session.room.RoomSortOrder
|
import org.matrix.android.sdk.api.session.room.RoomSortOrder
|
||||||
import org.matrix.android.sdk.api.session.room.accountdata.RoomAccountDataTypes
|
import org.matrix.android.sdk.api.session.room.accountdata.RoomAccountDataTypes
|
||||||
import org.matrix.android.sdk.api.session.room.model.Membership
|
import org.matrix.android.sdk.api.session.room.model.Membership
|
||||||
@ -272,7 +273,7 @@ class SpaceListViewModel @AssistedInject constructor(
|
|||||||
?.safeOrder()
|
?.safeOrder()
|
||||||
}
|
}
|
||||||
val inviterIds = spaces.mapNotNull { it.inviterId }
|
val inviterIds = spaces.mapNotNull { it.inviterId }
|
||||||
val inviters = inviterIds.mapNotNull { session.userService().getUser(it) }
|
val inviters = inviterIds.map { session.getUserOrDefault(it) }
|
||||||
copy(
|
copy(
|
||||||
asyncSpaces = asyncSpaces,
|
asyncSpaces = asyncSpaces,
|
||||||
spaces = spaces,
|
spaces = spaces,
|
||||||
|
Loading…
Reference in New Issue
Block a user