diff --git a/ElementX/Sources/Screens/ResolveVerifiedUserSendFailureScreen/ResolveVerifiedUserSendFailureScreenModels.swift b/ElementX/Sources/Screens/ResolveVerifiedUserSendFailureScreen/ResolveVerifiedUserSendFailureScreenModels.swift index f78418d06..333d727bd 100644 --- a/ElementX/Sources/Screens/ResolveVerifiedUserSendFailureScreen/ResolveVerifiedUserSendFailureScreenModels.swift +++ b/ElementX/Sources/Screens/ResolveVerifiedUserSendFailureScreen/ResolveVerifiedUserSendFailureScreenModels.swift @@ -23,18 +23,23 @@ enum ResolveVerifiedUserSendFailureScreenViewModelAction { struct ResolveVerifiedUserSendFailureScreenViewState: BindableState { var currentFailure: TimelineItemSendFailure.VerifiedUser var currentMemberDisplayName: String + var isYou: Bool var title: String { switch currentFailure { - case .hasUnsignedDevice: L10n.screenResolveSendFailureUnsignedDeviceTitle(currentMemberDisplayName) - case .changedIdentity: L10n.screenResolveSendFailureChangedIdentityTitle(currentMemberDisplayName) + case .hasUnsignedDevice: + isYou ? L10n.screenResolveSendFailureYouUnsignedDeviceTitle : L10n.screenResolveSendFailureUnsignedDeviceTitle(currentMemberDisplayName) + case .changedIdentity: + L10n.screenResolveSendFailureChangedIdentityTitle(currentMemberDisplayName) } } var subtitle: String { switch currentFailure { - case .hasUnsignedDevice: L10n.screenResolveSendFailureUnsignedDeviceSubtitle(currentMemberDisplayName, currentMemberDisplayName) - case .changedIdentity: L10n.screenResolveSendFailureChangedIdentitySubtitle(currentMemberDisplayName) + case .hasUnsignedDevice: + isYou ? L10n.screenResolveSendFailureYouUnsignedDeviceSubtitle : L10n.screenResolveSendFailureUnsignedDeviceSubtitle(currentMemberDisplayName, currentMemberDisplayName) + case .changedIdentity: + L10n.screenResolveSendFailureChangedIdentitySubtitle(currentMemberDisplayName) } } diff --git a/ElementX/Sources/Screens/ResolveVerifiedUserSendFailureScreen/ResolveVerifiedUserSendFailureScreenViewModel.swift b/ElementX/Sources/Screens/ResolveVerifiedUserSendFailureScreen/ResolveVerifiedUserSendFailureScreenViewModel.swift index 99abf2468..90868cddb 100644 --- a/ElementX/Sources/Screens/ResolveVerifiedUserSendFailureScreen/ResolveVerifiedUserSendFailureScreenViewModel.swift +++ b/ElementX/Sources/Screens/ResolveVerifiedUserSendFailureScreen/ResolveVerifiedUserSendFailureScreenViewModel.swift @@ -49,7 +49,8 @@ class ResolveVerifiedUserSendFailureScreenViewModel: ResolveVerifiedUserSendFail } super.init(initialViewState: ResolveVerifiedUserSendFailureScreenViewState(currentFailure: failure, - currentMemberDisplayName: members[userID]?.displayName ?? userID)) + currentMemberDisplayName: members[userID]?.displayName ?? userID, + isYou: userID == roomProxy.ownUserID)) } // MARK: Public @@ -83,6 +84,7 @@ class ResolveVerifiedUserSendFailureScreenViewModel: ResolveVerifiedUserSendFail if let (userID, failure) = iterator.next() { state.currentMemberDisplayName = members[userID]?.displayName ?? userID state.currentFailure = failure + state.isYou = userID == roomProxy.ownUserID } else { actionsSubject.send(.dismiss) } diff --git a/ElementX/Sources/Screens/ResolveVerifiedUserSendFailureScreen/View/ResolveVerifiedUserSendFailureScreen.swift b/ElementX/Sources/Screens/ResolveVerifiedUserSendFailureScreen/View/ResolveVerifiedUserSendFailureScreen.swift index eaa2b0ddd..4ac7666d4 100644 --- a/ElementX/Sources/Screens/ResolveVerifiedUserSendFailureScreen/View/ResolveVerifiedUserSendFailureScreen.swift +++ b/ElementX/Sources/Screens/ResolveVerifiedUserSendFailureScreen/View/ResolveVerifiedUserSendFailureScreen.swift @@ -78,12 +78,16 @@ struct ResolveVerifiedUserSendFailureScreen: View { struct ResolveVerifiedUserSendFailureScreen_Previews: PreviewProvider, TestablePreview { static let unsignedDeviceViewModel = makeViewModel(failure: .hasUnsignedDevice(devices: ["@alice:matrix.org": []])) + static let ownUnsignedDeviceViewModel = makeViewModel(failure: .hasUnsignedDevice(devices: [RoomMemberProxyMock.mockMe.userID: []])) static let changedIdentityViewModel = makeViewModel(failure: .changedIdentity(users: ["@alice:matrix.org"])) static var previews: some View { ResolveVerifiedUserSendFailureScreen(context: unsignedDeviceViewModel.context) .previewDisplayName("Unsigned Device") + ResolveVerifiedUserSendFailureScreen(context: ownUnsignedDeviceViewModel.context) + .previewDisplayName("Own Unsigned Device") + ResolveVerifiedUserSendFailureScreen(context: changedIdentityViewModel.context) .previewDisplayName("Identity Changed") } diff --git a/ElementX/Sources/Screens/Timeline/View/ItemMenu/TimelineItemMenu.swift b/ElementX/Sources/Screens/Timeline/View/ItemMenu/TimelineItemMenu.swift index 4e3339b66..caa7098fa 100644 --- a/ElementX/Sources/Screens/Timeline/View/ItemMenu/TimelineItemMenu.swift +++ b/ElementX/Sources/Screens/Timeline/View/ItemMenu/TimelineItemMenu.swift @@ -93,7 +93,9 @@ struct TimelineItemMenu: View { Divider() .padding(.horizontal, -16) - VerifiedUserSendFailureView(failure: failure, members: context.viewState.members) { + VerifiedUserSendFailureView(failure: failure, + members: context.viewState.members, + ownUserID: context.viewState.ownUserID) { send(.itemSendInfoTapped(itemID: item.id)) } .padding(.bottom, 8) @@ -186,21 +188,26 @@ private struct VerifiedUserSendFailureView: View { let action: () -> Void private let memberDisplayName: String + private let isYou: Bool init(failure: TimelineItemSendFailure.VerifiedUser, members: [String: RoomMemberState], + ownUserID: String, action: @escaping () -> Void) { self.failure = failure self.action = action let userIDs = failure.affectedUserIDs memberDisplayName = userIDs.first.map { members[$0]?.displayName ?? $0 } ?? "" + isYou = ownUserID == userIDs.first } var title: String { switch failure { - case .hasUnsignedDevice: L10n.screenTimelineItemMenuSendFailureUnsignedDevice(memberDisplayName) - case .changedIdentity: L10n.screenTimelineItemMenuSendFailureChangedIdentity(memberDisplayName) + case .hasUnsignedDevice: + isYou ? L10n.screenTimelineItemMenuSendFailureYouUnsignedDevice : L10n.screenTimelineItemMenuSendFailureUnsignedDevice(memberDisplayName) + case .changedIdentity: + L10n.screenTimelineItemMenuSendFailureChangedIdentity(memberDisplayName) } } @@ -241,6 +248,9 @@ struct TimelineItemMenu_Previews: PreviewProvider, TestablePreview { static let (unsignedDevicesItem, _) = makeItem(deliveryStatus: .sendingFailed(.verifiedUser(.hasUnsignedDevice(devices: [ "@alice:matrix.org": ["DEVICE1", "DEVICE2"] ])))) + static let (ownUnsignedDevicesItem, _) = makeItem(deliveryStatus: .sendingFailed(.verifiedUser(.hasUnsignedDevice(devices: [ + RoomMemberProxyMock.mockMe.userID: ["DEVICE1"] + ])))) static var previews: some View { TimelineItemMenu(item: item, actions: actions) @@ -272,6 +282,10 @@ struct TimelineItemMenu_Previews: PreviewProvider, TestablePreview { .environmentObject(viewModel.context) .previewDisplayName("Unsigned Devices") + TimelineItemMenu(item: ownUnsignedDevicesItem, actions: actions) + .environmentObject(viewModel.context) + .previewDisplayName("Own Unsigned Devices") + TimelineItemMenu(item: identityChangedItem, actions: actions) .environmentObject(viewModel.context) .previewDisplayName("Identity Changed") diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_resolveVerifiedUserSendFailureScreen-iPad-en-GB.Own-Unsigned-Device.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_resolveVerifiedUserSendFailureScreen-iPad-en-GB.Own-Unsigned-Device.png new file mode 100644 index 000000000..7426febed --- /dev/null +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_resolveVerifiedUserSendFailureScreen-iPad-en-GB.Own-Unsigned-Device.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4753c2858ee5ecec25a29b399e7ea80182f687c6a2f841a92a414e8e920b5924 +size 125882 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_resolveVerifiedUserSendFailureScreen-iPad-pseudo.Own-Unsigned-Device.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_resolveVerifiedUserSendFailureScreen-iPad-pseudo.Own-Unsigned-Device.png new file mode 100644 index 000000000..824c7dd49 --- /dev/null +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_resolveVerifiedUserSendFailureScreen-iPad-pseudo.Own-Unsigned-Device.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2d8fb744f1ae503247c5da24b629808edef82b99478834a31f4116d7d5db992 +size 160093 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_resolveVerifiedUserSendFailureScreen-iPhone-15-en-GB.Own-Unsigned-Device.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_resolveVerifiedUserSendFailureScreen-iPhone-15-en-GB.Own-Unsigned-Device.png new file mode 100644 index 000000000..f508950f3 --- /dev/null +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_resolveVerifiedUserSendFailureScreen-iPhone-15-en-GB.Own-Unsigned-Device.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5145981b3a4ec6e66341f81fd7dac4c6229f361c22f2ceb9a2f3b442cecaec76 +size 90320 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_resolveVerifiedUserSendFailureScreen-iPhone-15-pseudo.Own-Unsigned-Device.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_resolveVerifiedUserSendFailureScreen-iPhone-15-pseudo.Own-Unsigned-Device.png new file mode 100644 index 000000000..0104d2f50 --- /dev/null +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_resolveVerifiedUserSendFailureScreen-iPhone-15-pseudo.Own-Unsigned-Device.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88602e805a91c4857f0f8101d1dd0856d92b8d3ba1335d2057e1e3cec727ec6b +size 137841 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_timelineItemMenu-iPad-en-GB.Own-Unsigned-Devices.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_timelineItemMenu-iPad-en-GB.Own-Unsigned-Devices.png new file mode 100644 index 000000000..c9523bd7e --- /dev/null +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_timelineItemMenu-iPad-en-GB.Own-Unsigned-Devices.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ddc2888bc4e11319006b54091b3a1b48fb2da6973ffb350210a2b17e5aa86b9e +size 138532 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_timelineItemMenu-iPad-pseudo.Own-Unsigned-Devices.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_timelineItemMenu-iPad-pseudo.Own-Unsigned-Devices.png new file mode 100644 index 000000000..81b13e783 --- /dev/null +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_timelineItemMenu-iPad-pseudo.Own-Unsigned-Devices.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3160ad5abc34d80f146b47abb9b6f7e4b194824b0043a0e1c70ee443f41ca1e +size 144600 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_timelineItemMenu-iPhone-15-en-GB.Own-Unsigned-Devices.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_timelineItemMenu-iPhone-15-en-GB.Own-Unsigned-Devices.png new file mode 100644 index 000000000..e28ae86f1 --- /dev/null +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_timelineItemMenu-iPhone-15-en-GB.Own-Unsigned-Devices.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:172fe16471b58c45a4f34cc2c2064cc6f7d2667447773d760254b49a354f0f48 +size 91682 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/test_timelineItemMenu-iPhone-15-pseudo.Own-Unsigned-Devices.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_timelineItemMenu-iPhone-15-pseudo.Own-Unsigned-Devices.png new file mode 100644 index 000000000..7eb537c56 --- /dev/null +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/test_timelineItemMenu-iPhone-15-pseudo.Own-Unsigned-Devices.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8a4f3dbb2a4cd191f31f48a95ecf20a082a7f1e7d28755979ec3ca8ef536972 +size 108127