mirror of
https://github.com/element-hq/element-x-ios.git
synced 2025-03-10 13:37:11 +00:00
Account URL is now fetched async (#2769)
This commit is contained in:
parent
f688d2eda4
commit
18dc9cd20f
@ -7332,7 +7332,7 @@
|
||||
repositoryURL = "https://github.com/matrix-org/matrix-rust-components-swift";
|
||||
requirement = {
|
||||
kind = exactVersion;
|
||||
version = 1.1.62;
|
||||
version = 1.1.63;
|
||||
};
|
||||
};
|
||||
821C67C9A7F8CC3FD41B28B4 /* XCRemoteSwiftPackageReference "emojibase-bindings" */ = {
|
||||
|
@ -139,8 +139,8 @@
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/matrix-org/matrix-rust-components-swift",
|
||||
"state" : {
|
||||
"revision" : "c060a2a24f3cfa3cff3f6075bdc1e88abea72553",
|
||||
"version" : "1.1.62"
|
||||
"revision" : "3d116223646fc7310b977e5116f96b834a9f57f6",
|
||||
"version" : "1.1.63"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -113,8 +113,8 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol {
|
||||
presentSecureBackupScreen(animated: true)
|
||||
case .userDetails:
|
||||
presentUserDetailsEditScreen()
|
||||
case .accountProfile:
|
||||
presentAccountProfileURL()
|
||||
case let .manageAccount(url):
|
||||
presentAccountManagementURL(url)
|
||||
case .analytics:
|
||||
presentAnalyticsScreen()
|
||||
case .appLock:
|
||||
@ -130,8 +130,6 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol {
|
||||
presentLegalInformationScreen()
|
||||
case .blockedUsers:
|
||||
presentBlockedUsersScreen()
|
||||
case .accountSessions:
|
||||
presentAccountSessionsListURL()
|
||||
case .notifications:
|
||||
presentNotificationSettings()
|
||||
case .advancedSettings:
|
||||
@ -242,23 +240,7 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol {
|
||||
}
|
||||
|
||||
// MARK: OIDC Account Management
|
||||
|
||||
private func presentAccountProfileURL() {
|
||||
guard let url = parameters.userSession.clientProxy.accountURL(action: .profile) else {
|
||||
MXLog.error("Account URL is missing.")
|
||||
return
|
||||
}
|
||||
presentAccountManagementURL(url)
|
||||
}
|
||||
|
||||
private func presentAccountSessionsListURL() {
|
||||
guard let url = parameters.userSession.clientProxy.accountURL(action: .sessionsList) else {
|
||||
MXLog.error("Account URL is missing.")
|
||||
return
|
||||
}
|
||||
presentAccountManagementURL(url)
|
||||
}
|
||||
|
||||
|
||||
private var accountSettingsPresenter: OIDCAccountSettingsPresenter?
|
||||
private func presentAccountManagementURL(_ url: URL) {
|
||||
// Note to anyone in the future if you come back here to make this open in Safari instead of a WAS.
|
||||
|
@ -2104,14 +2104,14 @@ class ClientProxyMock: ClientProxyProtocol {
|
||||
}
|
||||
}
|
||||
}
|
||||
var accountURLActionClosure: ((AccountManagementAction) -> URL?)?
|
||||
var accountURLActionClosure: ((AccountManagementAction) async -> URL?)?
|
||||
|
||||
func accountURL(action: AccountManagementAction) -> URL? {
|
||||
func accountURL(action: AccountManagementAction) async -> URL? {
|
||||
accountURLActionCallsCount += 1
|
||||
accountURLActionReceivedAction = action
|
||||
accountURLActionReceivedInvocations.append(action)
|
||||
if let accountURLActionClosure = accountURLActionClosure {
|
||||
return accountURLActionClosure(action)
|
||||
return await accountURLActionClosure(action)
|
||||
} else {
|
||||
return accountURLActionReturnValue
|
||||
}
|
||||
|
@ -135,9 +135,9 @@ class SDKClientMock: SDKClientProtocol {
|
||||
}
|
||||
}
|
||||
}
|
||||
public var accountUrlActionClosure: ((AccountManagementAction?) throws -> String?)?
|
||||
public var accountUrlActionClosure: ((AccountManagementAction?) async throws -> String?)?
|
||||
|
||||
public func accountUrl(action: AccountManagementAction?) throws -> String? {
|
||||
public func accountUrl(action: AccountManagementAction?) async throws -> String? {
|
||||
if let error = accountUrlActionThrowableError {
|
||||
throw error
|
||||
}
|
||||
@ -145,7 +145,7 @@ class SDKClientMock: SDKClientProtocol {
|
||||
accountUrlActionReceivedAction = action
|
||||
accountUrlActionReceivedInvocations.append(action)
|
||||
if let accountUrlActionClosure = accountUrlActionClosure {
|
||||
return try accountUrlActionClosure(action)
|
||||
return try await accountUrlActionClosure(action)
|
||||
} else {
|
||||
return accountUrlActionReturnValue
|
||||
}
|
||||
|
@ -27,13 +27,12 @@ enum SettingsScreenCoordinatorAction {
|
||||
case logout
|
||||
case secureBackup
|
||||
case userDetails
|
||||
case accountProfile
|
||||
case analytics
|
||||
case appLock
|
||||
case bugReport
|
||||
case about
|
||||
case blockedUsers
|
||||
case accountSessions
|
||||
case manageAccount(url: URL)
|
||||
case notifications
|
||||
case advancedSettings
|
||||
case developerOptions
|
||||
@ -64,8 +63,8 @@ final class SettingsScreenCoordinator: CoordinatorProtocol {
|
||||
actionsSubject.send(.dismiss)
|
||||
case .userDetails:
|
||||
actionsSubject.send(.userDetails)
|
||||
case .accountProfile:
|
||||
actionsSubject.send(.accountProfile)
|
||||
case let .manageAccount(url):
|
||||
actionsSubject.send(.manageAccount(url: url))
|
||||
case .analytics:
|
||||
actionsSubject.send(.analytics)
|
||||
case .appLock:
|
||||
@ -78,8 +77,6 @@ final class SettingsScreenCoordinator: CoordinatorProtocol {
|
||||
actionsSubject.send(.blockedUsers)
|
||||
case .secureBackup:
|
||||
actionsSubject.send(.secureBackup)
|
||||
case .accountSessionsList:
|
||||
actionsSubject.send(.accountSessions)
|
||||
case .notifications:
|
||||
actionsSubject.send(.notifications)
|
||||
case .advancedSettings:
|
||||
|
@ -17,17 +17,16 @@
|
||||
import Foundation
|
||||
import UIKit
|
||||
|
||||
enum SettingsScreenViewModelAction {
|
||||
enum SettingsScreenViewModelAction: Equatable {
|
||||
case close
|
||||
case userDetails
|
||||
case accountProfile
|
||||
case manageAccount(url: URL)
|
||||
case analytics
|
||||
case appLock
|
||||
case reportBug
|
||||
case about
|
||||
case blockedUsers
|
||||
case secureBackup
|
||||
case accountSessionsList
|
||||
case notifications
|
||||
case advancedSettings
|
||||
case developerOptions
|
||||
@ -57,14 +56,13 @@ struct SettingsScreenViewState: BindableState {
|
||||
enum SettingsScreenViewAction {
|
||||
case close
|
||||
case userDetails
|
||||
case accountProfile
|
||||
case analytics
|
||||
case appLock
|
||||
case reportBug
|
||||
case about
|
||||
case blockedUsers
|
||||
case secureBackup
|
||||
case accountSessionsList
|
||||
case manageAccount(url: URL)
|
||||
case notifications
|
||||
case developerOptions
|
||||
case advancedSettings
|
||||
|
@ -29,8 +29,6 @@ class SettingsScreenViewModel: SettingsScreenViewModelType, SettingsScreenViewMo
|
||||
init(userSession: UserSessionProtocol, appSettings: AppSettings) {
|
||||
super.init(initialViewState: .init(deviceID: userSession.deviceID,
|
||||
userID: userSession.userID,
|
||||
accountProfileURL: userSession.clientProxy.accountURL(action: .profile),
|
||||
accountSessionsListURL: userSession.clientProxy.accountURL(action: .sessionsList),
|
||||
showDeveloperOptions: appSettings.isDevelopmentBuild),
|
||||
imageProvider: userSession.mediaProvider)
|
||||
|
||||
@ -81,6 +79,8 @@ class SettingsScreenViewModel: SettingsScreenViewModelType, SettingsScreenViewMo
|
||||
Task {
|
||||
await userSession.clientProxy.loadUserAvatarURL()
|
||||
await userSession.clientProxy.loadUserDisplayName()
|
||||
await state.accountProfileURL = userSession.clientProxy.accountURL(action: .profile)
|
||||
await state.accountSessionsListURL = userSession.clientProxy.accountURL(action: .sessionsList)
|
||||
}
|
||||
}
|
||||
|
||||
@ -90,8 +90,8 @@ class SettingsScreenViewModel: SettingsScreenViewModelType, SettingsScreenViewMo
|
||||
actionsSubject.send(.close)
|
||||
case .userDetails:
|
||||
actionsSubject.send(.userDetails)
|
||||
case .accountProfile:
|
||||
actionsSubject.send(.accountProfile)
|
||||
case let .manageAccount(url):
|
||||
actionsSubject.send(.manageAccount(url: url))
|
||||
case .analytics:
|
||||
actionsSubject.send(.analytics)
|
||||
case .appLock:
|
||||
@ -108,8 +108,6 @@ class SettingsScreenViewModel: SettingsScreenViewModelType, SettingsScreenViewMo
|
||||
actionsSubject.send(.secureBackup)
|
||||
case .notifications:
|
||||
actionsSubject.send(.notifications)
|
||||
case .accountSessionsList:
|
||||
actionsSubject.send(.accountSessionsList)
|
||||
case .advancedSettings:
|
||||
actionsSubject.send(.advancedSettings)
|
||||
case .developerOptions:
|
||||
|
@ -29,9 +29,7 @@ struct SettingsScreen: View {
|
||||
|
||||
mainSection
|
||||
|
||||
if context.viewState.accountSessionsListURL != nil {
|
||||
manageSessionsSection
|
||||
}
|
||||
manageSessionsSection
|
||||
|
||||
advancedOptionsSection
|
||||
|
||||
@ -95,11 +93,11 @@ struct SettingsScreen: View {
|
||||
|
||||
private var mainSection: some View {
|
||||
Section {
|
||||
if context.viewState.accountProfileURL != nil {
|
||||
if let url = context.viewState.accountProfileURL {
|
||||
ListRow(label: .default(title: L10n.actionManageAccount,
|
||||
icon: \.userProfile),
|
||||
kind: .button {
|
||||
context.send(viewAction: .accountProfile)
|
||||
context.send(viewAction: .manageAccount(url: url))
|
||||
})
|
||||
.accessibilityIdentifier(A11yIdentifiers.settingsScreen.account)
|
||||
}
|
||||
@ -150,13 +148,16 @@ struct SettingsScreen: View {
|
||||
}
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
private var manageSessionsSection: some View {
|
||||
Section {
|
||||
ListRow(label: .default(title: L10n.actionManageDevices,
|
||||
icon: \.devices),
|
||||
kind: .button {
|
||||
context.send(viewAction: .accountSessionsList)
|
||||
})
|
||||
if let url = context.viewState.accountSessionsListURL {
|
||||
Section {
|
||||
ListRow(label: .default(title: L10n.actionManageDevices,
|
||||
icon: \.devices),
|
||||
kind: .button {
|
||||
context.send(viewAction: .manageAccount(url: url))
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -252,6 +253,7 @@ struct SettingsScreen_Previews: PreviewProvider, TestablePreview {
|
||||
static var previews: some View {
|
||||
NavigationStack {
|
||||
SettingsScreen(context: viewModel.context)
|
||||
.snapshot(delay: 1.0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -281,8 +281,8 @@ class ClientProxy: ClientProxyProtocol {
|
||||
}
|
||||
}
|
||||
|
||||
func accountURL(action: AccountManagementAction) -> URL? {
|
||||
try? client.accountUrl(action: action).flatMap(URL.init(string:))
|
||||
func accountURL(action: AccountManagementAction) async -> URL? {
|
||||
try? await client.accountUrl(action: action).flatMap(URL.init(string:))
|
||||
}
|
||||
|
||||
func createDirectRoomIfNeeded(with userID: String, expectedRoomName: String?) async -> Result<(roomID: String, isNewRoom: Bool), ClientProxyError> {
|
||||
|
@ -121,7 +121,7 @@ protocol ClientProxyProtocol: AnyObject, MediaLoaderProtocol {
|
||||
|
||||
func stopSync()
|
||||
|
||||
func accountURL(action: AccountManagementAction) -> URL?
|
||||
func accountURL(action: AccountManagementAction) async -> URL?
|
||||
|
||||
func createDirectRoomIfNeeded(with userID: String, expectedRoomName: String?) async -> Result<(roomID: String, isNewRoom: Bool), ClientProxyError>
|
||||
|
||||
|
BIN
PreviewTests/__Snapshots__/PreviewTests/test_settingsScreen-iPad-en-GB.1.png
(Stored with Git LFS)
BIN
PreviewTests/__Snapshots__/PreviewTests/test_settingsScreen-iPad-en-GB.1.png
(Stored with Git LFS)
Binary file not shown.
BIN
PreviewTests/__Snapshots__/PreviewTests/test_settingsScreen-iPad-pseudo.1.png
(Stored with Git LFS)
BIN
PreviewTests/__Snapshots__/PreviewTests/test_settingsScreen-iPad-pseudo.1.png
(Stored with Git LFS)
Binary file not shown.
BIN
PreviewTests/__Snapshots__/PreviewTests/test_settingsScreen-iPhone-15-en-GB.1.png
(Stored with Git LFS)
BIN
PreviewTests/__Snapshots__/PreviewTests/test_settingsScreen-iPhone-15-en-GB.1.png
(Stored with Git LFS)
Binary file not shown.
BIN
PreviewTests/__Snapshots__/PreviewTests/test_settingsScreen-iPhone-15-pseudo.1.png
(Stored with Git LFS)
BIN
PreviewTests/__Snapshots__/PreviewTests/test_settingsScreen-iPhone-15-pseudo.1.png
(Stored with Git LFS)
Binary file not shown.
@ -49,7 +49,7 @@ packages:
|
||||
# Element/Matrix dependencies
|
||||
MatrixRustSDK:
|
||||
url: https://github.com/matrix-org/matrix-rust-components-swift
|
||||
exactVersion: 1.1.62
|
||||
exactVersion: 1.1.63
|
||||
# path: ../matrix-rust-sdk
|
||||
Compound:
|
||||
url: https://github.com/element-hq/compound-ios
|
||||
|
Loading…
x
Reference in New Issue
Block a user