diff --git a/ElementX/Sources/Screens/HomeScreen/HomeScreenCoordinator.swift b/ElementX/Sources/Screens/HomeScreen/HomeScreenCoordinator.swift index b5c4304eb..910393f8e 100644 --- a/ElementX/Sources/Screens/HomeScreen/HomeScreenCoordinator.swift +++ b/ElementX/Sources/Screens/HomeScreen/HomeScreenCoordinator.swift @@ -57,8 +57,6 @@ final class HomeScreenCoordinator: CoordinatorProtocol { self.callback?(.presentFeedbackScreen) case .presentSettingsScreen: self.callback?(.presentSettingsScreen) - case .presentInviteFriendsScreen: - self.presentInviteFriends() case .presentSessionVerificationScreen: self.callback?(.presentSessionVerificationScreen) case .signOut: @@ -82,10 +80,4 @@ final class HomeScreenCoordinator: CoordinatorProtocol { func toPresentable() -> AnyView { AnyView(HomeScreen(context: viewModel.context)) } - - // MARK: - Private - - private func presentInviteFriends() { - parameters.navigationStackCoordinator.setSheetCoordinator(InviteFriendsCoordinator(userId: parameters.userSession.userID)) - } } diff --git a/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift b/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift index 7eb9fd74f..392553b5d 100644 --- a/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift +++ b/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift @@ -22,7 +22,6 @@ enum HomeScreenViewModelAction { case presentRoom(roomIdentifier: String) case presentSessionVerificationScreen case presentSettingsScreen - case presentInviteFriendsScreen case presentFeedbackScreen case presentStartChatScreen case signOut @@ -30,7 +29,6 @@ enum HomeScreenViewModelAction { enum HomeScreenViewUserMenuAction { case settings - case inviteFriends case feedback case signOut } @@ -59,7 +57,7 @@ enum HomeScreenRoomListMode: CustomStringConvertible { } struct HomeScreenViewState: BindableState { - var userID: String + let userID: String var userDisplayName: String? var userAvatarURL: URL? @@ -69,6 +67,9 @@ struct HomeScreenViewState: BindableState { var roomListMode: HomeScreenRoomListMode = .skeletons + /// The URL that will be shared when inviting friends to use the app. + let invitePermalink: URL? + var startChatFlowEnabled: Bool { ServiceLocator.shared.settings.startChatFlowEnabled } diff --git a/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift b/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift index 059864b70..7b21bfe4d 100644 --- a/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift +++ b/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift @@ -38,7 +38,8 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol visibleRoomsSummaryProvider = userSession.clientProxy.visibleRoomsSummaryProvider allRoomsSummaryProvider = userSession.clientProxy.allRoomsSummaryProvider - super.init(initialViewState: HomeScreenViewState(userID: userSession.userID), + let invitePermalink = try? PermalinkBuilder.permalinkTo(userIdentifier: userSession.userID) + super.init(initialViewState: HomeScreenViewState(userID: userSession.userID, invitePermalink: invitePermalink), imageProvider: userSession.mediaProvider) userSession.callbacks @@ -143,8 +144,6 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol callback?(.presentFeedbackScreen) case .settings: callback?(.presentSettingsScreen) - case .inviteFriends: - callback?(.presentInviteFriendsScreen) case .signOut: callback?(.signOut) } diff --git a/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift b/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift index 16517c919..544ceef83 100644 --- a/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift +++ b/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift @@ -122,11 +122,13 @@ struct HomeScreen: View { } } Section { - Button(action: inviteFriends) { - Label(L10n.actionInvite, systemImage: "square.and.arrow.up") + if let permalink = context.viewState.invitePermalink { + ShareLink(item: permalink) { + Label(L10n.actionInvite, systemImage: "square.and.arrow.up") + } } Button(action: feedback) { - Label(L10n.actionReportBug, systemImage: "questionmark.circle") + Label(L10n.commonReportABug, systemImage: "questionmark.circle") } } Section { @@ -201,10 +203,6 @@ struct HomeScreen: View { context.send(viewAction: .userMenu(action: .settings)) } - private func inviteFriends() { - context.send(viewAction: .userMenu(action: .inviteFriends)) - } - private func startChat() { context.send(viewAction: .startChat) } diff --git a/ElementX/Sources/Screens/Other/InviteFriendsCoordinator.swift b/ElementX/Sources/Screens/Other/InviteFriendsCoordinator.swift deleted file mode 100644 index 3280a1333..000000000 --- a/ElementX/Sources/Screens/Other/InviteFriendsCoordinator.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// Copyright 2022 New Vector Ltd -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import SwiftUI - -class InviteFriendsCoordinator: CoordinatorProtocol { - let userId: String - - init(userId: String) { - self.userId = userId - } - - func toPresentable() -> AnyView { - guard let permalink = try? PermalinkBuilder.permalinkTo(userIdentifier: userId).absoluteString else { - return AnyView(EmptyView()) - } - let shareText = L10n.inviteFriendsText(InfoPlistReader.main.bundleDisplayName, permalink) - - return AnyView(UIActivityViewControllerWrapper(activityItems: [shareText]) - .presentationDetents([.medium]) - .ignoresSafeArea()) - } -} diff --git a/ElementX/Sources/Services/Notification/Proxy/NotificationItemProxy.swift b/ElementX/Sources/Services/Notification/Proxy/NotificationItemProxy.swift index cdf95cecb..13ebb93f6 100644 --- a/ElementX/Sources/Services/Notification/Proxy/NotificationItemProxy.swift +++ b/ElementX/Sources/Services/Notification/Proxy/NotificationItemProxy.swift @@ -56,7 +56,7 @@ struct NotificationItemProxy { } var subtitle: String? { - L10n.notification + nil } var isNoisy: Bool { diff --git a/NSE/Sources/Other/NotificationItemProxy+NSE.swift b/NSE/Sources/Other/NotificationItemProxy+NSE.swift index 55b6b025f..fb617b875 100644 --- a/NSE/Sources/Other/NotificationItemProxy+NSE.swift +++ b/NSE/Sources/Other/NotificationItemProxy+NSE.swift @@ -73,8 +73,9 @@ extension NotificationItemProxy { // return nil // } // For now we can't solve the sender ID nor get the type of message that we are displaying - // so we are just going to process all of them as common - try await processCommon(senderId: "undefined", roomId: roomId, mediaProvider: mediaProvider) + // so we are just going to process all of them as a text notification saying "Notification" + let content = TextMessageContent(body: L10n.notification, formatted: nil) + return try await processText(content: content, senderId: "undefined", roomId: roomId, mediaProvider: mediaProvider) } // MARK: - Private