Refactor duplicated code.
This commit is contained in:
parent
e87d4db72c
commit
eb5253ab1a
|
@ -29,18 +29,15 @@ import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.launch
|
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.session.crypto.verification.VerificationService
|
|
||||||
import org.matrix.android.sdk.api.session.crypto.verification.VerificationTransaction
|
|
||||||
import org.matrix.android.sdk.api.session.crypto.verification.VerificationTxState
|
|
||||||
|
|
||||||
class DevicesViewModel @AssistedInject constructor(
|
class DevicesViewModel @AssistedInject constructor(
|
||||||
@Assisted initialState: DevicesViewState,
|
@Assisted initialState: DevicesViewState,
|
||||||
private val activeSessionHolder: ActiveSessionHolder,
|
activeSessionHolder: ActiveSessionHolder,
|
||||||
private val getCurrentSessionCrossSigningInfoUseCase: GetCurrentSessionCrossSigningInfoUseCase,
|
private val getCurrentSessionCrossSigningInfoUseCase: GetCurrentSessionCrossSigningInfoUseCase,
|
||||||
private val getDeviceFullInfoListUseCase: GetDeviceFullInfoListUseCase,
|
private val getDeviceFullInfoListUseCase: GetDeviceFullInfoListUseCase,
|
||||||
private val refreshDevicesOnCryptoDevicesChangeUseCase: RefreshDevicesOnCryptoDevicesChangeUseCase,
|
private val refreshDevicesOnCryptoDevicesChangeUseCase: RefreshDevicesOnCryptoDevicesChangeUseCase,
|
||||||
refreshDevicesUseCase: RefreshDevicesUseCase,
|
refreshDevicesUseCase: RefreshDevicesUseCase,
|
||||||
) : VectorSessionsListViewModel<DevicesViewState, DevicesAction, DevicesViewEvent>(initialState, refreshDevicesUseCase), VerificationService.Listener {
|
) : VectorSessionsListViewModel<DevicesViewState, DevicesAction, DevicesViewEvent>(initialState, activeSessionHolder, refreshDevicesUseCase) {
|
||||||
|
|
||||||
@AssistedFactory
|
@AssistedFactory
|
||||||
interface Factory : MavericksAssistedViewModelFactory<DevicesViewModel, DevicesViewState> {
|
interface Factory : MavericksAssistedViewModelFactory<DevicesViewModel, DevicesViewState> {
|
||||||
|
@ -50,30 +47,10 @@ class DevicesViewModel @AssistedInject constructor(
|
||||||
companion object : MavericksViewModelFactory<DevicesViewModel, DevicesViewState> by hiltMavericksViewModelFactory()
|
companion object : MavericksViewModelFactory<DevicesViewModel, DevicesViewState> by hiltMavericksViewModelFactory()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
addVerificationListener()
|
|
||||||
observeCurrentSessionCrossSigningInfo()
|
observeCurrentSessionCrossSigningInfo()
|
||||||
observeDevices()
|
observeDevices()
|
||||||
refreshDevicesOnCryptoDevicesChange()
|
refreshDevicesOnCryptoDevicesChange()
|
||||||
queryRefreshDevicesList()
|
refreshDeviceList()
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCleared() {
|
|
||||||
removeVerificationListener()
|
|
||||||
super.onCleared()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun addVerificationListener() {
|
|
||||||
activeSessionHolder.getSafeActiveSession()
|
|
||||||
?.cryptoService()
|
|
||||||
?.verificationService()
|
|
||||||
?.addListener(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun removeVerificationListener() {
|
|
||||||
activeSessionHolder.getSafeActiveSession()
|
|
||||||
?.cryptoService()
|
|
||||||
?.verificationService()
|
|
||||||
?.removeListener(this)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun observeCurrentSessionCrossSigningInfo() {
|
private fun observeCurrentSessionCrossSigningInfo() {
|
||||||
|
@ -115,21 +92,6 @@ class DevicesViewModel @AssistedInject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transactionUpdated(tx: VerificationTransaction) {
|
|
||||||
if (tx.state == VerificationTxState.Verified) {
|
|
||||||
queryRefreshDevicesList()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Force the refresh of the devices list.
|
|
||||||
* The devices list is the list of the devices where the user is logged in.
|
|
||||||
* It can be any mobile devices, and any browsers.
|
|
||||||
*/
|
|
||||||
private fun queryRefreshDevicesList() {
|
|
||||||
refreshDeviceList()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun handle(action: DevicesAction) {
|
override fun handle(action: DevicesAction) {
|
||||||
when (action) {
|
when (action) {
|
||||||
is DevicesAction.MarkAsManuallyVerified -> handleMarkAsManuallyVerifiedAction()
|
is DevicesAction.MarkAsManuallyVerified -> handleMarkAsManuallyVerifiedAction()
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
package im.vector.app.features.settings.devices.v2
|
package im.vector.app.features.settings.devices.v2
|
||||||
|
|
||||||
import com.airbnb.mvrx.MavericksState
|
import com.airbnb.mvrx.MavericksState
|
||||||
|
import im.vector.app.core.di.ActiveSessionHolder
|
||||||
import im.vector.app.core.platform.VectorViewEvents
|
import im.vector.app.core.platform.VectorViewEvents
|
||||||
import im.vector.app.core.platform.VectorViewModel
|
import im.vector.app.core.platform.VectorViewModel
|
||||||
import im.vector.app.core.platform.VectorViewModelAction
|
import im.vector.app.core.platform.VectorViewModelAction
|
||||||
|
@ -24,20 +25,44 @@ import im.vector.app.core.utils.PublishDataSource
|
||||||
import im.vector.lib.core.utils.flow.throttleFirst
|
import im.vector.lib.core.utils.flow.throttleFirst
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
|
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.VerificationTxState
|
||||||
import kotlin.time.Duration.Companion.seconds
|
import kotlin.time.Duration.Companion.seconds
|
||||||
|
|
||||||
abstract class VectorSessionsListViewModel<S : MavericksState, VA : VectorViewModelAction, VE : VectorViewEvents>(
|
abstract class VectorSessionsListViewModel<S : MavericksState, VA : VectorViewModelAction, VE : VectorViewEvents>(
|
||||||
initialState: S,
|
initialState: S,
|
||||||
|
private val activeSessionHolder: ActiveSessionHolder,
|
||||||
private val refreshDevicesUseCase: RefreshDevicesUseCase,
|
private val refreshDevicesUseCase: RefreshDevicesUseCase,
|
||||||
) : VectorViewModel<S, VA, VE>(initialState) {
|
) : VectorViewModel<S, VA, VE>(initialState), VerificationService.Listener {
|
||||||
|
|
||||||
private val refreshSource = PublishDataSource<Unit>()
|
private val refreshSource = PublishDataSource<Unit>()
|
||||||
private val refreshThrottleDelayMs = 4.seconds.inWholeMilliseconds
|
private val refreshThrottleDelayMs = 4.seconds.inWholeMilliseconds
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
addVerificationListener()
|
||||||
observeRefreshSource()
|
observeRefreshSource()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onCleared() {
|
||||||
|
removeVerificationListener()
|
||||||
|
super.onCleared()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun addVerificationListener() {
|
||||||
|
activeSessionHolder.getSafeActiveSession()
|
||||||
|
?.cryptoService()
|
||||||
|
?.verificationService()
|
||||||
|
?.addListener(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun removeVerificationListener() {
|
||||||
|
activeSessionHolder.getSafeActiveSession()
|
||||||
|
?.cryptoService()
|
||||||
|
?.verificationService()
|
||||||
|
?.removeListener(this)
|
||||||
|
}
|
||||||
|
|
||||||
private fun observeRefreshSource() {
|
private fun observeRefreshSource() {
|
||||||
refreshSource.stream()
|
refreshSource.stream()
|
||||||
.throttleFirst(refreshThrottleDelayMs)
|
.throttleFirst(refreshThrottleDelayMs)
|
||||||
|
@ -45,6 +70,17 @@ abstract class VectorSessionsListViewModel<S : MavericksState, VA : VectorViewMo
|
||||||
.launchIn(viewModelScope)
|
.launchIn(viewModelScope)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun transactionUpdated(tx: VerificationTransaction) {
|
||||||
|
if (tx.state == VerificationTxState.Verified) {
|
||||||
|
refreshDeviceList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Force the refresh of the devices list.
|
||||||
|
* The devices list is the list of the devices where the user is logged in.
|
||||||
|
* It can be any mobile devices, and any browsers.
|
||||||
|
*/
|
||||||
fun refreshDeviceList() {
|
fun refreshDeviceList() {
|
||||||
refreshSource.post(Unit)
|
refreshSource.post(Unit)
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,17 +28,15 @@ import im.vector.app.features.settings.devices.v2.RefreshDevicesUseCase
|
||||||
import im.vector.app.features.settings.devices.v2.VectorSessionsListViewModel
|
import im.vector.app.features.settings.devices.v2.VectorSessionsListViewModel
|
||||||
import im.vector.app.features.settings.devices.v2.filter.DeviceManagerFilterType
|
import im.vector.app.features.settings.devices.v2.filter.DeviceManagerFilterType
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
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.VerificationTxState
|
|
||||||
|
|
||||||
class OtherSessionsViewModel @AssistedInject constructor(
|
class OtherSessionsViewModel @AssistedInject constructor(
|
||||||
@Assisted initialState: OtherSessionsViewState,
|
@Assisted initialState: OtherSessionsViewState,
|
||||||
private val activeSessionHolder: ActiveSessionHolder,
|
activeSessionHolder: ActiveSessionHolder,
|
||||||
private val getDeviceFullInfoListUseCase: GetDeviceFullInfoListUseCase,
|
private val getDeviceFullInfoListUseCase: GetDeviceFullInfoListUseCase,
|
||||||
refreshDevicesUseCase: RefreshDevicesUseCase
|
refreshDevicesUseCase: RefreshDevicesUseCase
|
||||||
) : VectorSessionsListViewModel<OtherSessionsViewState, OtherSessionsAction, OtherSessionsViewEvents>(initialState, refreshDevicesUseCase),
|
) : VectorSessionsListViewModel<OtherSessionsViewState, OtherSessionsAction, OtherSessionsViewEvents>(
|
||||||
VerificationService.Listener {
|
initialState, activeSessionHolder, refreshDevicesUseCase
|
||||||
|
) {
|
||||||
|
|
||||||
@AssistedFactory
|
@AssistedFactory
|
||||||
interface Factory : MavericksAssistedViewModelFactory<OtherSessionsViewModel, OtherSessionsViewState> {
|
interface Factory : MavericksAssistedViewModelFactory<OtherSessionsViewModel, OtherSessionsViewState> {
|
||||||
|
@ -51,12 +49,6 @@ class OtherSessionsViewModel @AssistedInject constructor(
|
||||||
|
|
||||||
init {
|
init {
|
||||||
observeDevices(initialState.currentFilter)
|
observeDevices(initialState.currentFilter)
|
||||||
addVerificationListener()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCleared() {
|
|
||||||
removeVerificationListener()
|
|
||||||
super.onCleared()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun observeDevices(currentFilter: DeviceManagerFilterType) {
|
private fun observeDevices(currentFilter: DeviceManagerFilterType) {
|
||||||
|
@ -72,30 +64,6 @@ class OtherSessionsViewModel @AssistedInject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addVerificationListener() {
|
|
||||||
activeSessionHolder.getSafeActiveSession()
|
|
||||||
?.cryptoService()
|
|
||||||
?.verificationService()
|
|
||||||
?.addListener(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun removeVerificationListener() {
|
|
||||||
activeSessionHolder.getSafeActiveSession()
|
|
||||||
?.cryptoService()
|
|
||||||
?.verificationService()
|
|
||||||
?.removeListener(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun transactionUpdated(tx: VerificationTransaction) {
|
|
||||||
if (tx.state == VerificationTxState.Verified) {
|
|
||||||
queryRefreshDevicesList()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun queryRefreshDevicesList() {
|
|
||||||
refreshDeviceList()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun handle(action: OtherSessionsAction) {
|
override fun handle(action: OtherSessionsAction) {
|
||||||
when (action) {
|
when (action) {
|
||||||
is OtherSessionsAction.FilterDevices -> handleFilterDevices(action)
|
is OtherSessionsAction.FilterDevices -> handleFilterDevices(action)
|
||||||
|
|
Loading…
Reference in New Issue