mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
Add landscape layout for passcode screen to be used in share extension
This commit is contained in:
@@ -167,10 +167,6 @@ final class PasscodeEntryControllerNode: ASDisplayNode {
|
||||
}
|
||||
|
||||
var size = validLayout.size
|
||||
if case .compact = validLayout.metrics.widthClass, size.width > size.height {
|
||||
size = CGSize(width: size.height, height: size.width)
|
||||
}
|
||||
|
||||
if let background = self.background, background.size == size {
|
||||
return
|
||||
}
|
||||
@@ -333,36 +329,11 @@ final class PasscodeEntryControllerNode: ASDisplayNode {
|
||||
self.validLayout = layout
|
||||
|
||||
self.updateBackground()
|
||||
|
||||
if layout.size.width == 320.0 {
|
||||
self.iconNode.alpha = 0.0
|
||||
}
|
||||
|
||||
|
||||
let bounds = CGRect(origin: CGPoint(), size: layout.size)
|
||||
transition.updateFrame(node: self.backgroundNode, frame: bounds)
|
||||
transition.updateFrame(view: self.effectView, frame: bounds)
|
||||
|
||||
let iconSize = CGSize(width: 35.0, height: 37.0)
|
||||
transition.updateFrame(node: self.iconNode, frame: CGRect(origin: CGPoint(x: floor((layout.size.width - iconSize.width) / 2.0) + 6.0, y: layout.insets(options: .statusBar).top + 15.0), size: iconSize))
|
||||
|
||||
let passcodeLayout = PasscodeLayout(layout: layout)
|
||||
|
||||
let inputFieldFrame = self.inputFieldNode.updateLayout(layout: passcodeLayout.layout, topOffset: passcodeLayout.inputFieldOffset, transition: transition)
|
||||
transition.updateFrame(node: self.inputFieldNode, frame: CGRect(origin: CGPoint(), size: layout.size))
|
||||
|
||||
let titleSize = self.titleNode.updateLayout(layout: layout, transition: transition)
|
||||
transition.updateFrame(node: self.titleNode, frame: CGRect(origin: CGPoint(x: 0.0, y: passcodeLayout.titleOffset), size: titleSize))
|
||||
|
||||
var subtitleOffset = passcodeLayout.subtitleOffset
|
||||
if case .alphanumeric = self.passcodeType {
|
||||
subtitleOffset = 16.0
|
||||
}
|
||||
let subtitleSize = self.subtitleNode.updateLayout(layout: layout, transition: transition)
|
||||
transition.updateFrame(node: self.subtitleNode, frame: CGRect(origin: CGPoint(x: 0.0, y: inputFieldFrame.maxY + subtitleOffset), size: subtitleSize))
|
||||
|
||||
let (keyboardFrame, keyboardButtonSize) = self.keyboardNode.updateLayout(layout: passcodeLayout, transition: transition)
|
||||
transition.updateFrame(node: self.keyboardNode, frame: CGRect(origin: CGPoint(), size: layout.size))
|
||||
|
||||
switch self.passcodeType {
|
||||
case .digits6, .digits4:
|
||||
self.keyboardNode.alpha = 1.0
|
||||
@@ -372,22 +343,91 @@ final class PasscodeEntryControllerNode: ASDisplayNode {
|
||||
self.deleteButtonNode.alpha = 0.0
|
||||
}
|
||||
|
||||
let isLandscape = layout.orientation == .landscape && layout.deviceMetrics.type != .tablet
|
||||
let keyboardHidden = self.keyboardNode.alpha == 0.0
|
||||
|
||||
let layoutSize: CGSize
|
||||
if isLandscape {
|
||||
if keyboardHidden {
|
||||
layoutSize = CGSize(width: layout.size.width - layout.safeInsets.left - layout.safeInsets.right, height: layout.size.height)
|
||||
} else {
|
||||
layoutSize = CGSize(width: layout.size.width / 2.0, height: layout.size.height)
|
||||
}
|
||||
} else {
|
||||
layoutSize = layout.size
|
||||
}
|
||||
|
||||
if layout.size.width == 320.0 || (isLandscape && keyboardHidden) {
|
||||
self.iconNode.alpha = 0.0
|
||||
}
|
||||
|
||||
let passcodeLayout = PasscodeLayout(layout: layout)
|
||||
let inputFieldOffset: CGFloat
|
||||
if isLandscape {
|
||||
let bottomInset = layout.inputHeight ?? 0.0
|
||||
if !keyboardHidden || bottomInset == 0.0 {
|
||||
inputFieldOffset = floor(layoutSize.height / 2.0 + 12.0)
|
||||
} else {
|
||||
inputFieldOffset = floor(layoutSize.height - bottomInset) / 2.0 - 40.0
|
||||
}
|
||||
} else {
|
||||
inputFieldOffset = passcodeLayout.inputFieldOffset
|
||||
}
|
||||
|
||||
let inputFieldFrame = self.inputFieldNode.updateLayout(size: layoutSize, topOffset: inputFieldOffset, transition: transition)
|
||||
transition.updateFrame(node: self.inputFieldNode, frame: CGRect(origin: CGPoint(x: layout.safeInsets.left, y: 0.0), size: layoutSize))
|
||||
|
||||
let titleFrame: CGRect
|
||||
if isLandscape {
|
||||
let titleSize = self.titleNode.updateLayout(size: CGSize(width: layoutSize.width, height: layout.size.height), transition: transition)
|
||||
titleFrame = CGRect(origin: CGPoint(x: layout.safeInsets.left, y: inputFieldFrame.minY - titleSize.height - 16.0), size: titleSize)
|
||||
} else {
|
||||
let titleSize = self.titleNode.updateLayout(size: layout.size, transition: transition)
|
||||
titleFrame = CGRect(origin: CGPoint(x: 0.0, y: passcodeLayout.titleOffset), size: titleSize)
|
||||
}
|
||||
transition.updateFrame(node: self.titleNode, frame: titleFrame)
|
||||
|
||||
let iconSize = CGSize(width: 35.0, height: 37.0)
|
||||
let iconFrame: CGRect
|
||||
if isLandscape {
|
||||
iconFrame = CGRect(origin: CGPoint(x: layout.safeInsets.left + floor((layoutSize.width - iconSize.width) / 2.0) + 6.0, y: titleFrame.minY - iconSize.height - 14.0), size: iconSize)
|
||||
} else {
|
||||
iconFrame = CGRect(origin: CGPoint(x: floor((layoutSize.width - iconSize.width) / 2.0) + 6.0, y: layout.insets(options: .statusBar).top + 15.0), size: iconSize)
|
||||
}
|
||||
transition.updateFrame(node: self.iconNode, frame: iconFrame)
|
||||
|
||||
var subtitleOffset = passcodeLayout.subtitleOffset
|
||||
if case .alphanumeric = self.passcodeType {
|
||||
subtitleOffset = 16.0
|
||||
}
|
||||
let subtitleSize = self.subtitleNode.updateLayout(size: layoutSize, transition: transition)
|
||||
transition.updateFrame(node: self.subtitleNode, frame: CGRect(origin: CGPoint(x: layout.safeInsets.left, y: inputFieldFrame.maxY + subtitleOffset), size: subtitleSize))
|
||||
|
||||
let (keyboardFrame, keyboardButtonSize) = self.keyboardNode.updateLayout(layout: passcodeLayout, transition: transition)
|
||||
transition.updateFrame(node: self.keyboardNode, frame: CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: layout.size))
|
||||
|
||||
let bottomInset = layout.inputHeight ?? 0.0
|
||||
|
||||
let cancelSize = self.cancelButtonNode.measure(layout.size)
|
||||
var cancelY: CGFloat = layout.size.height - layout.intrinsicInsets.bottom - cancelSize.height - passcodeLayout.keyboard.deleteOffset
|
||||
if bottomInset > 0 && self.keyboardNode.alpha < 1.0 {
|
||||
cancelY = layout.size.height - bottomInset - cancelSize.height - 20.0
|
||||
var bottomButtonY = layout.size.height - layout.intrinsicInsets.bottom - cancelSize.height - passcodeLayout.keyboard.deleteOffset
|
||||
var cancelX = floor(keyboardFrame.minX + keyboardButtonSize.width / 2.0 - cancelSize.width / 2.0)
|
||||
var cancelY = bottomButtonY
|
||||
if bottomInset > 0 && keyboardHidden {
|
||||
cancelX = floor((layout.size.width - cancelSize.width) / 2.0)
|
||||
cancelY = layout.size.height - bottomInset - cancelSize.height - 15.0 - layout.intrinsicInsets.bottom
|
||||
} else if isLandscape {
|
||||
bottomButtonY = keyboardFrame.maxY - keyboardButtonSize.height + floor((keyboardButtonSize.height - cancelSize.height) / 2.0)
|
||||
cancelY = bottomButtonY
|
||||
}
|
||||
|
||||
transition.updateFrame(node: self.cancelButtonNode, frame: CGRect(origin: CGPoint(x: floor(keyboardFrame.minX + keyboardButtonSize.width / 2.0 - cancelSize.width / 2.0), y: cancelY), size: cancelSize))
|
||||
transition.updateFrame(node: self.cancelButtonNode, frame: CGRect(origin: CGPoint(x: cancelX, y: cancelY), size: cancelSize))
|
||||
|
||||
let deleteSize = self.deleteButtonNode.measure(layout.size)
|
||||
transition.updateFrame(node: self.deleteButtonNode, frame: CGRect(origin: CGPoint(x: floor(keyboardFrame.maxX - keyboardButtonSize.width / 2.0 - deleteSize.width / 2.0), y: layout.size.height - layout.intrinsicInsets.bottom - deleteSize.height - passcodeLayout.keyboard.deleteOffset), size: deleteSize))
|
||||
transition.updateFrame(node: self.deleteButtonNode, frame: CGRect(origin: CGPoint(x: floor(keyboardFrame.maxX - keyboardButtonSize.width / 2.0 - deleteSize.width / 2.0), y: bottomButtonY), size: deleteSize))
|
||||
|
||||
if let biometricIcon = self.biometricButtonNode.image(for: .normal) {
|
||||
var biometricY: CGFloat = 0.0
|
||||
if bottomInset > 0 && self.keyboardNode.alpha < 1.0 {
|
||||
if bottomInset > 0 && keyboardHidden {
|
||||
biometricY = inputFieldFrame.maxY + floor((layout.size.height - bottomInset - inputFieldFrame.maxY - biometricIcon.size.height) / 2.0)
|
||||
} else {
|
||||
biometricY = keyboardFrame.maxY + passcodeLayout.keyboard.biometricsOffset
|
||||
|
||||
Reference in New Issue
Block a user