mirror of
https://github.com/TelegramMessenger/Telegram-iOS.git
synced 2026-07-06 03:33:41 +02:00
Fix
This commit is contained in:
parent
ad30eb2bc5
commit
71b2ff998f
4 changed files with 77 additions and 6 deletions
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue