Use the same UI as Android when tapping a link to a private room. (#3044)

* Use the same UI as Android when tapping a link to a private room.

* Fix preview of knocking.

* Fix snapshots.
This commit is contained in:
Doug
2024-07-18 15:58:17 +01:00
committed by GitHub
parent 5370ba1658
commit 84d76a8dde
19 changed files with 50 additions and 32 deletions

View File

@@ -43,6 +43,14 @@ struct JoinRoomScreenViewState: BindableState {
roomDetails?.name ?? L10n.screenJoinRoomTitleNoPreview
}
var subtitle: String? {
switch mode {
case .loading: nil
case .unknown: L10n.screenJoinRoomSubtitleNoPreview
case .invited, .join, .knock: roomDetails?.canonicalAlias
}
}
var avatar: RoomAvatar {
.room(id: roomID, name: title, avatarURL: roomDetails?.avatarURL)
}

View File

@@ -22,6 +22,7 @@ typealias JoinRoomScreenViewModelType = StateStoreViewModel<JoinRoomScreenViewSt
class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewModelProtocol {
private let roomID: String
private let via: [String]
private let allowKnocking: Bool // For preview tests only, actions aren't sent.
private let clientProxy: ClientProxyProtocol
private let userIndicatorController: UserIndicatorControllerProtocol
@@ -32,11 +33,13 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
init(roomID: String,
via: [String],
allowKnocking: Bool = false,
clientProxy: ClientProxyProtocol,
mediaProvider: MediaProviderProtocol,
userIndicatorController: UserIndicatorControllerProtocol) {
self.roomID = roomID
self.via = via
self.allowKnocking = allowKnocking
self.clientProxy = clientProxy
self.userIndicatorController = userIndicatorController
@@ -81,6 +84,8 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
switch await clientProxy.roomPreviewForIdentifier(roomID, via: via) {
case .success(let roomDetails):
state.roomDetails = roomDetails
case .failure(.roomPreviewIsPrivate):
break // Handled by the mode, we don't need an error indicator.
case .failure:
userIndicatorController.submitIndicator(UserIndicator(title: L10n.errorUnknown))
}
@@ -96,8 +101,8 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
state.mode = .join
} else if roomDetails.isInvited {
state.mode = .invited
} else if roomDetails.canKnock { // Knocking is not supported yet, treat it as .unknown
state.mode = .unknown
} else if roomDetails.canKnock, allowKnocking { // Knocking is not supported yet, the flag is purely for preview tests.
state.mode = .knock
} else {
state.mode = .unknown
}

View File

@@ -51,10 +51,11 @@ struct JoinRoomScreen: View {
.foregroundStyle(.compound.textPrimary)
.multilineTextAlignment(.center)
if let alias = context.viewState.roomDetails?.canonicalAlias {
Text(alias)
if let subtitle = context.viewState.subtitle {
Text(subtitle)
.font(.compound.bodyMD)
.foregroundStyle(.compound.textSecondary)
.multilineTextAlignment(.center)
}
if let memberCount = context.viewState.roomDetails?.memberCount {
@@ -168,6 +169,7 @@ struct JoinRoomScreen_Previews: PreviewProvider, TestablePreview {
return JoinRoomScreenViewModel(roomID: "1",
via: [],
allowKnocking: true,
clientProxy: clientProxy,
mediaProvider: MockMediaProvider(),
userIndicatorController: ServiceLocator.shared.userIndicatorController)

View File

@@ -481,6 +481,8 @@ class ClientProxy: ClientProxyProtocol {
do {
let roomPreview = try await client.getRoomPreviewFromRoomId(roomId: identifier, viaServers: via)
return .success(.init(roomPreview))
} catch let error as ClientError where error.code == .forbidden {
return .failure(.roomPreviewIsPrivate)
} catch {
MXLog.error("Failed retrieving preview for room: \(identifier) with error: \(error)")
return .failure(.sdkError(error))

View File

@@ -43,6 +43,7 @@ enum ClientProxyError: Error {
case invalidMedia
case invalidUserIDServerName
case failedUploadingMedia(Error, MatrixErrorCode)
case roomPreviewIsPrivate
}
enum SlidingSyncConstants {

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2e66eb9d53892d4849c24958504b80a47029b242d19d37750eda9e92be99f16a
size 1980877
oid sha256:ff22a5528ff2c3df3d16f8340919a8b31117603d374db7531d26021c774d3512
size 1980756

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:84719756861fed326f1b076a63e9229a3d725da98342a3f31d00e8614865537e
size 1944887
oid sha256:656011b2f47a26f568bf84df3ccd5c14281722a9102bf8b3b79b714c22c26b21
size 1944766

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:12fcce0c1ecfe6a4cf327fc1bc1392df9645e1598e9f198b19ac6f5d0fa6ea7e
size 2004327
oid sha256:29ba90bb910486c5aba146e7f6692975d76adbde4c7aa291ada4164291726848
size 1936891

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7eb5aca42879ec370564b491fe57faf286d479a4aa02566e6fa681004f322a7a
size 1953618
oid sha256:a0b850d16e626197c8ce12f6b6467284adefaf19295b2c75deb13599bda4796f
size 1963867

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2f249e7835423b71f8b5920def18070ba55875b2edc43898662e00d4780b9bc1
size 1983443
oid sha256:0cfe8c8a252ff738c7f630d083e5da55717027c01b21bf7c296346516fcc4650
size 1983322

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d17a5a65a74b86c36e84246a0c7dabaf646e7c0df3990b8c85b3699bca3241cf
size 1946578
oid sha256:c091decb9974de8d19b018e19285428fc5c5ee13c4706347c08b1338724db372
size 1946457

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:12fcce0c1ecfe6a4cf327fc1bc1392df9645e1598e9f198b19ac6f5d0fa6ea7e
size 2004327
oid sha256:de02b3401e0343c7784e8b29f8a255c4eafaf47574f55fdf518cf3578cd966a5
size 1938644

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:74c93b3fc3f013c500294c67cd801a6bec14b184dfac231c176ffc5b2b48158e
size 1957146
oid sha256:b3cb6c41cb549203b7bae407d7dd9bc11381a1f15087d148dd067dbaab819e75
size 1977775

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:60a7304bba6808b92b41a36a83c8a9989ba676b893da7d2afec9dbc5e085c59f
size 818315
oid sha256:f3ebfa2fc96c65b8652344cb46cf33f3c546f3f84e74d8b3403be8aebccb9972
size 818046

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:64419b0af6a9d4e89d8cfd5e610f69c744301088eb9f281fa72bb794d799c77c
size 796935
oid sha256:f08cb674179dc0ad5765865043e1d93dc5f9612669e15c702b8c7121cbe110d7
size 796666

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:576d5682c28ac13292d982b540c4cdd9753645bd7469d7085d0de28569a1654c
size 829540
oid sha256:5ef205a1f5a1756ba3f89b8c0dd2dcfccb39da7e5bc1e72abd90fd2a3d803812
size 791829

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8fe3c40f41cd97a62e3bc8a1054e875becaeffc5279a55d422c419464ef6ec55
size 820702
oid sha256:58a83d3709c4e7d6ac704ebb46b400e4127e97b91d7a13e5a5c0ab45df214827
size 820433

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:660601c6904b98270312dadbfc9e3d14aedb66e00fc6ce6f552cd4419436720e
size 798700
oid sha256:24751938068a6a8a711d083640911f0b0d0a7a2d46e9c0cb649804a89e850e88
size 798431

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:576d5682c28ac13292d982b540c4cdd9753645bd7469d7085d0de28569a1654c
size 829540
oid sha256:4e8df72dbca5c057ce933d2602d5e29350a3af0e79f6c1431b6cee897030e56d
size 793487