mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
improve screen capture detection
This commit is contained in:
parent
4047d83584
commit
1f5eaceb80
@ -75,3 +75,50 @@ public func screenCaptureEvents() -> Signal<ScreenCaptureEvent, NoError> {
|
||||
}
|
||||
|> runOn(Queue.mainQueue())
|
||||
}
|
||||
|
||||
public final class ScreenCaptureDetectionManager {
|
||||
private var observer: NSObjectProtocol?
|
||||
private var screenRecordingDisposable: Disposable?
|
||||
private var screenRecordingCheckTimer: SwiftSignalKit.Timer?
|
||||
|
||||
public init(check: @escaping () -> Bool) {
|
||||
self.observer = NotificationCenter.default.addObserver(forName: UIApplication.userDidTakeScreenshotNotification, object: nil, queue: .main, using: { [weak self] _ in
|
||||
guard let strongSelf = self else {
|
||||
return
|
||||
}
|
||||
check()
|
||||
})
|
||||
|
||||
self.screenRecordingDisposable = screenRecordingActive().start(next: { [weak self] value in
|
||||
Queue.mainQueue().async {
|
||||
guard let strongSelf = self else {
|
||||
return
|
||||
}
|
||||
if value {
|
||||
if strongSelf.screenRecordingCheckTimer == nil {
|
||||
strongSelf.screenRecordingCheckTimer = SwiftSignalKit.Timer(timeout: 0.5, repeat: true, completion: {
|
||||
guard let strongSelf = self else {
|
||||
return
|
||||
}
|
||||
if check() {
|
||||
strongSelf.screenRecordingCheckTimer?.invalidate()
|
||||
strongSelf.screenRecordingCheckTimer = nil
|
||||
}
|
||||
}, queue: Queue.mainQueue())
|
||||
strongSelf.screenRecordingCheckTimer?.start()
|
||||
}
|
||||
} else if strongSelf.screenRecordingCheckTimer != nil {
|
||||
strongSelf.screenRecordingCheckTimer?.invalidate()
|
||||
strongSelf.screenRecordingCheckTimer = nil
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
deinit {
|
||||
NotificationCenter.default.removeObserver(self.observer)
|
||||
self.screenRecordingDisposable?.dispose()
|
||||
self.screenRecordingCheckTimer?.invalidate()
|
||||
self.screenRecordingCheckTimer = nil
|
||||
}
|
||||
}
|
||||
|
@ -289,7 +289,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
private weak var sendMessageActionsController: ChatSendMessageActionSheetController?
|
||||
private var searchResultsController: ChatSearchResultsController?
|
||||
|
||||
private var screenCaptureEventsDisposable: Disposable?
|
||||
private var screenCaptureManager: ScreenCaptureDetectionManager?
|
||||
private let chatAdditionalDataDisposable = MetaDisposable()
|
||||
|
||||
private var reportIrrelvantGeoNoticePromise = Promise<Bool?>()
|
||||
@ -2496,7 +2496,6 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
self.applicationInForegroundDisposable?.dispose()
|
||||
self.canReadHistoryDisposable?.dispose()
|
||||
self.networkStateDisposable?.dispose()
|
||||
self.screenCaptureEventsDisposable?.dispose()
|
||||
self.chatAdditionalDataDisposable.dispose()
|
||||
self.shareStatusDisposable?.dispose()
|
||||
self.context.sharedContext.mediaManager.galleryHiddenMediaManager.removeTarget(self)
|
||||
@ -4639,10 +4638,13 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
if !self.checkedPeerChatServiceActions {
|
||||
self.checkedPeerChatServiceActions = true
|
||||
|
||||
if case let .peer(peerId) = self.chatLocation, peerId.namespace == Namespaces.Peer.SecretChat {
|
||||
self.screenCaptureEventsDisposable = screenCaptureEvents().start(next: { [weak self] _ in
|
||||
if case let .peer(peerId) = self.chatLocation, peerId.namespace == Namespaces.Peer.SecretChat, self.screenCaptureManager == nil {
|
||||
self.screenCaptureManager = ScreenCaptureDetectionManager(check: { [weak self] in
|
||||
if let strongSelf = self, strongSelf.canReadHistoryValue, strongSelf.traceVisibility() {
|
||||
let _ = addSecretChatMessageScreenshot(account: strongSelf.context.account, peerId: peerId).start()
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
})
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user