mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
Revert "Open the room live when tapping the notification for its newest message"
This reverts commit 4c71cae0f.
Comparing against other delivered notifications doesn't reflect the timeline:
in rooms set to mentions and keywords, after swiping away newer notifications
or with messages sent from another device, newer messages can exist without a
notification, so the room opened live with the tapped event out of view.
This commit is contained in:
@@ -413,7 +413,7 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
|
||||
return !userSessionFlowCoordinator.isDisplayingRoomScreen(withRoomID: roomID)
|
||||
}
|
||||
|
||||
func notificationTapped(content: UNNotificationContent, isNewestInRoom: Bool) async {
|
||||
func notificationTapped(content: UNNotificationContent) async {
|
||||
MXLog.info("Tapped Notification")
|
||||
|
||||
guard let roomID = content.roomID,
|
||||
@@ -431,12 +431,11 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
|
||||
handleAppRoute(.room(roomID: roomID, via: []), windowType: nil)
|
||||
} else if appSettings.threadsEnabled, let threadRootEventID = content.threadRootEventID {
|
||||
handleAppRoute(.thread(roomID: roomID, threadRootEventID: threadRootEventID, focusEventID: eventID), windowType: nil)
|
||||
} else if let eventID, !isNewestInRoom {
|
||||
} else if let eventID {
|
||||
// Only track main timeline event deeplinking
|
||||
analyticsService.signpost.startTransaction(.notificationToMessage)
|
||||
handleAppRoute(.event(eventID: eventID, roomID: roomID, via: []), windowType: nil)
|
||||
} else {
|
||||
// The live timeline already ends with the newest message, so there's no need to focus on it.
|
||||
handleAppRoute(.room(roomID: roomID, via: []), windowType: nil)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,21 +259,11 @@ extension NotificationManager: UNUserNotificationCenterDelegate {
|
||||
content: response.notification.request.content,
|
||||
replyText: response.userText)
|
||||
case UNNotificationDefaultActionIdentifier:
|
||||
await delegate?.notificationTapped(content: response.notification.request.content,
|
||||
isNewestInRoom: isNewestInRoom(response.notification))
|
||||
await delegate?.notificationTapped(content: response.notification.request.content)
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
/// Whether no other delivered notification for the same room is more recent.
|
||||
private func isNewestInRoom(_ notification: UNNotification) async -> Bool {
|
||||
guard let roomID = notification.request.content.roomID else { return false }
|
||||
|
||||
return await notificationCenter.deliveredNotifications().allSatisfy { deliveredNotification in
|
||||
deliveredNotification.request.content.roomID != roomID || deliveredNotification.date <= notification.date
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension UNUserNotificationCenter: UserNotificationCenterProtocol { }
|
||||
|
||||
@@ -11,8 +11,7 @@ import UserNotifications
|
||||
|
||||
protocol NotificationManagerDelegate: AnyObject {
|
||||
func shouldDisplayInAppNotification(content: UNNotificationContent) -> Bool
|
||||
/// - Parameter isNewestInRoom: Whether no other delivered notification for the same room is more recent.
|
||||
func notificationTapped(content: UNNotificationContent, isNewestInRoom: Bool) async
|
||||
func notificationTapped(content: UNNotificationContent) async
|
||||
func handleInlineReply(_ service: NotificationManagerProtocol,
|
||||
content: UNNotificationContent,
|
||||
replyText: String) async
|
||||
|
||||
Reference in New Issue
Block a user