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:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -43,6 +43,7 @@ enum ClientProxyError: Error {
|
||||
case invalidMedia
|
||||
case invalidUserIDServerName
|
||||
case failedUploadingMedia(Error, MatrixErrorCode)
|
||||
case roomPreviewIsPrivate
|
||||
}
|
||||
|
||||
enum SlidingSyncConstants {
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2e66eb9d53892d4849c24958504b80a47029b242d19d37750eda9e92be99f16a
|
||||
size 1980877
|
||||
oid sha256:ff22a5528ff2c3df3d16f8340919a8b31117603d374db7531d26021c774d3512
|
||||
size 1980756
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:84719756861fed326f1b076a63e9229a3d725da98342a3f31d00e8614865537e
|
||||
size 1944887
|
||||
oid sha256:656011b2f47a26f568bf84df3ccd5c14281722a9102bf8b3b79b714c22c26b21
|
||||
size 1944766
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:12fcce0c1ecfe6a4cf327fc1bc1392df9645e1598e9f198b19ac6f5d0fa6ea7e
|
||||
size 2004327
|
||||
oid sha256:29ba90bb910486c5aba146e7f6692975d76adbde4c7aa291ada4164291726848
|
||||
size 1936891
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7eb5aca42879ec370564b491fe57faf286d479a4aa02566e6fa681004f322a7a
|
||||
size 1953618
|
||||
oid sha256:a0b850d16e626197c8ce12f6b6467284adefaf19295b2c75deb13599bda4796f
|
||||
size 1963867
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2f249e7835423b71f8b5920def18070ba55875b2edc43898662e00d4780b9bc1
|
||||
size 1983443
|
||||
oid sha256:0cfe8c8a252ff738c7f630d083e5da55717027c01b21bf7c296346516fcc4650
|
||||
size 1983322
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d17a5a65a74b86c36e84246a0c7dabaf646e7c0df3990b8c85b3699bca3241cf
|
||||
size 1946578
|
||||
oid sha256:c091decb9974de8d19b018e19285428fc5c5ee13c4706347c08b1338724db372
|
||||
size 1946457
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:12fcce0c1ecfe6a4cf327fc1bc1392df9645e1598e9f198b19ac6f5d0fa6ea7e
|
||||
size 2004327
|
||||
oid sha256:de02b3401e0343c7784e8b29f8a255c4eafaf47574f55fdf518cf3578cd966a5
|
||||
size 1938644
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:74c93b3fc3f013c500294c67cd801a6bec14b184dfac231c176ffc5b2b48158e
|
||||
size 1957146
|
||||
oid sha256:b3cb6c41cb549203b7bae407d7dd9bc11381a1f15087d148dd067dbaab819e75
|
||||
size 1977775
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:60a7304bba6808b92b41a36a83c8a9989ba676b893da7d2afec9dbc5e085c59f
|
||||
size 818315
|
||||
oid sha256:f3ebfa2fc96c65b8652344cb46cf33f3c546f3f84e74d8b3403be8aebccb9972
|
||||
size 818046
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:64419b0af6a9d4e89d8cfd5e610f69c744301088eb9f281fa72bb794d799c77c
|
||||
size 796935
|
||||
oid sha256:f08cb674179dc0ad5765865043e1d93dc5f9612669e15c702b8c7121cbe110d7
|
||||
size 796666
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:576d5682c28ac13292d982b540c4cdd9753645bd7469d7085d0de28569a1654c
|
||||
size 829540
|
||||
oid sha256:5ef205a1f5a1756ba3f89b8c0dd2dcfccb39da7e5bc1e72abd90fd2a3d803812
|
||||
size 791829
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8fe3c40f41cd97a62e3bc8a1054e875becaeffc5279a55d422c419464ef6ec55
|
||||
size 820702
|
||||
oid sha256:58a83d3709c4e7d6ac704ebb46b400e4127e97b91d7a13e5a5c0ab45df214827
|
||||
size 820433
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:660601c6904b98270312dadbfc9e3d14aedb66e00fc6ce6f552cd4419436720e
|
||||
size 798700
|
||||
oid sha256:24751938068a6a8a711d083640911f0b0d0a7a2d46e9c0cb649804a89e850e88
|
||||
size 798431
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:576d5682c28ac13292d982b540c4cdd9753645bd7469d7085d0de28569a1654c
|
||||
size 829540
|
||||
oid sha256:4e8df72dbca5c057ce933d2602d5e29350a3af0e79f6c1431b6cee897030e56d
|
||||
size 793487
|
||||
|
||||
Reference in New Issue
Block a user