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)
}