This commit is contained in:
Isaac 2026-02-24 17:19:30 +01:00
parent ad30eb2bc5
commit 71b2ff998f
4 changed files with 77 additions and 6 deletions

View file

@ -1839,6 +1839,13 @@ public final class ContextControllerActionsStackNodeImpl: ASDisplayNode, Context
selectionPanGesture.isEnabled = false
}
override public func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
guard let result = super.hitTest(point, with: event) else {
return nil
}
return result
}
@objc private func panGesture(_ recognizer: UIPanGestureRecognizer) {
switch recognizer.state {
case .began, .changed:

View file

@ -143,6 +143,24 @@ public final class LensTransitionContainer: UIView {
fatalError("init(coder:) has not been implemented")
}
override public func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
if self.alpha.isZero {
return nil
}
for view in self.contentsView.subviews.reversed() {
if let result = view.hitTest(self.convert(point, to: view), with: event), result.isUserInteractionEnabled {
return result
}
}
let result = self.contentsView.hitTest(point, with: event)
if result != self.contentsView {
return result
} else {
return nil
}
}
private func setIsFilterActive(isFilterActive: Bool) {
if isFilterActive {
if self.contentsView.layer.filters == nil {

View file

@ -279,26 +279,26 @@ public final class MediaEditorVideoExport {
guard let self else {
return
}
if case let .video(_, isStory) = subject, isStory {
/*if case let .video(_, isStory) = subject, isStory {
if #available(iOS 26.0, *) {
if BGTaskScheduler.supportedResources.contains(.gpu) {
return
}
}
}
}*/
self.resume()
})
let _ = NotificationCenter.default.addObserver(forName: UIApplication.didEnterBackgroundNotification, object: nil, queue: nil, using: { [weak self] _ in
guard let self else {
return
}
if case let .video(_, isStory) = subject, isStory {
/*if case let .video(_, isStory) = subject, isStory {
if #available(iOS 26.0, *) {
if BGTaskScheduler.supportedResources.contains(.gpu) {
return
}
}
}
}*/
self.pause()
})
}

View file

@ -65,6 +65,8 @@ public final class SharedWakeupManager {
private let backgroundTimeRemaining: () -> Double
private let acquireIdleExtension: () -> Disposable?
private var enableBackgroundTasks: Bool = false
private var inForeground: Bool = false
private var hasActiveAudioSession: Bool = false
private var activeExplicitExtensionTimer: SwiftSignalKit.Timer?
@ -73,6 +75,7 @@ public final class SharedWakeupManager {
private var allowBackgroundTimeExtensionDeadlineTimer: SwiftSignalKit.Timer?
private var isInBackgroundExtension: Bool = false
private var accountSettingsDisposable: Disposable?
private var inForegroundDisposable: Disposable?
private var hasActiveAudioSessionDisposable: Disposable?
private var tasksDisposable: Disposable?
@ -111,6 +114,29 @@ public final class SharedWakeupManager {
self.backgroundTimeRemaining = backgroundTimeRemaining
self.acquireIdleExtension = acquireIdleExtension
self.accountSettingsDisposable = (activeAccounts
|> mapToSignal { activeAccounts -> Signal<Bool, NoError> in
guard let account = activeAccounts.primary else {
return .single(false)
}
return account.postbox.transaction { transaction -> Bool in
guard let data = currentAppConfiguration(transaction: transaction).data else {
return false
}
if data["ios_killswitch_disable_bgtasks"] != nil {
return false
}
return true
}
}
|> deliverOnMainQueue
|> distinctUntilChanged).startStrict(next: { [weak self] isEnabled in
guard let self else {
return
}
self.enableBackgroundTasks = isEnabled
})
self.inForegroundDisposable = (inForeground
|> deliverOnMainQueue).startStrict(next: { [weak self] value in
guard let strongSelf = self else {
@ -319,6 +345,7 @@ public final class SharedWakeupManager {
}
deinit {
self.accountSettingsDisposable?.dispose()
self.inForegroundDisposable?.dispose()
self.hasActiveAudioSessionDisposable?.dispose()
self.tasksDisposable?.dispose()
@ -333,6 +360,10 @@ public final class SharedWakeupManager {
}
private func updateBackgroundProcessingTaskStateFromPendingMediaUploads() {
if !self.enableBackgroundTasks {
return
}
let shouldHaveTask = !self.pendingMediaUploadsByKey.isEmpty && !self.inForeground
let hadTask = self.backgroundProcessingTaskId != nil
@ -359,6 +390,10 @@ public final class SharedWakeupManager {
}
private func updateBackgroundProcessingTaskStateFromPendingStoryUploads() {
if !self.enableBackgroundTasks {
return
}
let shouldHaveTask = !self.pendingStoryUploadStatusesByKey.isEmpty && !self.inForeground
let hadTask = self.backgroundStoryProcessingTaskId != nil
@ -510,6 +545,11 @@ public final class SharedWakeupManager {
self.backgroundProcessingTaskLaunched = false
self.checkTasks()
self.updateBackgroundProcessingTaskStateFromPendingMediaUploads()
} else if !self.backgroundProcessingTaskCancellationRequestedByApp {
Logger.shared.log("Wakeup", "Non-current BG task expired externally, will delete uploading messages: \(task.identifier)")
self.cancelUploadingMessagesForCurrentTask()
self.checkTasks()
self.updateBackgroundProcessingTaskStateFromPendingMediaUploads()
}
}
}
@ -688,6 +728,11 @@ public final class SharedWakeupManager {
self.backgroundStoryProcessingTaskLaunched = false
self.checkTasks()
self.updateBackgroundProcessingTaskStateFromPendingStoryUploads()
} else if !self.backgroundStoryProcessingTaskCancellationRequestedByApp {
Logger.shared.log("Wakeup", "Non-current story BG task expired externally, will cancel uploading stories: \(task.identifier)")
self.cancelUploadingStoriesForCurrentTask()
self.checkTasks()
self.updateBackgroundProcessingTaskStateFromPendingStoryUploads()
}
}
}
@ -769,6 +814,7 @@ public final class SharedWakeupManager {
task.progress.totalUnitCount = totalUnitCount
task.progress.completedUnitCount = completedUnitCount
//TODO:localize
let title: String
if self.pendingStoryUploadsByKey.count == 1 {
title = "Uploading 1 Story"
@ -811,9 +857,9 @@ public final class SharedWakeupManager {
subtitle: subtitle
)
request.strategy = .fail
if BGTaskScheduler.supportedResources.contains(.gpu) {
/*if BGTaskScheduler.supportedResources.contains(.gpu) {
request.requiredResources = .gpu
}
}*/
do {
try BGTaskScheduler.shared.submit(request)