mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 01:20:12 +00:00
MediaTimelinePreviewDetails can now be opened by long pressing in the media timeline (#4474)
* presenting media actions from the media timeline * implemented view in timeline and fixed an issue that made dark mode being when trying to delete the file * pr suggestions
This commit is contained in:
@@ -29,6 +29,7 @@ enum TimelineViewModelAction {
|
||||
case hasScrolled(direction: ScrollDirection)
|
||||
case viewInRoomTimeline(eventID: String)
|
||||
case displayRoom(roomID: String, via: [String])
|
||||
case displayMediaDetails(item: EventBasedMessageTimelineItemProtocol)
|
||||
}
|
||||
|
||||
enum TimelineViewPollAction {
|
||||
|
||||
@@ -476,7 +476,12 @@ class TimelineViewModel: TimelineViewModelType, TimelineViewModelProtocol {
|
||||
case .displayMediaUploadPreviewScreen(let mediaURLs):
|
||||
actionsSubject.send(.displayMediaUploadPreviewScreen(mediaURLs: mediaURLs))
|
||||
case .showActionMenu(let actionMenuInfo):
|
||||
self.state.bindings.actionMenuInfo = actionMenuInfo
|
||||
if case .media(.mediaFilesScreen) = timelineController.timelineKind,
|
||||
let item = actionMenuInfo.item as? EventBasedMessageTimelineItemProtocol {
|
||||
actionsSubject.send(.displayMediaDetails(item: item))
|
||||
} else {
|
||||
self.state.bindings.actionMenuInfo = actionMenuInfo
|
||||
}
|
||||
case .showDebugInfo(let debugInfo):
|
||||
state.bindings.debugInfo = debugInfo
|
||||
case .viewInRoomTimeline(let eventID):
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
//
|
||||
// Copyright 2025 New Vector Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
// Please see LICENSE files in the repository root for full details.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
extension View {
|
||||
func accessibleLongPress(named name: String, action: @escaping () -> Void) -> some View {
|
||||
modifier(AccessibleLongPress(name: name, action: action))
|
||||
}
|
||||
}
|
||||
|
||||
struct AccessibleLongPress: ViewModifier {
|
||||
@Environment(\.accessibilityVoiceOverEnabled) private var isVoiceOverEnabled
|
||||
let name: String
|
||||
let action: () -> Void
|
||||
|
||||
func body(content: Content) -> some View {
|
||||
if isVoiceOverEnabled {
|
||||
content
|
||||
.accessibilityAction(named: name) {
|
||||
action()
|
||||
}
|
||||
} else {
|
||||
content
|
||||
.longPressWithFeedback {
|
||||
action()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user