Inject new ViewModel in the fragment V2 + add use cases
This commit is contained in:
		
							parent
							
								
									801eef3ce7
								
							
						
					
					
						commit
						3a73e72b16
					
				| @ -17,6 +17,7 @@ | ||||
| package im.vector.app.features.settings.devices | ||||
| 
 | ||||
| import im.vector.app.core.di.ActiveSessionHolder | ||||
| import im.vector.app.features.settings.devices.v2.CurrentSessionCrossSigningInfo | ||||
| import javax.inject.Inject | ||||
| 
 | ||||
| class GetCurrentSessionCrossSigningInfoUseCase @Inject constructor( | ||||
| @ -28,7 +29,7 @@ class GetCurrentSessionCrossSigningInfoUseCase @Inject constructor( | ||||
|         val isCrossSigningInitialized = session.cryptoService().crossSigningService().isCrossSigningInitialized() | ||||
|         val isCrossSigningVerified = session.cryptoService().crossSigningService().isCrossSigningVerified() | ||||
|         return CurrentSessionCrossSigningInfo( | ||||
|                 deviceId = session.sessionParams.deviceId, | ||||
|                 deviceId = session.sessionParams.deviceId.orEmpty(), | ||||
|                 isCrossSigningInitialized = isCrossSigningInitialized, | ||||
|                 isCrossSigningVerified = isCrossSigningVerified | ||||
|         ) | ||||
|  | ||||
| @ -16,6 +16,7 @@ | ||||
| 
 | ||||
| package im.vector.app.features.settings.devices | ||||
| 
 | ||||
| import im.vector.app.features.settings.devices.v2.CurrentSessionCrossSigningInfo | ||||
| import org.matrix.android.sdk.api.session.crypto.model.CryptoDeviceInfo | ||||
| import org.matrix.android.sdk.api.session.crypto.model.RoomEncryptionTrustLevel | ||||
| import javax.inject.Inject | ||||
|  | ||||
| @ -14,13 +14,13 @@ | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| package im.vector.app.features.settings.devices | ||||
| package im.vector.app.features.settings.devices.v2 | ||||
| 
 | ||||
| /** | ||||
|  * Used to hold some info about the cross signing of the current Session. | ||||
|  */ | ||||
| data class CurrentSessionCrossSigningInfo( | ||||
|         val deviceId: String?, | ||||
|         val isCrossSigningInitialized: Boolean, | ||||
|         val isCrossSigningVerified: Boolean, | ||||
|         val deviceId: String = "", | ||||
|         val isCrossSigningInitialized: Boolean = false, | ||||
|         val isCrossSigningVerified: Boolean = false, | ||||
| ) | ||||
| @ -17,29 +17,22 @@ | ||||
| package im.vector.app.features.settings.devices.v2 | ||||
| 
 | ||||
| import com.airbnb.mvrx.MavericksViewModelFactory | ||||
| import com.airbnb.mvrx.Success | ||||
| import dagger.assisted.Assisted | ||||
| import dagger.assisted.AssistedFactory | ||||
| import dagger.assisted.AssistedInject | ||||
| import im.vector.app.core.di.MavericksAssistedViewModelFactory | ||||
| import im.vector.app.core.di.hiltMavericksViewModelFactory | ||||
| import im.vector.app.core.platform.VectorViewModel | ||||
| import im.vector.app.core.resources.StringProvider | ||||
| import im.vector.app.features.login.ReAuthHelper | ||||
| import im.vector.app.features.settings.devices.GetCurrentSessionCrossSigningInfoUseCase | ||||
| import im.vector.app.features.settings.devices.GetEncryptionTrustLevelForDeviceUseCase | ||||
| import im.vector.app.features.settings.devices.v2.list.CheckIfSessionIsInactiveUseCase | ||||
| import org.matrix.android.sdk.api.Matrix | ||||
| import org.matrix.android.sdk.api.session.Session | ||||
| import kotlinx.coroutines.flow.launchIn | ||||
| import kotlinx.coroutines.flow.onEach | ||||
| import org.matrix.android.sdk.api.extensions.orFalse | ||||
| 
 | ||||
| // TODO add unit tests | ||||
| class DevicesViewModel @AssistedInject constructor( | ||||
|         @Assisted initialState: DevicesViewState, | ||||
|         private val session: Session, | ||||
|         private val reAuthHelper: ReAuthHelper, | ||||
|         private val stringProvider: StringProvider, | ||||
|         private val matrix: Matrix, | ||||
|         private val checkIfSessionIsInactiveUseCase: CheckIfSessionIsInactiveUseCase, | ||||
|         getCurrentSessionCrossSigningInfoUseCase: GetCurrentSessionCrossSigningInfoUseCase, | ||||
|         private val getEncryptionTrustLevelForDeviceUseCase: GetEncryptionTrustLevelForDeviceUseCase, | ||||
|         private val getCurrentSessionCrossSigningInfoUseCase: GetCurrentSessionCrossSigningInfoUseCase, | ||||
|         private val getDeviceFullInfoListUseCase: GetDeviceFullInfoListUseCase, | ||||
| ) : VectorViewModel<DevicesViewState, DevicesAction, DevicesViewEvent>(initialState) { | ||||
| 
 | ||||
|     @AssistedFactory | ||||
| @ -49,6 +42,41 @@ class DevicesViewModel @AssistedInject constructor( | ||||
| 
 | ||||
|     companion object : MavericksViewModelFactory<DevicesViewModel, DevicesViewState> by hiltMavericksViewModelFactory() | ||||
| 
 | ||||
|     init { | ||||
|         observeCurrentSessionCrossSigningInfo() | ||||
|         observeDevices() | ||||
|     } | ||||
| 
 | ||||
|     private fun observeCurrentSessionCrossSigningInfo() { | ||||
|         getCurrentSessionCrossSigningInfoUseCase.execute() | ||||
|                 .onEach { crossSigningInfo -> | ||||
|                     setState { | ||||
|                         copy(currentSessionCrossSigningInfo = crossSigningInfo) | ||||
|                     } | ||||
|                 } | ||||
|                 .launchIn(viewModelScope) | ||||
|     } | ||||
| 
 | ||||
|     private fun observeDevices() { | ||||
|         getDeviceFullInfoListUseCase.execute() | ||||
|                 .execute { async -> | ||||
|                     if (async is Success) { | ||||
|                         val deviceFullInfoList = async.invoke() | ||||
|                         val unverifiedSessionsCount = deviceFullInfoList.count { !it.cryptoDeviceInfo?.trustLevel?.isVerified().orFalse() } | ||||
|                         val inactiveSessionsCount = deviceFullInfoList.count { it.isInactive } | ||||
|                         copy( | ||||
|                                 devices = async, | ||||
|                                 unverifiedSessionsCount = unverifiedSessionsCount, | ||||
|                                 inactiveSessionsCount = inactiveSessionsCount, | ||||
|                         ) | ||||
|                     } else { | ||||
|                         copy( | ||||
|                                 devices = async | ||||
|                         ) | ||||
|                     } | ||||
|                 } | ||||
|     } | ||||
| 
 | ||||
|     override fun handle(action: DevicesAction) { | ||||
|         when (action) { | ||||
|             is DevicesAction.MarkAsManuallyVerified -> handleMarkAsManuallyVerifiedAction() | ||||
|  | ||||
| @ -21,10 +21,9 @@ import com.airbnb.mvrx.MavericksState | ||||
| import com.airbnb.mvrx.Uninitialized | ||||
| 
 | ||||
| data class DevicesViewState( | ||||
|         val myDeviceId: String = "", | ||||
|         val currentSessionCrossSigningInfo: CurrentSessionCrossSigningInfo = CurrentSessionCrossSigningInfo(), | ||||
|         val devices: Async<List<DeviceFullInfo>> = Uninitialized, | ||||
|         val hasAccountCrossSigning: Boolean = false, | ||||
|         val accountCrossSigningIsTrusted: Boolean = false, | ||||
|         val unverifiedSessionsCount: Int = 0, | ||||
|         val inactiveSessionsCount: Int = 0, | ||||
|         val isLoading: Boolean = false, | ||||
| ) : MavericksState | ||||
|  | ||||
| @ -0,0 +1,49 @@ | ||||
| /* | ||||
|  * Copyright (c) 2022 New Vector Ltd | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| package im.vector.app.features.settings.devices.v2 | ||||
| 
 | ||||
| import im.vector.app.core.di.ActiveSessionHolder | ||||
| import im.vector.app.features.settings.devices.v2.CurrentSessionCrossSigningInfo | ||||
| import kotlinx.coroutines.flow.Flow | ||||
| import kotlinx.coroutines.flow.emptyFlow | ||||
| import kotlinx.coroutines.flow.map | ||||
| import org.matrix.android.sdk.api.session.crypto.crosssigning.MXCrossSigningInfo | ||||
| import org.matrix.android.sdk.api.util.Optional | ||||
| import org.matrix.android.sdk.flow.flow | ||||
| import javax.inject.Inject | ||||
| 
 | ||||
| // TODO add unit tests | ||||
| class GetCurrentSessionCrossSigningInfoUseCase @Inject constructor( | ||||
|         private val activeSessionHolder: ActiveSessionHolder, | ||||
| ) { | ||||
| 
 | ||||
|     fun execute(): Flow<CurrentSessionCrossSigningInfo> { | ||||
|         return activeSessionHolder.getSafeActiveSession() | ||||
|                 ?.let { session -> | ||||
|                     session.flow().liveCrossSigningInfo(session.myUserId) | ||||
|                             .map { convertToSigningInfo(session.sessionParams.deviceId.orEmpty(), it) } | ||||
|                 } ?: emptyFlow() | ||||
|     } | ||||
| 
 | ||||
|     private fun convertToSigningInfo(deviceId: String, mxCrossSigningInfo: Optional<MXCrossSigningInfo>): CurrentSessionCrossSigningInfo { | ||||
|         return CurrentSessionCrossSigningInfo( | ||||
|                 deviceId = deviceId, | ||||
|                 isCrossSigningInitialized = mxCrossSigningInfo.getOrNull() != null, | ||||
|                 isCrossSigningVerified = mxCrossSigningInfo.getOrNull()?.isTrusted() == true | ||||
|         ) | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,67 @@ | ||||
| /* | ||||
|  * Copyright (c) 2022 New Vector Ltd | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| package im.vector.app.features.settings.devices.v2 | ||||
| 
 | ||||
| import im.vector.app.core.di.ActiveSessionHolder | ||||
| import im.vector.app.features.settings.devices.GetEncryptionTrustLevelForDeviceUseCase | ||||
| import im.vector.app.features.settings.devices.v2.list.CheckIfSessionIsInactiveUseCase | ||||
| import kotlinx.coroutines.flow.Flow | ||||
| import kotlinx.coroutines.flow.combine | ||||
| import kotlinx.coroutines.flow.distinctUntilChanged | ||||
| import kotlinx.coroutines.flow.emptyFlow | ||||
| import org.matrix.android.sdk.api.session.crypto.model.CryptoDeviceInfo | ||||
| import org.matrix.android.sdk.api.session.crypto.model.DeviceInfo | ||||
| import org.matrix.android.sdk.flow.flow | ||||
| import javax.inject.Inject | ||||
| 
 | ||||
| // TODO add unit tests | ||||
| class GetDeviceFullInfoListUseCase @Inject constructor( | ||||
|         private val activeSessionHolder: ActiveSessionHolder, | ||||
|         private val checkIfSessionIsInactiveUseCase: CheckIfSessionIsInactiveUseCase, | ||||
|         private val getEncryptionTrustLevelForDeviceUseCase: GetEncryptionTrustLevelForDeviceUseCase, | ||||
|         private val getCurrentSessionCrossSigningInfoUseCase: GetCurrentSessionCrossSigningInfoUseCase, | ||||
| ) { | ||||
| 
 | ||||
|     fun execute(): Flow<List<DeviceFullInfo>> { | ||||
|         return activeSessionHolder.getSafeActiveSession()?.let { session -> | ||||
|             val deviceFullInfoFlow = combine( | ||||
|                     getCurrentSessionCrossSigningInfoUseCase.execute(), | ||||
|                     session.flow().liveUserCryptoDevices(session.myUserId), | ||||
|                     session.flow().liveMyDevicesInfo() | ||||
|             ) { currentSessionCrossSigningInfo, cryptoList, infoList -> | ||||
|                 convertToDeviceFullInfoList(currentSessionCrossSigningInfo, cryptoList, infoList) | ||||
|             } | ||||
| 
 | ||||
|             deviceFullInfoFlow.distinctUntilChanged() | ||||
|         } ?: emptyFlow() | ||||
|     } | ||||
| 
 | ||||
|     private fun convertToDeviceFullInfoList( | ||||
|             currentSessionCrossSigningInfo: CurrentSessionCrossSigningInfo, | ||||
|             cryptoList: List<CryptoDeviceInfo>, | ||||
|             infoList: List<DeviceInfo>, | ||||
|     ): List<DeviceFullInfo> { | ||||
|         return infoList | ||||
|                 .sortedByDescending { it.lastSeenTs } | ||||
|                 .map { deviceInfo -> | ||||
|                     val cryptoDeviceInfo = cryptoList.firstOrNull { it.deviceId == deviceInfo.deviceId } | ||||
|                     val trustLevelForShield = getEncryptionTrustLevelForDeviceUseCase.execute(currentSessionCrossSigningInfo, cryptoDeviceInfo) | ||||
|                     val isInactive = checkIfSessionIsInactiveUseCase.execute(deviceInfo.lastSeenTs ?: 0) | ||||
|                     DeviceFullInfo(deviceInfo, cryptoDeviceInfo, trustLevelForShield, isInactive) | ||||
|                 } | ||||
|     } | ||||
| } | ||||
| @ -24,8 +24,6 @@ import android.view.ViewGroup | ||||
| import android.widget.Toast | ||||
| import androidx.appcompat.app.AppCompatActivity | ||||
| import androidx.core.view.isVisible | ||||
| import com.airbnb.mvrx.Async | ||||
| import com.airbnb.mvrx.Loading | ||||
| import com.airbnb.mvrx.Success | ||||
| import com.airbnb.mvrx.fragmentViewModel | ||||
| import com.airbnb.mvrx.withState | ||||
| @ -39,10 +37,6 @@ import im.vector.app.core.resources.DrawableProvider | ||||
| import im.vector.app.databinding.FragmentSettingsDevicesBinding | ||||
| import im.vector.app.features.crypto.recover.SetupMode | ||||
| import im.vector.app.features.crypto.verification.VerificationBottomSheet | ||||
| import im.vector.app.features.settings.devices.DeviceFullInfo | ||||
| import im.vector.app.features.settings.devices.DevicesAction | ||||
| import im.vector.app.features.settings.devices.DevicesViewEvents | ||||
| import im.vector.app.features.settings.devices.DevicesViewModel | ||||
| import im.vector.app.features.settings.devices.v2.list.OtherSessionsController | ||||
| import im.vector.app.features.settings.devices.v2.list.SESSION_IS_MARKED_AS_INACTIVE_AFTER_DAYS | ||||
| import im.vector.app.features.settings.devices.v2.list.SecurityRecommendationViewState | ||||
| @ -93,27 +87,27 @@ class VectorSettingsDevicesFragment : | ||||
|     private fun observeViewEvents() { | ||||
|         viewModel.observeViewEvents { | ||||
|             when (it) { | ||||
|                 is DevicesViewEvents.Loading -> showLoading(it.message) | ||||
|                 is DevicesViewEvents.Failure -> showFailure(it.throwable) | ||||
|                 is DevicesViewEvents.RequestReAuth -> Unit // TODO. Next PR | ||||
|                 is DevicesViewEvents.PromptRenameDevice -> Unit // TODO. Next PR | ||||
|                 is DevicesViewEvents.ShowVerifyDevice -> { | ||||
|                 is DevicesViewEvent.Loading -> showLoading(it.message) | ||||
|                 is DevicesViewEvent.Failure -> showFailure(it.throwable) | ||||
|                 is DevicesViewEvent.RequestReAuth -> Unit // TODO. Next PR | ||||
|                 is DevicesViewEvent.PromptRenameDevice -> Unit // TODO. Next PR | ||||
|                 is DevicesViewEvent.ShowVerifyDevice -> { | ||||
|                     VerificationBottomSheet.withArgs( | ||||
|                             roomId = null, | ||||
|                             otherUserId = it.userId, | ||||
|                             transactionId = it.transactionId | ||||
|                     ).show(childFragmentManager, "REQPOP") | ||||
|                 } | ||||
|                 is DevicesViewEvents.SelfVerification -> { | ||||
|                 is DevicesViewEvent.SelfVerification -> { | ||||
|                     VerificationBottomSheet.forSelfVerification(it.session) | ||||
|                             .show(childFragmentManager, "REQPOP") | ||||
|                 } | ||||
|                 is DevicesViewEvents.ShowManuallyVerify -> { | ||||
|                 is DevicesViewEvent.ShowManuallyVerify -> { | ||||
|                     ManuallyVerifyDialog.show(requireActivity(), it.cryptoDeviceInfo) { | ||||
|                         viewModel.handle(DevicesAction.MarkAsManuallyVerified(it.cryptoDeviceInfo)) | ||||
|                     } | ||||
|                 } | ||||
|                 is DevicesViewEvents.PromptResetSecrets -> { | ||||
|                 is DevicesViewEvent.PromptResetSecrets -> { | ||||
|                     navigator.open4SSetup(requireContext(), SetupMode.PASSPHRASE_AND_NEEDED_SECRETS_RESET) | ||||
|                 } | ||||
|             } | ||||
| @ -151,10 +145,11 @@ class VectorSettingsDevicesFragment : | ||||
|     override fun invalidate() = withState(viewModel) { state -> | ||||
|         if (state.devices is Success) { | ||||
|             val devices = state.devices() | ||||
|             val currentDeviceId = state.currentSessionCrossSigningInfo.deviceId | ||||
|             val currentDeviceInfo = devices?.firstOrNull { | ||||
|                 it.deviceInfo.deviceId == state.myDeviceId | ||||
|                 it.deviceInfo.deviceId == currentDeviceId | ||||
|             } | ||||
|             val otherDevices = devices?.filter { it.deviceInfo.deviceId != state.myDeviceId } | ||||
|             val otherDevices = devices?.filter { it.deviceInfo.deviceId != currentDeviceId } | ||||
| 
 | ||||
|             renderSecurityRecommendations(state.inactiveSessionsCount, state.unverifiedSessionsCount) | ||||
|             renderCurrentDevice(currentDeviceInfo) | ||||
| @ -165,7 +160,7 @@ class VectorSettingsDevicesFragment : | ||||
|             hideOtherSessionsView() | ||||
|         } | ||||
| 
 | ||||
|         handleRequestStatus(state.request) | ||||
|         handleLoadingStatus(state.isLoading) | ||||
|     } | ||||
| 
 | ||||
|     private fun renderSecurityRecommendations(inactiveSessionsCount: Int, unverifiedSessionsCount: Int) { | ||||
| @ -254,10 +249,7 @@ class VectorSettingsDevicesFragment : | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private fun handleRequestStatus(unIgnoreRequest: Async<Unit>) { | ||||
|         views.waitingView.root.isVisible = when (unIgnoreRequest) { | ||||
|             is Loading -> true | ||||
|             else -> false | ||||
|         } | ||||
|     private fun handleLoadingStatus(isLoading: Boolean) { | ||||
|         views.waitingView.root.isVisible = isLoading | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -24,7 +24,7 @@ import im.vector.app.core.epoxy.noResultItem | ||||
| import im.vector.app.core.resources.ColorProvider | ||||
| import im.vector.app.core.resources.DrawableProvider | ||||
| import im.vector.app.core.resources.StringProvider | ||||
| import im.vector.app.features.settings.devices.DeviceFullInfo | ||||
| import im.vector.app.features.settings.devices.v2.DeviceFullInfo | ||||
| import org.matrix.android.sdk.api.session.crypto.model.RoomEncryptionTrustLevel | ||||
| import javax.inject.Inject | ||||
| 
 | ||||
| @ -60,7 +60,7 @@ class OtherSessionsController @Inject constructor( | ||||
|                             SESSION_IS_MARKED_AS_INACTIVE_AFTER_DAYS, | ||||
|                             formattedLastActivityDate | ||||
|                     ) | ||||
|                 } else if (device.trustLevelForShield == RoomEncryptionTrustLevel.Trusted) { | ||||
|                 } else if (device.roomEncryptionTrustLevel == RoomEncryptionTrustLevel.Trusted) { | ||||
|                     stringProvider.getString(R.string.device_manager_other_sessions_description_verified, formattedLastActivityDate) | ||||
|                 } else { | ||||
|                     stringProvider.getString(R.string.device_manager_other_sessions_description_unverified, formattedLastActivityDate) | ||||
| @ -71,7 +71,7 @@ class OtherSessionsController @Inject constructor( | ||||
|                 otherSessionItem { | ||||
|                     id(device.deviceInfo.deviceId) | ||||
|                     deviceType(DeviceType.UNKNOWN) // TODO. We don't have this info yet. Update accordingly. | ||||
|                     roomEncryptionTrustLevel(device.trustLevelForShield) | ||||
|                     roomEncryptionTrustLevel(device.roomEncryptionTrustLevel) | ||||
|                     sessionName(device.deviceInfo.displayName) | ||||
|                     sessionDescription(description) | ||||
|                     sessionDescriptionDrawable(descriptionDrawable) | ||||
|  | ||||
| @ -24,7 +24,7 @@ import im.vector.app.R | ||||
| import im.vector.app.core.extensions.cleanup | ||||
| import im.vector.app.core.extensions.configureWith | ||||
| import im.vector.app.databinding.ViewOtherSessionsBinding | ||||
| import im.vector.app.features.settings.devices.DeviceFullInfo | ||||
| import im.vector.app.features.settings.devices.v2.DeviceFullInfo | ||||
| import javax.inject.Inject | ||||
| 
 | ||||
| @AndroidEntryPoint | ||||
|  | ||||
| @ -57,7 +57,7 @@ class SessionInfoView @JvmOverloads constructor( | ||||
|     ) { | ||||
|         renderDeviceInfo(sessionInfoViewState.deviceFullInfo.deviceInfo.displayName.orEmpty()) | ||||
|         renderVerificationStatus( | ||||
|                 sessionInfoViewState.deviceFullInfo.trustLevelForShield, | ||||
|                 sessionInfoViewState.deviceFullInfo.roomEncryptionTrustLevel, | ||||
|                 sessionInfoViewState.isCurrentSession, | ||||
|                 sessionInfoViewState.isLearnMoreLinkVisible, | ||||
|         ) | ||||
|  | ||||
| @ -16,7 +16,7 @@ | ||||
| 
 | ||||
| package im.vector.app.features.settings.devices.v2.list | ||||
| 
 | ||||
| import im.vector.app.features.settings.devices.DeviceFullInfo | ||||
| import im.vector.app.features.settings.devices.v2.DeviceFullInfo | ||||
| 
 | ||||
| data class SessionInfoViewState( | ||||
|         val isCurrentSession: Boolean, | ||||
|  | ||||
| @ -18,7 +18,7 @@ package im.vector.app.features.settings.devices.v2.overview | ||||
| 
 | ||||
| import androidx.lifecycle.asFlow | ||||
| import im.vector.app.core.di.ActiveSessionHolder | ||||
| import im.vector.app.features.settings.devices.DeviceFullInfo | ||||
| import im.vector.app.features.settings.devices.v2.DeviceFullInfo | ||||
| import im.vector.app.features.settings.devices.GetCurrentSessionCrossSigningInfoUseCase | ||||
| import im.vector.app.features.settings.devices.GetEncryptionTrustLevelForDeviceUseCase | ||||
| import im.vector.app.features.settings.devices.v2.list.CheckIfSessionIsInactiveUseCase | ||||
| @ -51,7 +51,7 @@ class GetDeviceFullInfoUseCase @Inject constructor( | ||||
|                     DeviceFullInfo( | ||||
|                             deviceInfo = info, | ||||
|                             cryptoDeviceInfo = cryptoInfo, | ||||
|                             trustLevelForShield = roomEncryptionTrustLevel, | ||||
|                             roomEncryptionTrustLevel = roomEncryptionTrustLevel, | ||||
|                             isInactive = isInactive | ||||
|                     ) | ||||
|                 } else { | ||||
|  | ||||
| @ -34,7 +34,7 @@ import im.vector.app.core.platform.VectorBaseFragment | ||||
| import im.vector.app.core.resources.ColorProvider | ||||
| import im.vector.app.core.resources.DrawableProvider | ||||
| import im.vector.app.databinding.FragmentSessionOverviewBinding | ||||
| import im.vector.app.features.settings.devices.DeviceFullInfo | ||||
| import im.vector.app.features.settings.devices.v2.DeviceFullInfo | ||||
| import im.vector.app.features.settings.devices.v2.list.SessionInfoViewState | ||||
| import javax.inject.Inject | ||||
| 
 | ||||
|  | ||||
| @ -19,7 +19,7 @@ package im.vector.app.features.settings.devices.v2.overview | ||||
| import com.airbnb.mvrx.Async | ||||
| import com.airbnb.mvrx.MavericksState | ||||
| import com.airbnb.mvrx.Uninitialized | ||||
| import im.vector.app.features.settings.devices.DeviceFullInfo | ||||
| import im.vector.app.features.settings.devices.v2.DeviceFullInfo | ||||
| 
 | ||||
| data class SessionOverviewViewState( | ||||
|         val deviceId: String, | ||||
|  | ||||
| @ -16,6 +16,7 @@ | ||||
| 
 | ||||
| package im.vector.app.features.settings.devices | ||||
| 
 | ||||
| import im.vector.app.features.settings.devices.v2.CurrentSessionCrossSigningInfo | ||||
| import im.vector.app.test.fakes.FakeActiveSessionHolder | ||||
| import io.mockk.every | ||||
| import io.mockk.mockk | ||||
|  | ||||
| @ -16,6 +16,7 @@ | ||||
| 
 | ||||
| package im.vector.app.features.settings.devices | ||||
| 
 | ||||
| import im.vector.app.features.settings.devices.v2.CurrentSessionCrossSigningInfo | ||||
| import io.mockk.every | ||||
| import io.mockk.mockk | ||||
| import io.mockk.verify | ||||
|  | ||||
| @ -18,7 +18,7 @@ package im.vector.app.features.settings.devices.v2.overview | ||||
| 
 | ||||
| import androidx.lifecycle.MutableLiveData | ||||
| import androidx.lifecycle.asFlow | ||||
| import im.vector.app.features.settings.devices.CurrentSessionCrossSigningInfo | ||||
| import im.vector.app.features.settings.devices.v2.CurrentSessionCrossSigningInfo | ||||
| import im.vector.app.features.settings.devices.DeviceFullInfo | ||||
| import im.vector.app.features.settings.devices.GetCurrentSessionCrossSigningInfoUseCase | ||||
| import im.vector.app.features.settings.devices.GetEncryptionTrustLevelForDeviceUseCase | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user