SP4: space settings (#5730)

* SP4: Space Settings

- Space settings screen implemented
- No space upgrade available as per Element web
- Need more insights for the space address field
- Added settings live update
- Added local alias implementation
This commit is contained in:
Gil Eluard
2022-03-04 12:53:42 +01:00
committed by GitHub
parent 136b40e2eb
commit bc55dbb11b
43 changed files with 2184 additions and 118 deletions
@@ -110,7 +110,7 @@ final class RoomAccessCoordinator: Coordinator {
}
private func createRoomAccessTypeCoordinator() -> RoomAccessTypeChooserCoordinator {
let coordinator: RoomAccessTypeChooserCoordinator = RoomAccessTypeChooserCoordinator(parameters: RoomAccessTypeChooserCoordinatorParameters(roomId: parameters.room.roomId, session: parameters.room.mxSession))
let coordinator: RoomAccessTypeChooserCoordinator = RoomAccessTypeChooserCoordinator(parameters: RoomAccessTypeChooserCoordinatorParameters(roomId: parameters.room.roomId, allowsRoomUpgrade: parameters.allowsRoomUpgrade, session: parameters.room.mxSession))
coordinator.callback = { [weak self] result in
guard let self = self else { return }
@@ -34,6 +34,7 @@ final class RoomAccessCoordinatorBridgePresenter: NSObject {
// MARK: Private
private let room: MXRoom
private let allowsRoomUpgrade: Bool
private var coordinator: RoomAccessCoordinator?
// MARK: Public
@@ -42,16 +43,22 @@ final class RoomAccessCoordinatorBridgePresenter: NSObject {
// MARK: - Setup
init(room: MXRoom) {
init(room: MXRoom,
allowsRoomUpgrade: Bool) {
self.room = room
self.allowsRoomUpgrade = allowsRoomUpgrade
super.init()
}
convenience init(room: MXRoom) {
self.init(room: room, allowsRoomUpgrade: true)
}
// MARK: - Public
func present(from viewController: UIViewController, animated: Bool) {
let navigationRouter = NavigationRouter()
let coordinator = RoomAccessCoordinator(parameters: RoomAccessCoordinatorParameters(room: room, navigationRouter: navigationRouter))
let coordinator = RoomAccessCoordinator(parameters: RoomAccessCoordinatorParameters(room: room, allowsRoomUpgrade: allowsRoomUpgrade, navigationRouter: navigationRouter))
coordinator.callback = { [weak self] result in
guard let self = self else { return }
@@ -23,13 +23,18 @@ struct RoomAccessCoordinatorParameters {
/// The Matrix room
let room: MXRoom
/// Set this value to false if you want to avoid room to be upgraded
let allowsRoomUpgrade: Bool
/// The navigation router that manage physical navigation
let navigationRouter: NavigationRouterType
init(room: MXRoom,
allowsRoomUpgrade: Bool = true,
navigationRouter: NavigationRouterType? = nil) {
self.room = room
self.allowsRoomUpgrade = allowsRoomUpgrade
self.navigationRouter = navigationRouter ?? NavigationRouter(navigationController: RiotNavigationController())
}
}
@@ -18,6 +18,7 @@ import SwiftUI
struct RoomAccessTypeChooserCoordinatorParameters {
let roomId: String
let allowsRoomUpgrade: Bool
let session: MXSession
}
@@ -42,7 +43,7 @@ final class RoomAccessTypeChooserCoordinator: Coordinator, Presentable {
@available(iOS 14.0, *)
init(parameters: RoomAccessTypeChooserCoordinatorParameters) {
self.parameters = parameters
let viewModel = RoomAccessTypeChooserViewModel(roomAccessTypeChooserService: RoomAccessTypeChooserService(roomId: parameters.roomId, session: parameters.session))
let viewModel = RoomAccessTypeChooserViewModel(roomAccessTypeChooserService: RoomAccessTypeChooserService(roomId: parameters.roomId, allowsRoomUpgrade: parameters.allowsRoomUpgrade, session: parameters.session))
let room = parameters.session.room(withRoomId: parameters.roomId)
let view = RoomAccessTypeChooser(viewModel: viewModel.context, roomName: room?.displayName ?? "")
roomAccessTypeChooserViewModel = viewModel
@@ -26,6 +26,7 @@ class RoomAccessTypeChooserService: RoomAccessTypeChooserServiceProtocol {
// MARK: Private
private let roomId: String
private let allowsRoomUpgrade: Bool
private let session: MXSession
private var replacementRoom: MXRoom?
private var didBuildSpaceGraphObserver: Any?
@@ -63,8 +64,9 @@ class RoomAccessTypeChooserService: RoomAccessTypeChooserServiceProtocol {
// MARK: - Setup
init(roomId: String, session: MXSession) {
init(roomId: String, allowsRoomUpgrade: Bool, session: MXSession) {
self.roomId = roomId
self.allowsRoomUpgrade = allowsRoomUpgrade
self.session = session
self.currentRoomId = roomId
self.versionOverride = session.homeserverCapabilitiesService.versionOverrideForFeature(.restricted)
@@ -144,7 +146,7 @@ class RoomAccessTypeChooserService: RoomAccessTypeChooserServiceProtocol {
// MARK: - Private
private func setupAccessItems() {
guard let spaceService = session.spaceService, let ancestors = spaceService.ancestorsPerRoomId[currentRoomId], !ancestors.isEmpty else {
guard let spaceService = session.spaceService, let ancestors = spaceService.ancestorsPerRoomId[currentRoomId], !ancestors.isEmpty, allowsRoomUpgrade || !roomUpgradeRequired else {
self.accessItems = [
RoomAccessTypeChooserAccessItem(id: .private, isSelected: false, title: VectorL10n.private, detail: VectorL10n.roomAccessSettingsScreenPrivateMessage, badgeText: nil),
RoomAccessTypeChooserAccessItem(id: .public, isSelected: false, title: VectorL10n.public, detail: VectorL10n.roomAccessSettingsScreenPublicMessage, badgeText: nil),