diff --git a/submodules/Camera/Sources/Camera.swift b/submodules/Camera/Sources/Camera.swift index 7656396f04..186e52c351 100644 --- a/submodules/Camera/Sources/Camera.swift +++ b/submodules/Camera/Sources/Camera.swift @@ -376,8 +376,30 @@ private final class CameraContext { } } - self.queue.after(0.5) { - self.modeChange = .none + if #available(iOS 13.0, *), let previewView = self.simplePreviewView { + if enabled, let secondaryPreviewView = self.secondaryPreviewView { + let _ = (combineLatest(previewView.isPreviewing, secondaryPreviewView.isPreviewing) + |> map { first, second in + return first && second + } + |> filter { $0 } + |> take(1) + |> delay(0.1, queue: self.queue) + |> deliverOn(self.queue)).start(next: { [weak self] _ in + self?.modeChange = .none + }) + } else { + let _ = (previewView.isPreviewing + |> filter { $0 } + |> take(1) + |> deliverOn(self.queue)).start(next: { [weak self] _ in + self?.modeChange = .none + }) + } + } else { + self.queue.after(0.4) { + self.modeChange = .none + } } } diff --git a/submodules/Camera/Sources/CameraPreviewView.swift b/submodules/Camera/Sources/CameraPreviewView.swift index 7f62f949f4..9ed0d7d37e 100644 --- a/submodules/Camera/Sources/CameraPreviewView.swift +++ b/submodules/Camera/Sources/CameraPreviewView.swift @@ -59,7 +59,22 @@ public class CameraSimplePreviewView: UIView { self.placeholderView.image = additional ? CameraSimplePreviewView.lastAdditionalStateImage() : CameraSimplePreviewView.lastStateImage() self.addSubview(self.placeholderView) - self.resetPlaceholder() + if !additional { + if #available(iOS 13.0, *) { + self.previewingDisposable = (self.isPreviewing + |> filter { $0 } + |> take(1) + |> deliverOnMainQueue).start(next: { [weak self] _ in + self?.removePlaceholder(delay: 0.15) + }) + } else { + Queue.mainQueue().after(0.35) { + self.removePlaceholder(delay: 0.15) + } + } + } else { + self.placeholderView.alpha = 1.0 + } } required init?(coder: NSCoder) { @@ -76,28 +91,18 @@ public class CameraSimplePreviewView: UIView { self.placeholderView.frame = self.bounds.insetBy(dx: -1.0, dy: -1.0) } + public func removePlaceholder(delay: Double = 0.0) { + UIView.animate(withDuration: 0.3, delay: delay) { + self.placeholderView.alpha = 0.0 + } + } + public func resetPlaceholder() { guard self.placeholderView.alpha == 0.0 else { return } self.placeholderView.image = self.additional ? CameraSimplePreviewView.lastAdditionalStateImage() : CameraSimplePreviewView.lastStateImage() self.placeholderView.alpha = 1.0 - if #available(iOS 13.0, *) { - self.previewingDisposable = (self.isPreviewing - |> filter { $0 } - |> take(1) - |> deliverOnMainQueue).start(next: { [weak self] _ in - UIView.animate(withDuration: 0.3, delay: 0.15) { - self?.placeholderView.alpha = 0.0 - } - }) - } else { - Queue.mainQueue().after(0.5) { - UIView.animate(withDuration: 0.3) { - self.placeholderView.alpha = 0.0 - } - } - } } private var _videoPreviewLayer: AVCaptureVideoPreviewLayer? diff --git a/submodules/TelegramUI/Components/CameraScreen/Sources/CameraScreen.swift b/submodules/TelegramUI/Components/CameraScreen/Sources/CameraScreen.swift index 9c3f4aa289..ba56526762 100644 --- a/submodules/TelegramUI/Components/CameraScreen/Sources/CameraScreen.swift +++ b/submodules/TelegramUI/Components/CameraScreen/Sources/CameraScreen.swift @@ -877,6 +877,7 @@ public class CameraScreen: ViewController { private var changingPositionDisposable: Disposable? private var isDualCamEnabled = false + private var appliedDualCam = false private var cameraPosition: Camera.Position = .back private let completion = ActionSlot>() @@ -1069,6 +1070,10 @@ public class CameraScreen: ViewController { previewSnapshotView.removeFromSuperview() }) } + + if self.isDualCamEnabled { + self.additionalPreviewView?.removePlaceholder() + } } } }) @@ -1115,6 +1120,8 @@ public class CameraScreen: ViewController { if let self { let previousPosition = self.cameraPosition self.cameraPosition = state.position + + let dualCamWasEnabled = self.isDualCamEnabled self.isDualCamEnabled = state.isDualCamEnabled if self.isDualCamEnabled && previousPosition != state.position, let additionalPreviewView = self.additionalPreviewView { @@ -1128,6 +1135,9 @@ public class CameraScreen: ViewController { self.requestUpdateLayout(hasAppeared: false, transition: .immediate) CATransaction.commit() } else { + if !dualCamWasEnabled && self.isDualCamEnabled { + + } self.requestUpdateLayout(hasAppeared: false, transition: .spring(duration: 0.4)) } } @@ -1599,8 +1609,10 @@ public class CameraScreen: ViewController { transition.setFrame(view: self.currentPreviewView, frame: CGRect(origin: .zero, size: previewFrame.size)) transition.setFrame(view: self.previewBlurView, frame: CGRect(origin: .zero, size: previewFrame.size)) - if let additionalPreviewView = self.currentAdditionalPreviewView as? CameraSimplePreviewView { + let dualCamUpdated = self.appliedDualCam != self.isDualCamEnabled + self.appliedDualCam = self.isDualCamEnabled + additionalPreviewView.layer.cornerRadius = 80.0 var origin: CGPoint @@ -1632,15 +1644,17 @@ public class CameraScreen: ViewController { } let additionalPreviewFrame = CGRect(origin: origin, size: CGSize(width: 160.0, height: 160.0)) - transition.setPosition(view: additionalPreviewView, position: additionalPreviewFrame.center, completion: { _ in - if !self.isDualCamEnabled { - additionalPreviewView.resetPlaceholder() - } - }) + transition.setPosition(view: additionalPreviewView, position: additionalPreviewFrame.center) transition.setBounds(view: additionalPreviewView, bounds: CGRect(origin: .zero, size: additionalPreviewFrame.size)) transition.setScale(view: additionalPreviewView, scale: self.isDualCamEnabled ? 1.0 : 0.1) transition.setAlpha(view: additionalPreviewView, alpha: self.isDualCamEnabled ? 1.0 : 0.0) + + if dualCamUpdated && !self.isDualCamEnabled { + Queue.mainQueue().after(0.5) { + additionalPreviewView.resetPlaceholder() + } + } } self.previewFrameLeftDimView.isHidden = !isTablet diff --git a/submodules/TelegramUI/Components/Stories/StoryContentComponent/Sources/StoryChatContent.swift b/submodules/TelegramUI/Components/Stories/StoryContentComponent/Sources/StoryChatContent.swift index 6eb6b8c203..4937daad21 100644 --- a/submodules/TelegramUI/Components/Stories/StoryContentComponent/Sources/StoryChatContent.swift +++ b/submodules/TelegramUI/Components/Stories/StoryContentComponent/Sources/StoryChatContent.swift @@ -100,7 +100,7 @@ public final class StoryContentContextImpl: StoryContentContext { let additionalPeerData: StoryContentContextState.AdditionalPeerData if let cachedPeerDataView = views.views[PostboxViewKey.cachedPeerData(peerId: peerId)] as? CachedPeerDataView, let cachedUserData = cachedPeerDataView.cachedPeerData as? CachedUserData { let _ = cachedUserData - additionalPeerData = StoryContentContextState.AdditionalPeerData(areVoiceMessagesAvailable: false) //cachedUserData.voiceMessagesAvailable) + additionalPeerData = StoryContentContextState.AdditionalPeerData(areVoiceMessagesAvailable: cachedUserData.voiceMessagesAvailable) } else { additionalPeerData = StoryContentContextState.AdditionalPeerData(areVoiceMessagesAvailable: true) }