Skip to content

Commit d724504

Browse files
committed
Hilt: finish migration of latest view models
1 parent ac1e4e9 commit d724504

14 files changed

+133
-143
lines changed

vector/src/main/java/im/vector/app/core/di/MavericksViewModelModule.kt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,14 @@ import im.vector.app.features.contactsbook.ContactsBookViewModel
2828
import im.vector.app.features.createdirect.CreateDirectRoomViewModel
2929
import im.vector.app.features.crypto.keysbackup.settings.KeysBackupSettingsViewModel
3030
import im.vector.app.features.crypto.quads.SharedSecureStorageViewModel
31+
import im.vector.app.features.crypto.recover.BootstrapSharedViewModel
32+
import im.vector.app.features.crypto.verification.VerificationBottomSheetViewModel
3133
import im.vector.app.features.crypto.verification.choose.VerificationChooseMethodViewModel
3234
import im.vector.app.features.crypto.verification.emoji.VerificationEmojiCodeViewModel
3335
import im.vector.app.features.devtools.RoomDevToolViewModel
3436
import im.vector.app.features.discovery.DiscoverySettingsViewModel
3537
import im.vector.app.features.discovery.change.SetIdentityServerViewModel
38+
import im.vector.app.features.home.HomeActivityViewModel
3639
import im.vector.app.features.home.HomeDetailViewModel
3740
import im.vector.app.features.home.PromoteRestrictedViewModel
3841
import im.vector.app.features.home.UnknownDeviceDetectorSharedViewModel
@@ -60,6 +63,7 @@ import im.vector.app.features.roomdirectory.createroom.CreateRoomViewModel
6063
import im.vector.app.features.roomdirectory.picker.RoomDirectoryPickerViewModel
6164
import im.vector.app.features.roomdirectory.roompreview.RoomPreviewViewModel
6265
import im.vector.app.features.roommemberprofile.RoomMemberProfileViewModel
66+
import im.vector.app.features.roommemberprofile.devices.DeviceListBottomSheetViewModel
6367
import im.vector.app.features.roomprofile.RoomProfileViewModel
6468
import im.vector.app.features.roomprofile.alias.RoomAliasViewModel
6569
import im.vector.app.features.roomprofile.alias.detail.RoomAliasBottomSheetViewModel
@@ -72,6 +76,7 @@ import im.vector.app.features.roomprofile.settings.joinrule.advanced.RoomJoinRul
7276
import im.vector.app.features.roomprofile.uploads.RoomUploadsViewModel
7377
import im.vector.app.features.settings.account.deactivation.DeactivateAccountViewModel
7478
import im.vector.app.features.settings.crosssigning.CrossSigningSettingsViewModel
79+
import im.vector.app.features.settings.devices.DeviceVerificationInfoBottomSheetViewModel
7580
import im.vector.app.features.settings.devices.DevicesViewModel
7681
import im.vector.app.features.settings.devtools.AccountDataViewModel
7782
import im.vector.app.features.settings.devtools.GossipingEventsPaperTrailViewModel
@@ -512,4 +517,30 @@ interface MavericksViewModelModule {
512517
@MavericksViewModelKey(HomeDetailViewModel::class)
513518
fun homeDetailViewModelFactory(factory: HomeDetailViewModel.Factory): MavericksAssistedViewModelFactory<*, *>
514519

520+
@Binds
521+
@IntoMap
522+
@MavericksViewModelKey(DeviceVerificationInfoBottomSheetViewModel::class)
523+
fun deviceVerificationInfoBottomSheetViewModelFactory(factory: DeviceVerificationInfoBottomSheetViewModel.Factory): MavericksAssistedViewModelFactory<*, *>
524+
525+
@Binds
526+
@IntoMap
527+
@MavericksViewModelKey(DeviceListBottomSheetViewModel::class)
528+
fun deviceListBottomSheetViewModelFactory(factory: DeviceListBottomSheetViewModel.Factory): MavericksAssistedViewModelFactory<*, *>
529+
530+
@Binds
531+
@IntoMap
532+
@MavericksViewModelKey(HomeActivityViewModel::class)
533+
fun homeActivityViewModelFactory(factory: HomeActivityViewModel.Factory): MavericksAssistedViewModelFactory<*, *>
534+
535+
@Binds
536+
@IntoMap
537+
@MavericksViewModelKey(BootstrapSharedViewModel::class)
538+
fun bootstrapSharedViewModelFactory(factory: BootstrapSharedViewModel.Factory): MavericksAssistedViewModelFactory<*, *>
539+
540+
@Binds
541+
@IntoMap
542+
@MavericksViewModelKey(VerificationBottomSheetViewModel::class)
543+
fun verificationBottomSheetViewModelFactory(factory: VerificationBottomSheetViewModel.Factory): MavericksAssistedViewModelFactory<*, *>
544+
545+
515546
}

vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapBottomSheet.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,6 @@ class BootstrapBottomSheet : VectorBaseBottomSheetDialogFragment<BottomSheetBoot
5757

5858
override val showExpanded = true
5959

60-
@Inject
61-
lateinit var bootstrapViewModelFactory: BootstrapSharedViewModel.Factory
62-
6360
private val viewModel by fragmentViewModel(BootstrapSharedViewModel::class)
6461

6562
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): BottomSheetBootstrapBinding {

vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSharedViewModel.kt

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
package im.vector.app.features.crypto.recover
1818

19-
import androidx.lifecycle.viewModelScope
2019
import com.airbnb.mvrx.Fail
2120
import com.airbnb.mvrx.FragmentViewModelContext
2221
import com.airbnb.mvrx.Loading
@@ -29,6 +28,8 @@ import dagger.assisted.Assisted
2928
import dagger.assisted.AssistedFactory
3029
import dagger.assisted.AssistedInject
3130
import im.vector.app.R
31+
import im.vector.app.core.di.MavericksAssistedViewModelFactory
32+
import im.vector.app.core.di.hiltMavericksViewModelFactory
3233
import im.vector.app.core.error.ErrorFormatter
3334
import im.vector.app.core.extensions.exhaustive
3435
import im.vector.app.core.platform.VectorViewModel
@@ -59,32 +60,32 @@ import kotlin.coroutines.resumeWithException
5960

6061
class BootstrapSharedViewModel @AssistedInject constructor(
6162
@Assisted initialState: BootstrapViewState,
62-
@Assisted val args: BootstrapBottomSheet.Args,
6363
private val stringProvider: StringProvider,
6464
private val errorFormatter: ErrorFormatter,
6565
private val session: Session,
6666
private val bootstrapTask: BootstrapCrossSigningTask,
6767
private val migrationTask: BackupToQuadSMigrationTask,
68-
private val reAuthHelper: ReAuthHelper
6968
) : VectorViewModel<BootstrapViewState, BootstrapActions, BootstrapViewEvents>(initialState) {
7069

7170
private var doesKeyBackupExist: Boolean = false
7271
private var isBackupCreatedFromPassphrase: Boolean = false
7372
private val zxcvbn = Zxcvbn()
7473

7574
@AssistedFactory
76-
interface Factory {
77-
fun create(initialState: BootstrapViewState, args: BootstrapBottomSheet.Args): BootstrapSharedViewModel
75+
interface Factory : MavericksAssistedViewModelFactory<BootstrapSharedViewModel, BootstrapViewState> {
76+
override fun create(initialState: BootstrapViewState): BootstrapSharedViewModel
7877
}
7978

79+
companion object : MavericksViewModelFactory<BootstrapSharedViewModel, BootstrapViewState> by hiltMavericksViewModelFactory()
80+
8081
// private var _pendingSession: String? = null
8182

8283
var uiaContinuation: Continuation<UIABaseAuth>? = null
8384
var pendingAuth: UIABaseAuth? = null
8485

8586
init {
8687

87-
when (args.setUpMode) {
88+
when (initialState.setupMode) {
8889
SetupMode.PASSPHRASE_RESET,
8990
SetupMode.PASSPHRASE_AND_NEEDED_SECRETS_RESET,
9091
SetupMode.HARD_RESET -> {
@@ -410,7 +411,7 @@ class BootstrapSharedViewModel @AssistedInject constructor(
410411
progressListener = progressListener,
411412
passphrase = state.passphrase,
412413
keySpec = state.migrationRecoveryKey?.let { extractCurveKeyFromRecoveryKey(it)?.let { RawBytesKeySpec(it) } },
413-
setupMode = args.setUpMode
414+
setupMode = state.setupMode
414415
)
415416
) { bootstrapResult ->
416417
when (bootstrapResult) {
@@ -516,7 +517,7 @@ class BootstrapSharedViewModel @AssistedInject constructor(
516517
BootstrapStep.CheckingMigration -> Unit
517518
is BootstrapStep.FirstForm -> {
518519
_viewEvents.post(
519-
when (args.setUpMode) {
520+
when (state.setupMode) {
520521
SetupMode.CROSS_SIGNING_ONLY,
521522
SetupMode.NORMAL -> BootstrapViewEvents.SkipBootstrap()
522523
else -> BootstrapViewEvents.Dismiss(success = false)
@@ -547,18 +548,4 @@ class BootstrapSharedViewModel @AssistedInject constructor(
547548
else -> stringProvider.getString(R.string.unexpected_error)
548549
}
549550
}
550-
551-
// ======================================
552-
// Companion, view model assisted creation
553-
// ======================================
554-
555-
companion object : MavericksViewModelFactory<BootstrapSharedViewModel, BootstrapViewState> {
556-
557-
override fun create(viewModelContext: ViewModelContext, state: BootstrapViewState): BootstrapSharedViewModel? {
558-
val fragment: BootstrapBottomSheet = (viewModelContext as FragmentViewModelContext).fragment()
559-
val args: BootstrapBottomSheet.Args = fragment.arguments?.getParcelable(BootstrapBottomSheet.EXTRA_ARGS)
560-
?: BootstrapBottomSheet.Args(SetupMode.CROSS_SIGNING_ONLY)
561-
return fragment.bootstrapViewModelFactory.create(state, args)
562-
}
563-
}
564551
}

vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapViewState.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import im.vector.app.core.platform.WaitingViewData
2424
import org.matrix.android.sdk.api.session.securestorage.SsssKeyCreationInfo
2525

2626
data class BootstrapViewState(
27+
val setupMode: SetupMode,
2728
val step: BootstrapStep = BootstrapStep.CheckingMigration,
2829
val passphrase: String? = null,
2930
val migrationRecoveryKey: String? = null,
@@ -34,4 +35,8 @@ data class BootstrapViewState(
3435
val recoveryKeyCreationInfo: SsssKeyCreationInfo? = null,
3536
val initializationWaitingViewData: WaitingViewData? = null,
3637
val recoverySaveFileProcess: Async<Unit> = Uninitialized
37-
) : MavericksState
38+
) : MavericksState {
39+
40+
constructor(args: BootstrapBottomSheet.Args): this(setupMode = args.setUpMode)
41+
42+
}

vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,6 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment<BottomSheetV
7777

7878
override val showExpanded = true
7979

80-
@Inject
81-
lateinit var verificationViewModelFactory: VerificationBottomSheetViewModel.Factory
82-
8380
@Inject
8481
lateinit var avatarRenderer: AvatarRenderer
8582

vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheetViewModel.kt

Lines changed: 35 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,19 @@
1515
*/
1616
package im.vector.app.features.crypto.verification
1717

18-
import androidx.lifecycle.viewModelScope
1918
import com.airbnb.mvrx.Async
2019
import com.airbnb.mvrx.Fail
21-
import com.airbnb.mvrx.FragmentViewModelContext
2220
import com.airbnb.mvrx.Loading
2321
import com.airbnb.mvrx.MavericksState
2422
import com.airbnb.mvrx.MavericksViewModelFactory
2523
import com.airbnb.mvrx.Success
2624
import com.airbnb.mvrx.Uninitialized
27-
import com.airbnb.mvrx.ViewModelContext
2825
import dagger.assisted.Assisted
2926
import dagger.assisted.AssistedFactory
3027
import dagger.assisted.AssistedInject
3128
import im.vector.app.R
29+
import im.vector.app.core.di.MavericksAssistedViewModelFactory
30+
import im.vector.app.core.di.hiltMavericksViewModelFactory
3231
import im.vector.app.core.extensions.exhaustive
3332
import im.vector.app.core.platform.VectorViewModel
3433
import im.vector.app.core.resources.StringProvider
@@ -61,15 +60,17 @@ import org.matrix.android.sdk.internal.util.awaitCallback
6160
import timber.log.Timber
6261

6362
data 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

8493
class 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
}

vector/src/main/java/im/vector/app/features/home/HomeActivity.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@ class HomeActivity :
103103
private lateinit var sharedActionViewModel: HomeSharedActionViewModel
104104

105105
private val homeActivityViewModel: HomeActivityViewModel by viewModel()
106-
@Inject lateinit var viewModelFactory: HomeActivityViewModel.Factory
107106

108107
private val serverBackupStatusViewModel: ServerBackupStatusViewModel by viewModel()
109108
private val promoteRestrictedViewModel: PromoteRestrictedViewModel by viewModel()

0 commit comments

Comments
 (0)