mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Add low battery level warning
This commit is contained in:
parent
8b1794141d
commit
2bbd833577
@ -953,7 +953,7 @@ final class CallControllerNode: ViewControllerTracingNode, CallControllerNodePro
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
self.displayToastsAfterTimestamp = CACurrentMediaTime() + 2.0
|
self.displayToastsAfterTimestamp = CACurrentMediaTime() + 1.5
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if self.isMuted, let (availableOutputs, _) = self.audioOutputState, availableOutputs.count > 2 {
|
if self.isMuted, let (availableOutputs, _) = self.audioOutputState, availableOutputs.count > 2 {
|
||||||
@ -1457,6 +1457,8 @@ final class CallControllerNode: ViewControllerTracingNode, CallControllerNodePro
|
|||||||
@objc func tapGesture(_ recognizer: UITapGestureRecognizer) {
|
@objc func tapGesture(_ recognizer: UITapGestureRecognizer) {
|
||||||
if case .ended = recognizer.state {
|
if case .ended = recognizer.state {
|
||||||
if !self.pictureInPictureTransitionFraction.isZero {
|
if !self.pictureInPictureTransitionFraction.isZero {
|
||||||
|
self.view.window?.endEditing(true)
|
||||||
|
|
||||||
if let (layout, navigationHeight) = self.validLayout {
|
if let (layout, navigationHeight) = self.validLayout {
|
||||||
self.pictureInPictureTransitionFraction = 0.0
|
self.pictureInPictureTransitionFraction = 0.0
|
||||||
|
|
||||||
|
@ -188,6 +188,8 @@ public final class PresentationCallImpl: PresentationCall {
|
|||||||
private var receptionDisposable: Disposable?
|
private var receptionDisposable: Disposable?
|
||||||
private var reportedIncomingCall = false
|
private var reportedIncomingCall = false
|
||||||
|
|
||||||
|
private var batteryLevelDisposable: Disposable?
|
||||||
|
|
||||||
private var callWasActive = false
|
private var callWasActive = false
|
||||||
private var shouldPresentCallRating = false
|
private var shouldPresentCallRating = false
|
||||||
|
|
||||||
@ -415,6 +417,7 @@ public final class PresentationCallImpl: PresentationCall {
|
|||||||
self.sessionStateDisposable?.dispose()
|
self.sessionStateDisposable?.dispose()
|
||||||
self.ongoingContextStateDisposable?.dispose()
|
self.ongoingContextStateDisposable?.dispose()
|
||||||
self.receptionDisposable?.dispose()
|
self.receptionDisposable?.dispose()
|
||||||
|
self.batteryLevelDisposable?.dispose()
|
||||||
self.audioSessionDisposable?.dispose()
|
self.audioSessionDisposable?.dispose()
|
||||||
|
|
||||||
if let dropCallKitCallTimer = self.dropCallKitCallTimer {
|
if let dropCallKitCallTimer = self.dropCallKitCallTimer {
|
||||||
@ -631,6 +634,35 @@ public final class PresentationCallImpl: PresentationCall {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
func batteryLevelIsLowSignal() -> Signal<Bool, NoError> {
|
||||||
|
return Signal { subscriber in
|
||||||
|
let device = UIDevice.current
|
||||||
|
device.isBatteryMonitoringEnabled = true
|
||||||
|
|
||||||
|
var previousBatteryLevelIsLow = false
|
||||||
|
let timer = SwiftSignalKit.Timer(timeout: 30.0, repeat: true, completion: {
|
||||||
|
let batteryLevelIsLow = device.batteryLevel < 0.1 && device.batteryState != .charging
|
||||||
|
if batteryLevelIsLow != previousBatteryLevelIsLow {
|
||||||
|
previousBatteryLevelIsLow = batteryLevelIsLow
|
||||||
|
subscriber.putNext(batteryLevelIsLow)
|
||||||
|
}
|
||||||
|
}, queue: Queue.mainQueue())
|
||||||
|
timer.start()
|
||||||
|
|
||||||
|
return ActionDisposable {
|
||||||
|
device.isBatteryMonitoringEnabled = false
|
||||||
|
timer.invalidate()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self.batteryLevelDisposable = (batteryLevelIsLowSignal()
|
||||||
|
|> deliverOnMainQueue).start(next: { [weak self] batteryLevelIsLow in
|
||||||
|
if let strongSelf = self, let ongoingContext = strongSelf.ongoingContext {
|
||||||
|
ongoingContext.setIsLowBatteryLevel(batteryLevelIsLow)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
if sessionState.isOutgoing {
|
if sessionState.isOutgoing {
|
||||||
self.callKitIntegration?.reportOutgoingCallConnected(uuid: sessionState.id, at: Date())
|
self.callKitIntegration?.reportOutgoingCallConnected(uuid: sessionState.id, at: Date())
|
||||||
}
|
}
|
||||||
|
@ -634,9 +634,9 @@ public final class SharedAccountContextImpl: SharedAccountContext {
|
|||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
let resolvedText: CallStatusText
|
let resolvedText: CallStatusText
|
||||||
if let state = state {
|
if let state = state {
|
||||||
if [.active, .paused].contains(state.videoState) || [.active, .paused].contains(state.remoteVideoState) {
|
// if [.active, .paused].contains(state.videoState) || [.active, .paused].contains(state.remoteVideoState) {
|
||||||
resolvedText = .none
|
// resolvedText = .none
|
||||||
} else {
|
// } else {
|
||||||
switch state.state {
|
switch state.state {
|
||||||
case .connecting, .requesting, .terminating, .ringing, .waiting:
|
case .connecting, .requesting, .terminating, .ringing, .waiting:
|
||||||
resolvedText = .inProgress(nil)
|
resolvedText = .inProgress(nil)
|
||||||
@ -645,7 +645,7 @@ public final class SharedAccountContextImpl: SharedAccountContext {
|
|||||||
case .active(let timestamp, _, _), .reconnecting(let timestamp, _, _):
|
case .active(let timestamp, _, _), .reconnecting(let timestamp, _, _):
|
||||||
resolvedText = .inProgress(timestamp)
|
resolvedText = .inProgress(timestamp)
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
} else {
|
} else {
|
||||||
resolvedText = .none
|
resolvedText = .none
|
||||||
}
|
}
|
||||||
|
@ -262,6 +262,7 @@ private func ongoingDataSavingForTypeWebrtc(_ type: VoiceCallDataSaving) -> Ongo
|
|||||||
private protocol OngoingCallThreadLocalContextProtocol: class {
|
private protocol OngoingCallThreadLocalContextProtocol: class {
|
||||||
func nativeSetNetworkType(_ type: NetworkType)
|
func nativeSetNetworkType(_ type: NetworkType)
|
||||||
func nativeSetIsMuted(_ value: Bool)
|
func nativeSetIsMuted(_ value: Bool)
|
||||||
|
func nativeSetIsLowBatteryLevel(_ value: Bool)
|
||||||
func nativeRequestVideo(_ capturer: OngoingCallVideoCapturer)
|
func nativeRequestVideo(_ capturer: OngoingCallVideoCapturer)
|
||||||
func nativeDisableVideo()
|
func nativeDisableVideo()
|
||||||
func nativeStop(_ completion: @escaping (String?, Int64, Int64, Int64, Int64) -> Void)
|
func nativeStop(_ completion: @escaping (String?, Int64, Int64, Int64, Int64) -> Void)
|
||||||
@ -295,6 +296,9 @@ extension OngoingCallThreadLocalContext: OngoingCallThreadLocalContextProtocol {
|
|||||||
self.setIsMuted(value)
|
self.setIsMuted(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func nativeSetIsLowBatteryLevel(_ value: Bool) {
|
||||||
|
}
|
||||||
|
|
||||||
func nativeRequestVideo(_ capturer: OngoingCallVideoCapturer) {
|
func nativeRequestVideo(_ capturer: OngoingCallVideoCapturer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -373,6 +377,10 @@ extension OngoingCallThreadLocalContextWebrtc: OngoingCallThreadLocalContextProt
|
|||||||
self.setIsMuted(value)
|
self.setIsMuted(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func nativeSetIsLowBatteryLevel(_ value: Bool) {
|
||||||
|
self.setIsLowBatteryLevel(value)
|
||||||
|
}
|
||||||
|
|
||||||
func nativeRequestVideo(_ capturer: OngoingCallVideoCapturer) {
|
func nativeRequestVideo(_ capturer: OngoingCallVideoCapturer) {
|
||||||
self.requestVideo(capturer.impl)
|
self.requestVideo(capturer.impl)
|
||||||
}
|
}
|
||||||
@ -707,7 +715,7 @@ public final class OngoingCallContext {
|
|||||||
self.audioSessionDisposable.dispose()
|
self.audioSessionDisposable.dispose()
|
||||||
self.networkTypeDisposable?.dispose()
|
self.networkTypeDisposable?.dispose()
|
||||||
}
|
}
|
||||||
|
|
||||||
private func withContext(_ f: @escaping (OngoingCallThreadLocalContextProtocol) -> Void) {
|
private func withContext(_ f: @escaping (OngoingCallThreadLocalContextProtocol) -> Void) {
|
||||||
self.queue.async {
|
self.queue.async {
|
||||||
if let contextRef = self.contextRef {
|
if let contextRef = self.contextRef {
|
||||||
@ -766,6 +774,12 @@ public final class OngoingCallContext {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func setIsLowBatteryLevel(_ value: Bool) {
|
||||||
|
self.withContext { context in
|
||||||
|
context.nativeSetIsLowBatteryLevel(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public func requestVideo(_ capturer: OngoingCallVideoCapturer) {
|
public func requestVideo(_ capturer: OngoingCallVideoCapturer) {
|
||||||
self.withContext { context in
|
self.withContext { context in
|
||||||
context.nativeRequestVideo(capturer)
|
context.nativeRequestVideo(capturer)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user