1515 */
1616package im.vector.app.features.crypto.verification
1717
18- import androidx.lifecycle.viewModelScope
1918import com.airbnb.mvrx.Async
2019import com.airbnb.mvrx.Fail
21- import com.airbnb.mvrx.FragmentViewModelContext
2220import com.airbnb.mvrx.Loading
2321import com.airbnb.mvrx.MavericksState
2422import com.airbnb.mvrx.MavericksViewModelFactory
2523import com.airbnb.mvrx.Success
2624import com.airbnb.mvrx.Uninitialized
27- import com.airbnb.mvrx.ViewModelContext
2825import dagger.assisted.Assisted
2926import dagger.assisted.AssistedFactory
3027import dagger.assisted.AssistedInject
3128import im.vector.app.R
29+ import im.vector.app.core.di.MavericksAssistedViewModelFactory
30+ import im.vector.app.core.di.hiltMavericksViewModelFactory
3231import im.vector.app.core.extensions.exhaustive
3332import im.vector.app.core.platform.VectorViewModel
3433import im.vector.app.core.resources.StringProvider
@@ -61,15 +60,17 @@ import org.matrix.android.sdk.internal.util.awaitCallback
6160import timber.log.Timber
6261
6362data class VerificationBottomSheetViewState (
63+ val otherUserId : String ,
64+ val verificationId : String? ,
65+ val roomId : String? ,
66+ // true when we display the loading and we wait for the other (incoming request)
67+ val selfVerificationMode : Boolean ,
6468 val otherUserMxItem : MatrixItem ? = null ,
65- val roomId : String? = null ,
6669 val pendingRequest : Async <PendingVerificationRequest > = Uninitialized ,
6770 val pendingLocalId : String? = null ,
6871 val sasTransactionState : VerificationTxState ? = null ,
6972 val qrTransactionState : VerificationTxState ? = null ,
7073 val transactionId : String? = null ,
71- // true when we display the loading and we wait for the other (incoming request)
72- val selfVerificationMode : Boolean = false ,
7374 val verifiedFromPrivateKeys : Boolean = false ,
7475 val verifyingFrom4S : Boolean = false ,
7576 val isMe : Boolean = false ,
@@ -79,29 +80,41 @@ data class VerificationBottomSheetViewState(
7980 val quadSContainsSecrets : Boolean = true ,
8081 val quadSHasBeenReset : Boolean = false ,
8182 val hasAnyOtherSession : Boolean = false
82- ) : MavericksState
83+ ) : MavericksState {
84+
85+ constructor (args: VerificationBottomSheet .VerificationArgs ) : this (
86+ otherUserId = args.otherUserId,
87+ verificationId = args.verificationId,
88+ roomId = args.roomId,
89+ selfVerificationMode = args.selfVerificationMode
90+ )
91+ }
8392
8493class VerificationBottomSheetViewModel @AssistedInject constructor(
8594 @Assisted initialState : VerificationBottomSheetViewState ,
86- @Assisted val args : VerificationBottomSheet .VerificationArgs ,
8795 private val session : Session ,
8896 private val supportedVerificationMethodsProvider : SupportedVerificationMethodsProvider ,
8997 private val stringProvider : StringProvider ) :
90- VectorViewModel <VerificationBottomSheetViewState , VerificationAction , VerificationBottomSheetViewEvents >(initialState),
98+ VectorViewModel <VerificationBottomSheetViewState , VerificationAction , VerificationBottomSheetViewEvents >(initialState),
9199 VerificationService .Listener {
92100
101+ @AssistedFactory
102+ interface Factory : MavericksAssistedViewModelFactory <VerificationBottomSheetViewModel , VerificationBottomSheetViewState > {
103+ override fun create (initialState : VerificationBottomSheetViewState ): VerificationBottomSheetViewModel
104+ }
105+
106+ companion object : MavericksViewModelFactory <VerificationBottomSheetViewModel , VerificationBottomSheetViewState > by hiltMavericksViewModelFactory()
107+
93108 init {
94109 session.cryptoService().verificationService().addListener(this )
95110
96- val userItem = session.getUser(args.otherUserId)
97-
98- val selfVerificationMode = args.selfVerificationMode
111+ val userItem = session.getUser(initialState.otherUserId)
99112
100113 var autoReady = false
101- val pr = if (selfVerificationMode) {
114+ val pr = if (initialState. selfVerificationMode) {
102115 // See if active tx for this user and take it
103116
104- session.cryptoService().verificationService().getExistingVerificationRequests(args .otherUserId)
117+ session.cryptoService().verificationService().getExistingVerificationRequests(initialState .otherUserId)
105118 .lastOrNull { ! it.isFinished }
106119 ?.also { verificationRequest ->
107120 if (verificationRequest.isIncoming && ! verificationRequest.isReady) {
@@ -110,15 +123,15 @@ class VerificationBottomSheetViewModel @AssistedInject constructor(
110123 }
111124 }
112125 } else {
113- session.cryptoService().verificationService().getExistingVerificationRequest(args .otherUserId, args .verificationId)
126+ session.cryptoService().verificationService().getExistingVerificationRequest(initialState .otherUserId, initialState .verificationId)
114127 }
115128
116- val sasTx = (pr?.transactionId ? : args .verificationId)?.let {
117- session.cryptoService().verificationService().getExistingTransaction(args .otherUserId, it) as ? SasVerificationTransaction
129+ val sasTx = (pr?.transactionId ? : initialState .verificationId)?.let {
130+ session.cryptoService().verificationService().getExistingTransaction(initialState .otherUserId, it) as ? SasVerificationTransaction
118131 }
119132
120- val qrTx = (pr?.transactionId ? : args .verificationId)?.let {
121- session.cryptoService().verificationService().getExistingTransaction(args .otherUserId, it) as ? QrCodeVerificationTransaction
133+ val qrTx = (pr?.transactionId ? : initialState .verificationId)?.let {
134+ session.cryptoService().verificationService().getExistingTransaction(initialState .otherUserId, it) as ? QrCodeVerificationTransaction
122135 }
123136
124137 val hasAnyOtherSession = session.cryptoService()
@@ -132,11 +145,9 @@ class VerificationBottomSheetViewModel @AssistedInject constructor(
132145 otherUserMxItem = userItem?.toMatrixItem(),
133146 sasTransactionState = sasTx?.state,
134147 qrTransactionState = qrTx?.state,
135- transactionId = pr?.transactionId ? : args .verificationId,
148+ transactionId = pr?.transactionId ? : initialState .verificationId,
136149 pendingRequest = if (pr != null ) Success (pr) else Uninitialized ,
137- selfVerificationMode = selfVerificationMode,
138- roomId = args.roomId,
139- isMe = args.otherUserId == session.myUserId,
150+ isMe = initialState.otherUserId == session.myUserId,
140151 currentDeviceCanCrossSign = session.cryptoService().crossSigningService().canCrossSign(),
141152 quadSContainsSecrets = session.sharedSecretStorageService.isRecoverySetup(),
142153 hasAnyOtherSession = hasAnyOtherSession
@@ -159,12 +170,6 @@ class VerificationBottomSheetViewModel @AssistedInject constructor(
159170 super .onCleared()
160171 }
161172
162- @AssistedFactory
163- interface Factory {
164- fun create (initialState : VerificationBottomSheetViewState ,
165- args : VerificationBottomSheet .VerificationArgs ): VerificationBottomSheetViewModel
166- }
167-
168173 fun queryCancel () = withState { state ->
169174 if (state.userThinkItsNotHim) {
170175 setState {
@@ -223,16 +228,6 @@ class VerificationBottomSheetViewModel @AssistedInject constructor(
223228 _viewEvents .post(VerificationBottomSheetViewEvents .GoToSettings )
224229 }
225230
226- companion object : MavericksViewModelFactory <VerificationBottomSheetViewModel , VerificationBottomSheetViewState > {
227-
228- override fun create (viewModelContext : ViewModelContext , state : VerificationBottomSheetViewState ): VerificationBottomSheetViewModel ? {
229- val fragment: VerificationBottomSheet = (viewModelContext as FragmentViewModelContext ).fragment()
230- val args: VerificationBottomSheet .VerificationArgs = viewModelContext.args()
231-
232- return fragment.verificationViewModelFactory.create(state, args)
233- }
234- }
235-
236231 override fun handle (action : VerificationAction ) = withState { state ->
237232 val otherUserId = state.otherUserMxItem?.id ? : return @withState
238233 val roomId = state.roomId
@@ -542,7 +537,7 @@ class VerificationBottomSheetViewModel @AssistedInject constructor(
542537 state.pendingRequest.invoke()?.transactionId == pr.transactionId) {
543538 setState {
544539 copy(
545- transactionId = args .verificationId ? : pr.transactionId,
540+ transactionId = state .verificationId ? : pr.transactionId,
546541 pendingRequest = Success (pr)
547542 )
548543 }
0 commit comments