Don't display app badge when app is inactive

This commit is contained in:
Ilya Laktyushin 2022-05-21 03:49:11 +04:00
parent ad86dcb7c4
commit 31300c3c16
2 changed files with 39 additions and 8 deletions

View File

@ -358,18 +358,37 @@ open class NavigationController: UINavigationController, ContainableController,
}
}
private var forceBadgeHidden = false
public func setForceBadgeHidden(_ hidden: Bool) {
guard hidden != self.forceBadgeHidden else {
return
}
self.forceBadgeHidden = hidden
if let layout = self.validLayout {
self.updateBadgeVisibility(layout: layout)
}
}
private func updateBadgeVisibility(layout: ContainerViewLayout) {
guard let badgeNode = self.badgeNode else {
return
}
let badgeIsHidden = !layout.deviceMetrics.hasTopNotch || self.forceBadgeHidden || layout.size.width > layout.size.height
if badgeIsHidden != badgeNode.isHidden && !badgeIsHidden {
Queue.mainQueue().after(0.3) {
badgeNode.isHidden = badgeIsHidden
}
} else {
badgeNode.isHidden = badgeIsHidden
}
}
private func updateContainers(layout rawLayout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
self.isUpdatingContainers = true
if let badgeNode = self.badgeNode, let image = badgeNode.image {
let badgeIsHidden = !rawLayout.deviceMetrics.hasTopNotch || rawLayout.size.width > rawLayout.size.height
if badgeIsHidden != badgeNode.isHidden && !badgeIsHidden {
Queue.mainQueue().after(0.3) {
badgeNode.isHidden = badgeIsHidden
}
} else {
badgeNode.isHidden = badgeIsHidden
}
self.updateBadgeVisibility(layout: rawLayout)
badgeNode.frame = CGRect(origin: CGPoint(x: floorToScreenPixels((rawLayout.size.width - image.size.width) / 2.0), y: 6.0), size: image.size)
}

View File

@ -30,6 +30,8 @@ public final class TelegramRootController: NavigationController {
private var permissionsDisposable: Disposable?
private var presentationDataDisposable: Disposable?
private var presentationData: PresentationData
private var applicationInFocusDisposable: Disposable?
public init(context: AccountContext) {
self.context = context
@ -71,6 +73,15 @@ public final class TelegramRootController: NavigationController {
}
}
})
self.applicationInFocusDisposable = (context.sharedContext.applicationBindings.applicationIsActive
|> distinctUntilChanged
|> deliverOn(Queue.mainQueue())).start(next: { [weak self] value in
guard let strongSelf = self else {
return
}
strongSelf.setForceBadgeHidden(!value)
})
}
required public init(coder aDecoder: NSCoder) {
@ -80,6 +91,7 @@ public final class TelegramRootController: NavigationController {
deinit {
self.permissionsDisposable?.dispose()
self.presentationDataDisposable?.dispose()
self.applicationInFocusDisposable?.dispose()
}
public func addRootControllers(showCallsTab: Bool) {