damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

commit f6e34ad999454868b40382bd821013f3ac562b4a
parent c948c7e23015e0987b419add24b1d712cde9069a
Author: William Casarin <jb55@jb55.com>
Date:   Wed, 16 Oct 2024 08:46:38 -0700

Merge 'Fix sensitive chat bubble on iOS 18'

Diffstat:
Mdamus.xcodeproj/project.pbxproj | 6+++---
Mdamus.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved | 7+++----
Mdamus/Views/Chat/ChatEventView.swift | 28+++++++++-------------------
3 files changed, 15 insertions(+), 26 deletions(-)

diff --git a/damus.xcodeproj/project.pbxproj b/damus.xcodeproj/project.pbxproj @@ -5570,10 +5570,10 @@ }; D78DB8572C1CE9CA00F0AB12 /* XCRemoteSwiftPackageReference "SwipeActions" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/aheze/SwipeActions"; + repositoryURL = "https://github.com/damus-io/SwipeActions.git"; requirement = { - kind = exactVersion; - version = 1.1.0; + kind = revision; + revision = 33d99756c3112e1a07c1732e3cddc5ad5bd0c5f4; }; }; D7A343EC2AD0D77C00CED48B /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */ = { diff --git a/damus.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/damus.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "babaf4d5748afecf49bbb702530d8e9576460692f478b0a50ee43195dd4440e2", + "originHash" : "1b14e62192b3fa4b04a57cb4601d175b325dc16cb5f22c4c8eb975a675328637", "pins" : [ { "identity" : "emojikit", @@ -92,10 +92,9 @@ { "identity" : "swipeactions", "kind" : "remoteSourceControl", - "location" : "https://github.com/aheze/SwipeActions", + "location" : "https://github.com/damus-io/SwipeActions.git", "state" : { - "revision" : "41e6f6dce02d8cfa164f8c5461a41340850ca3ab", - "version" : "1.1.0" + "revision" : "33d99756c3112e1a07c1732e3cddc5ad5bd0c5f4" } } ], diff --git a/damus/Views/Chat/ChatEventView.swift b/damus/Views/Chat/ChatEventView.swift @@ -27,8 +27,6 @@ struct ChatEventView: View { // MARK: long-press reaction control objects /// Whether the user is actively pressing the view @State var is_pressing = false - /// The dispatched work item scheduled by a timer to bounce the event bubble and show the emoji selector - @State var long_press_bounce_work_item: DispatchWorkItem? @State var popover_state: PopoverState = .closed { didSet { let generator = UIImpactFeedbackGenerator(style: popover_state.some_sheet_open() ? .heavy : .light) @@ -39,6 +37,7 @@ struct ChatEventView: View { @State private var isOnTopHalfOfScreen: Bool = false @ObservedObject var bar: ActionBarModel + @Environment(\.swipeViewGroupSelection) var swipeViewGroupSelection enum PopoverState: String { case closed @@ -206,28 +205,18 @@ struct ChatEventView: View { .scaleEffect(self.popover_state.some_sheet_open() ? 1.08 : is_pressing ? 1.02 : 1) .shadow(color: (is_pressing || self.popover_state.some_sheet_open()) ? .black.opacity(0.1) : .black.opacity(0.3), radius: (is_pressing || self.popover_state.some_sheet_open()) ? 8 : 0, y: (is_pressing || self.popover_state.some_sheet_open()) ? 15 : 0) .onLongPressGesture(minimumDuration: 0.5, maximumDistance: 10, perform: { - long_press_bounce_work_item?.cancel() + withAnimation(.bouncy(duration: 0.2, extraBounce: 0.35)) { + let should_show_zap_sheet = !damus_state.settings.nozaps && damus_state.settings.onlyzaps_mode + popover_state = should_show_zap_sheet ? .open_zap_sheet : .open_emoji_selector + } }, onPressingChanged: { is_pressing in withAnimation(is_pressing ? .easeIn(duration: 0.5) : .easeOut(duration: 0.1)) { self.is_pressing = is_pressing - if popover_state != .closed { - return - } - if self.is_pressing { - let item = DispatchWorkItem { - // Ensure the action is performed only if the condition is still valid - if self.is_pressing { - withAnimation(.bouncy(duration: 0.2, extraBounce: 0.35)) { - let should_show_zap_sheet = !damus_state.settings.nozaps && damus_state.settings.onlyzaps_mode - popover_state = should_show_zap_sheet ? .open_zap_sheet : .open_emoji_selector - } - } - } - long_press_bounce_work_item = item - DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: item) - } } }) + .onChange(of: swipeViewGroupSelection.wrappedValue) { newValue in + self.is_pressing = false + } .background( GeometryReader { geometry in EmptyView() @@ -310,6 +299,7 @@ struct ChatEventView: View { .swipeSpacing(-20) .swipeActionsStyle(.mask) .swipeMinimumDistance(20) + .swipeDragGesturePriority(.normal) } }