Merge branch 'develop' into alfogrillo/learn_more_sheet

# Conflicts:
#	RiotSwiftUI/Modules/UserSessions/UserOtherSessions/UserOtherSessionsModels.swift
#	RiotSwiftUI/Modules/UserSessions/UserOtherSessions/UserOtherSessionsViewModel.swift
#	RiotSwiftUI/Modules/UserSessions/UserSessionOverview/UserSessionOverviewModels.swift
#	RiotSwiftUI/Modules/UserSessions/UserSessionOverview/UserSessionOverviewViewModel.swift
#	RiotSwiftUI/Modules/UserSessions/UserSessionOverview/View/UserSessionOverview.swift
This commit is contained in:
Alfonso Grillo
2022-11-03 18:18:08 +01:00
34 changed files with 315 additions and 107 deletions
@@ -46,6 +46,7 @@ final class UserSessionOverviewCoordinator: Coordinator, Presentable {
let service = UserSessionOverviewService(session: parameters.session, sessionInfo: parameters.sessionInfo)
viewModel = UserSessionOverviewViewModel(sessionInfo: parameters.sessionInfo,
service: service,
settingsService: RiotSettings.shared,
sessionsOverviewDataPublisher: parameters.sessionsOverviewDataPublisher)
hostingController = VectorHostingController(rootView: UserSessionOverview(viewModel: viewModel.context))
@@ -123,7 +123,7 @@ enum MockUserSessionOverviewScreenState: MockScreenState, CaseIterable {
service = MockUserSessionOverviewService(pusherEnabled: true, remotelyTogglingPushersAvailable: false)
}
let viewModel = UserSessionOverviewViewModel(sessionInfo: session, service: service)
let viewModel = UserSessionOverviewViewModel(sessionInfo: session, service: service, settingsService: MockUserSessionSettings())
// can simulate service and viewModel actions here if needs be.
return ([viewModel], AnyView(UserSessionOverview(viewModel: viewModel.context)))
}
@@ -22,7 +22,7 @@ import XCTest
class UserSessionOverviewViewModelTests: XCTestCase {
func test_whenVerifyCurrentSessionProcessed_completionWithVerifyCurrentSessionCalled() {
let sessionInfo = createUserSessionInfo()
let sut = UserSessionOverviewViewModel(sessionInfo: sessionInfo, service: MockUserSessionOverviewService())
let sut = UserSessionOverviewViewModel(sessionInfo: sessionInfo, service: MockUserSessionOverviewService(), settingsService: MockUserSessionSettings())
XCTAssertEqual(sut.state.isPusherEnabled, nil)
var modelResult: UserSessionOverviewViewModelResult?
@@ -35,7 +35,7 @@ class UserSessionOverviewViewModelTests: XCTestCase {
func test_whenViewSessionDetailsProcessed_completionWithShowSessionDetailsCalled() {
let sessionInfo = createUserSessionInfo()
let sut = UserSessionOverviewViewModel(sessionInfo: sessionInfo, service: MockUserSessionOverviewService())
let sut = UserSessionOverviewViewModel(sessionInfo: sessionInfo, service: MockUserSessionOverviewService(), settingsService: MockUserSessionSettings())
XCTAssertEqual(sut.state.isPusherEnabled, nil)
var modelResult: UserSessionOverviewViewModelResult?
@@ -49,7 +49,7 @@ class UserSessionOverviewViewModelTests: XCTestCase {
func test_whenViewSessionDetailsProcessed_toggleAvailablePusher() {
let sessionInfo = createUserSessionInfo()
let service = MockUserSessionOverviewService(pusherEnabled: true)
let sut = UserSessionOverviewViewModel(sessionInfo: sessionInfo, service: service)
let sut = UserSessionOverviewViewModel(sessionInfo: sessionInfo, service: service, settingsService: MockUserSessionSettings())
XCTAssertTrue(sut.state.remotelyTogglingPushersAvailable)
XCTAssertEqual(sut.state.isPusherEnabled, true)
@@ -62,7 +62,7 @@ class UserSessionOverviewViewModelTests: XCTestCase {
func test_whenViewSessionDetailsProcessed_toggleNoPusher() {
let sessionInfo = createUserSessionInfo()
let service = MockUserSessionOverviewService(pusherEnabled: nil)
let sut = UserSessionOverviewViewModel(sessionInfo: sessionInfo, service: service)
let sut = UserSessionOverviewViewModel(sessionInfo: sessionInfo, service: service, settingsService: MockUserSessionSettings())
XCTAssertTrue(sut.state.remotelyTogglingPushersAvailable)
XCTAssertEqual(sut.state.isPusherEnabled, nil)
@@ -75,7 +75,7 @@ class UserSessionOverviewViewModelTests: XCTestCase {
func test_whenViewSessionDetailsProcessed_remotelyTogglingPushersNotAvailable() {
let sessionInfo = createUserSessionInfo()
let service = MockUserSessionOverviewService(pusherEnabled: true, remotelyTogglingPushersAvailable: false)
let sut = UserSessionOverviewViewModel(sessionInfo: sessionInfo, service: service)
let sut = UserSessionOverviewViewModel(sessionInfo: sessionInfo, service: service, settingsService: MockUserSessionSettings())
XCTAssertFalse(sut.state.remotelyTogglingPushersAvailable)
XCTAssertEqual(sut.state.isPusherEnabled, true)
@@ -44,6 +44,7 @@ struct UserSessionOverviewViewState: BindableState {
var isPusherEnabled: Bool?
var remotelyTogglingPushersAvailable: Bool
var showLoadingIndicator: Bool
var showLocationInfo: Bool
}
enum UserSessionOverviewViewAction {
@@ -52,5 +53,6 @@ enum UserSessionOverviewViewAction {
case togglePushNotifications
case renameSession
case logoutOfSession
case showLocationInfo
case viewSessionInfo
}
@@ -22,13 +22,15 @@ typealias UserSessionOverviewViewModelType = StateStoreViewModel<UserSessionOver
class UserSessionOverviewViewModel: UserSessionOverviewViewModelType, UserSessionOverviewViewModelProtocol {
private let sessionInfo: UserSessionInfo
private let service: UserSessionOverviewServiceProtocol
private let settingService: UserSessionSettingsProtocol
var completion: ((UserSessionOverviewViewModelResult) -> Void)?
// MARK: - Setup
init(sessionInfo: UserSessionInfo,
service: UserSessionOverviewServiceProtocol,
settingsService: UserSessionSettingsProtocol,
sessionsOverviewDataPublisher: CurrentValueSubject<UserSessionsOverviewData, Never> = .init(.init(currentSession: nil,
unverifiedSessions: [],
inactiveSessions: [],
@@ -36,13 +38,15 @@ class UserSessionOverviewViewModel: UserSessionOverviewViewModelType, UserSessio
linkDeviceEnabled: false))) {
self.sessionInfo = sessionInfo
self.service = service
self.settingService = settingsService
let cardViewData = UserSessionCardViewData(sessionInfo: sessionInfo)
let state = UserSessionOverviewViewState(cardViewData: cardViewData,
isCurrentSession: sessionInfo.isCurrent,
isPusherEnabled: service.pusherEnabledSubject.value,
remotelyTogglingPushersAvailable: service.remotelyTogglingPushersAvailableSubject.value,
showLoadingIndicator: false)
showLoadingIndicator: false,
showLocationInfo: settingsService.showIPAddressesInSessionsManager)
super.init(initialViewState: state)
startObservingService()
@@ -95,6 +99,9 @@ class UserSessionOverviewViewModel: UserSessionOverviewViewModelType, UserSessio
completion?(.renameSession(sessionInfo))
case .logoutOfSession:
completion?(.logoutOfSession(sessionInfo))
case .showLocationInfo:
settingService.showIPAddressesInSessionsManager.toggle()
state.showLocationInfo = settingService.showIPAddressesInSessionsManager
case .viewSessionInfo:
completion?(.showSessionStateInfo(sessionInfo))
}
@@ -33,7 +33,8 @@ struct UserSessionOverview: View {
},
onLearnMoreAction: {
viewModel.send(viewAction: .viewSessionInfo)
}
},
showLocationInformations: viewModel.viewState.showLocationInfo
)
.padding(16)
@@ -75,6 +76,14 @@ struct UserSessionOverview: View {
Label(VectorL10n.manageSessionRename, systemImage: "pencil")
}
.accessibilityIdentifier(VectorL10n.manageSessionRename)
if viewModel.viewState.isCurrentSession == false {
Button {
viewModel.send(viewAction: .showLocationInfo)
} label: {
Label(showLocationInfo: viewModel.viewState.showLocationInfo)
}
}
}
DestructiveButton {
viewModel.send(viewAction: .logoutOfSession)