mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Add initial iPhone 14 support
This commit is contained in:
parent
5c6922ea8f
commit
5433c685a1
@ -20,6 +20,8 @@ public enum DeviceMetrics: CaseIterable, Equatable {
|
||||
case iPhone13
|
||||
case iPhone13Pro
|
||||
case iPhone13ProMax
|
||||
case iPhone14Pro
|
||||
case iPhone14ProMax
|
||||
case iPad
|
||||
case iPadMini
|
||||
case iPad102Inch
|
||||
@ -46,6 +48,8 @@ public enum DeviceMetrics: CaseIterable, Equatable {
|
||||
.iPhone13,
|
||||
.iPhone13Pro,
|
||||
.iPhone13ProMax,
|
||||
.iPhone14Pro,
|
||||
.iPhone14ProMax,
|
||||
.iPad,
|
||||
.iPadMini,
|
||||
.iPad102Inch,
|
||||
@ -129,6 +133,10 @@ public enum DeviceMetrics: CaseIterable, Equatable {
|
||||
return CGSize(width: 390.0, height: 844.0)
|
||||
case .iPhone13ProMax:
|
||||
return CGSize(width: 428.0, height: 926.0)
|
||||
case .iPhone14Pro:
|
||||
return CGSize(width: 393.0, height: 852.0)
|
||||
case .iPhone14ProMax:
|
||||
return CGSize(width: 430.0, height: 932.0)
|
||||
case .iPad:
|
||||
return CGSize(width: 768.0, height: 1024.0)
|
||||
case .iPadMini:
|
||||
@ -156,9 +164,9 @@ public enum DeviceMetrics: CaseIterable, Equatable {
|
||||
return 41.0 + UIScreenPixel
|
||||
case .iPhone12Mini:
|
||||
return 44.0
|
||||
case .iPhone12, .iPhone13, .iPhone13Pro:
|
||||
case .iPhone12, .iPhone13, .iPhone13Pro, .iPhone14Pro:
|
||||
return 47.0 + UIScreenPixel
|
||||
case .iPhone12ProMax, .iPhone13ProMax:
|
||||
case .iPhone12ProMax, .iPhone13ProMax, .iPhone14ProMax:
|
||||
return 53.0 + UIScreenPixel
|
||||
case let .unknown(_, _, onScreenNavigationHeight):
|
||||
if let _ = onScreenNavigationHeight {
|
||||
@ -173,7 +181,7 @@ public enum DeviceMetrics: CaseIterable, Equatable {
|
||||
|
||||
func safeInsets(inLandscape: Bool) -> UIEdgeInsets {
|
||||
switch self {
|
||||
case .iPhoneX, .iPhoneXSMax, .iPhoneXr, .iPhone12Mini, .iPhone12, .iPhone12ProMax, .iPhone13Mini, .iPhone13, .iPhone13Pro, .iPhone13ProMax:
|
||||
case .iPhoneX, .iPhoneXSMax, .iPhoneXr, .iPhone12Mini, .iPhone12, .iPhone12ProMax, .iPhone13Mini, .iPhone13, .iPhone13Pro, .iPhone13ProMax, .iPhone14Pro, .iPhone14ProMax:
|
||||
return inLandscape ? UIEdgeInsets(top: 0.0, left: 44.0, bottom: 0.0, right: 44.0) : UIEdgeInsets(top: 44.0, left: 0.0, bottom: 0.0, right: 0.0)
|
||||
default:
|
||||
return UIEdgeInsets.zero
|
||||
@ -182,7 +190,7 @@ public enum DeviceMetrics: CaseIterable, Equatable {
|
||||
|
||||
public func onScreenNavigationHeight(inLandscape: Bool, systemOnScreenNavigationHeight: CGFloat?) -> CGFloat? {
|
||||
switch self {
|
||||
case .iPhoneX, .iPhoneXSMax, .iPhoneXr, .iPhone12Mini, .iPhone12, .iPhone12ProMax, .iPhone13Mini, .iPhone13, .iPhone13Pro, .iPhone13ProMax:
|
||||
case .iPhoneX, .iPhoneXSMax, .iPhoneXr, .iPhone12Mini, .iPhone12, .iPhone12ProMax, .iPhone13Mini, .iPhone13, .iPhone13Pro, .iPhone13ProMax, .iPhone14Pro, .iPhone14ProMax:
|
||||
return inLandscape ? 21.0 : 34.0
|
||||
case .iPadPro3rdGen, .iPadPro11Inch:
|
||||
return 21.0
|
||||
@ -214,7 +222,7 @@ public enum DeviceMetrics: CaseIterable, Equatable {
|
||||
|
||||
var statusBarHeight: CGFloat {
|
||||
switch self {
|
||||
case .iPhoneX, .iPhoneXSMax, .iPhoneXr, .iPhone12Mini, .iPhone12, .iPhone12ProMax, .iPhone13Mini, .iPhone13, .iPhone13Pro, .iPhone13ProMax:
|
||||
case .iPhoneX, .iPhoneXSMax, .iPhoneXr, .iPhone12Mini, .iPhone12, .iPhone12ProMax, .iPhone13Mini, .iPhone13, .iPhone13Pro, .iPhone13ProMax, .iPhone14Pro, .iPhone14ProMax:
|
||||
return 44.0
|
||||
case .iPadPro11Inch, .iPadPro3rdGen, .iPadMini, .iPadMini6thGen:
|
||||
return 24.0
|
||||
@ -232,7 +240,7 @@ public enum DeviceMetrics: CaseIterable, Equatable {
|
||||
return 162.0
|
||||
case .iPhone6, .iPhone6Plus:
|
||||
return 163.0
|
||||
case .iPhoneX, .iPhoneXSMax, .iPhoneXr, .iPhone12Mini, .iPhone12, .iPhone12ProMax, .iPhone13Mini, .iPhone13, .iPhone13Pro, .iPhone13ProMax:
|
||||
case .iPhoneX, .iPhoneXSMax, .iPhoneXr, .iPhone12Mini, .iPhone12, .iPhone12ProMax, .iPhone13Mini, .iPhone13, .iPhone13Pro, .iPhone13ProMax, .iPhone14Pro, .iPhone14ProMax:
|
||||
return 172.0
|
||||
case .iPad, .iPad102Inch, .iPadPro10Inch:
|
||||
return 348.0
|
||||
@ -251,9 +259,9 @@ public enum DeviceMetrics: CaseIterable, Equatable {
|
||||
return 216.0
|
||||
case .iPhone6Plus:
|
||||
return 226.0
|
||||
case .iPhoneX, .iPhone12Mini, .iPhone12, .iPhone13Mini, .iPhone13, .iPhone13Pro:
|
||||
case .iPhoneX, .iPhone12Mini, .iPhone12, .iPhone13Mini, .iPhone13, .iPhone13Pro, .iPhone14Pro:
|
||||
return 292.0
|
||||
case .iPhoneXSMax, .iPhoneXr, .iPhone12ProMax, .iPhone13ProMax:
|
||||
case .iPhoneXSMax, .iPhoneXr, .iPhone12ProMax, .iPhone13ProMax, .iPhone14ProMax:
|
||||
return 302.0
|
||||
case .iPad, .iPad102Inch, .iPadPro10Inch:
|
||||
return 263.0
|
||||
@ -272,7 +280,7 @@ public enum DeviceMetrics: CaseIterable, Equatable {
|
||||
func predictiveInputHeight(inLandscape: Bool) -> CGFloat {
|
||||
if inLandscape {
|
||||
switch self {
|
||||
case .iPhone4, .iPhone5, .iPhone6, .iPhone6Plus, .iPhoneX, .iPhoneXSMax, .iPhoneXr, .iPhone12Mini, .iPhone12, .iPhone12ProMax, .iPhone13Mini, .iPhone13, .iPhone13Pro, .iPhone13ProMax:
|
||||
case .iPhone4, .iPhone5, .iPhone6, .iPhone6Plus, .iPhoneX, .iPhoneXSMax, .iPhoneXr, .iPhone12Mini, .iPhone12, .iPhone12ProMax, .iPhone13Mini, .iPhone13, .iPhone13Pro, .iPhone13ProMax, .iPhone14Pro, .iPhone14ProMax:
|
||||
return 37.0
|
||||
case .iPad, .iPad102Inch, .iPadPro10Inch, .iPadPro11Inch, .iPadPro, .iPadPro3rdGen, .iPadMini, .iPadMini6thGen:
|
||||
return 50.0
|
||||
@ -283,7 +291,7 @@ public enum DeviceMetrics: CaseIterable, Equatable {
|
||||
switch self {
|
||||
case .iPhone4, .iPhone5:
|
||||
return 37.0
|
||||
case .iPhone6, .iPhoneX, .iPhoneXSMax, .iPhoneXr, .iPhone12Mini, .iPhone12, .iPhone12ProMax, .iPhone13Mini, .iPhone13, .iPhone13Pro, .iPhone13ProMax:
|
||||
case .iPhone6, .iPhoneX, .iPhoneXSMax, .iPhoneXr, .iPhone12Mini, .iPhone12, .iPhone12ProMax, .iPhone13Mini, .iPhone13, .iPhone13Pro, .iPhone13ProMax, .iPhone14Pro, .iPhone14ProMax:
|
||||
return 44.0
|
||||
case .iPhone6Plus:
|
||||
return 45.0
|
||||
@ -303,4 +311,22 @@ public enum DeviceMetrics: CaseIterable, Equatable {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
public var hasDynamicIsland: Bool {
|
||||
switch self {
|
||||
case .iPhone14Pro, .iPhone14ProMax:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
public var maybeHasDynamicIsland: Bool {
|
||||
switch self {
|
||||
case .iPhone12, .iPhone12ProMax, .iPhone14Pro, .iPhone14ProMax:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -419,7 +419,7 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
minHeight = 40.0
|
||||
}
|
||||
var inCallStatusBarFrame = CGRect(origin: CGPoint(), size: CGSize(width: layout.size.width, height: max(layout.statusBarHeight ?? 0.0, max(minHeight, layout.safeInsets.top))))
|
||||
if layout.deviceMetrics.hasTopNotch && !isLandscape {
|
||||
if (layout.deviceMetrics.hasTopNotch || layout.deviceMetrics.hasDynamicIsland) && !isLandscape {
|
||||
inCallStatusBarFrame.size.height += 12.0
|
||||
}
|
||||
if inCallStatusBar.frame.isEmpty {
|
||||
|
@ -679,10 +679,10 @@ public class Window1 {
|
||||
}
|
||||
|
||||
private func updateBadgeVisibility() {
|
||||
let badgeIsHidden = !self.deviceMetrics.hasTopNotch || self.forceBadgeHidden || self.windowLayout.size.width > self.windowLayout.size.height
|
||||
let badgeIsHidden = !self.deviceMetrics.hasTopNotch || self.deviceMetrics.hasDynamicIsland || self.deviceMetrics.maybeHasDynamicIsland || self.forceBadgeHidden || self.windowLayout.size.width > self.windowLayout.size.height
|
||||
if badgeIsHidden != self.badgeView.isHidden && !badgeIsHidden {
|
||||
Queue.mainQueue().after(0.4) {
|
||||
let badgeShouldBeHidden = !self.deviceMetrics.hasTopNotch || self.forceBadgeHidden || self.windowLayout.size.width > self.windowLayout.size.height
|
||||
let badgeShouldBeHidden = !self.deviceMetrics.hasTopNotch || self.deviceMetrics.hasDynamicIsland || self.deviceMetrics.maybeHasDynamicIsland || self.forceBadgeHidden || self.windowLayout.size.width > self.windowLayout.size.height
|
||||
if badgeShouldBeHidden == badgeIsHidden {
|
||||
self.badgeView.isHidden = badgeIsHidden
|
||||
}
|
||||
|
@ -593,6 +593,14 @@ NSString *suffix = @"";
|
||||
return @"iPhone 13";
|
||||
if ([platform isEqualToString:@"iPhone14,6"])
|
||||
return @"iPhone SE (3rd gen)";
|
||||
if ([platform isEqualToString:@"iPhone14,7"])
|
||||
return @"iPhone 14";
|
||||
if ([platform isEqualToString:@"iPhone14,8"])
|
||||
return @"iPhone 14 Plus";
|
||||
if ([platform isEqualToString:@"iPhone15,2"])
|
||||
return @"iPhone 14 Pro";
|
||||
if ([platform isEqualToString:@"iPhone15,3"])
|
||||
return @"iPhone 14 Pro Max";
|
||||
|
||||
if ([platform hasPrefix:@"iPod1"])
|
||||
return @"iPod touch 1G";
|
||||
|
@ -67,7 +67,7 @@ struct PasscodeKeyboardLayout {
|
||||
self.topOffset = 226.0
|
||||
self.biometricsOffset = 30.0
|
||||
self.deleteOffset = 20.0
|
||||
case .iPhoneX, .iPhone12Mini, .iPhone12, .iPhone13Mini, .iPhone13, .iPhone13Pro:
|
||||
case .iPhoneX, .iPhone12Mini, .iPhone12, .iPhone13Mini, .iPhone13, .iPhone13Pro, .iPhone14Pro:
|
||||
self.buttonSize = 75.0
|
||||
self.horizontalSecond = 103.0
|
||||
self.horizontalThird = 206.0
|
||||
@ -78,7 +78,7 @@ struct PasscodeKeyboardLayout {
|
||||
self.topOffset = 294.0
|
||||
self.biometricsOffset = 30.0
|
||||
self.deleteOffset = 20.0
|
||||
case .iPhoneXSMax, .iPhoneXr, .iPhone12ProMax, .iPhone13ProMax:
|
||||
case .iPhoneXSMax, .iPhoneXr, .iPhone12ProMax, .iPhone13ProMax, .iPhone14ProMax:
|
||||
self.buttonSize = 85.0
|
||||
self.horizontalSecond = 115.0
|
||||
self.horizontalThird = 230.0
|
||||
@ -151,11 +151,11 @@ public struct PasscodeLayout {
|
||||
self.titleOffset = 112.0
|
||||
self.subtitleOffset = -6.0
|
||||
self.inputFieldOffset = 156.0
|
||||
case .iPhoneX, .iPhone12Mini, .iPhone12, .iPhone13Mini, .iPhone13, .iPhone13Pro:
|
||||
case .iPhoneX, .iPhone12Mini, .iPhone12, .iPhone13Mini, .iPhone13, .iPhone13Pro, .iPhone14Pro:
|
||||
self.titleOffset = 162.0
|
||||
self.subtitleOffset = 0.0
|
||||
self.inputFieldOffset = 206.0
|
||||
case .iPhoneXSMax, .iPhoneXr, .iPhone12ProMax, .iPhone13ProMax:
|
||||
case .iPhoneXSMax, .iPhoneXr, .iPhone12ProMax, .iPhone13ProMax, .iPhone14ProMax:
|
||||
self.titleOffset = 180.0
|
||||
self.subtitleOffset = 0.0
|
||||
self.inputFieldOffset = 226.0
|
||||
|
@ -18,7 +18,6 @@ private func renderIcon(name: String) -> UIImage? {
|
||||
if let image = UIImage(bundleImageName: name)?.cgImage {
|
||||
context.draw(image, in: bounds)
|
||||
}
|
||||
drawBorder(context: context, rect: bounds)
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -7988,7 +7988,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
}
|
||||
|
||||
let icon: UIImage?
|
||||
if layout.deviceMetrics.hasTopNotch {
|
||||
if layout.deviceMetrics.hasTopNotch || layout.deviceMetrics.hasDynamicIsland {
|
||||
icon = UIImage(bundleImageName: "Chat/Message/VolumeButtonIconX")
|
||||
} else {
|
||||
icon = UIImage(bundleImageName: "Chat/Message/VolumeButtonIcon")
|
||||
|
Loading…
x
Reference in New Issue
Block a user