Various Fixes

This commit is contained in:
Ilya Laktyushin
2021-10-29 17:28:37 +04:00
parent 2b2d14f53f
commit b989b55a9a
30 changed files with 805 additions and 67 deletions

View File

@@ -43,6 +43,7 @@ private final class BotCheckoutNativeCardEntryScrollerNode: ASDisplayNode {
final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode, UIScrollViewDelegate {
private let context: AccountContext
private weak var navigationBar: NavigationBar?
private let provider: BotCheckoutNativeCardEntryController.Provider
private let present: (ViewController, Any?) -> Void
@@ -58,6 +59,8 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
private let scrollNode: BotCheckoutNativeCardEntryScrollerNode
private let itemNodes: [[BotPaymentItemNode]]
private let leftOverlayNode: ASDisplayNode
private let rightOverlayNode: ASDisplayNode
private let cardItem: BotPaymentCardInputItemNode
private let cardholderItem: BotPaymentFieldItemNode?
@@ -74,8 +77,9 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
private var dataTask: URLSessionDataTask?
init(context: AccountContext, provider: BotCheckoutNativeCardEntryController.Provider, theme: PresentationTheme, strings: PresentationStrings, present: @escaping (ViewController, Any?) -> Void, dismiss: @escaping () -> Void, openCountrySelection: @escaping () -> Void, updateStatus: @escaping (BotCheckoutNativeCardEntryStatus) -> Void, completion: @escaping (BotCheckoutPaymentMethod) -> Void) {
init(context: AccountContext, navigationBar: NavigationBar?, provider: BotCheckoutNativeCardEntryController.Provider, theme: PresentationTheme, strings: PresentationStrings, present: @escaping (ViewController, Any?) -> Void, dismiss: @escaping () -> Void, openCountrySelection: @escaping () -> Void, updateStatus: @escaping (BotCheckoutNativeCardEntryStatus) -> Void, completion: @escaping (BotCheckoutPaymentMethod) -> Void) {
self.context = context
self.navigationBar = navigationBar
self.provider = provider
self.present = present
@@ -88,6 +92,10 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
self.strings = strings
self.scrollNode = BotCheckoutNativeCardEntryScrollerNode()
self.leftOverlayNode = ASDisplayNode()
self.leftOverlayNode.isUserInteractionEnabled = false
self.rightOverlayNode = ASDisplayNode()
self.rightOverlayNode.isUserInteractionEnabled = false
var itemNodes: [[BotPaymentItemNode]] = []
@@ -95,7 +103,7 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
var openCountrySelectionImpl: (() -> Void)?
self.cardItem = BotPaymentCardInputItemNode()
cardItem.updated = { data in
self.cardItem.updated = { data in
cardUpdatedImpl?(data)
}
itemNodes.append([BotPaymentHeaderItemNode(text: strings.Checkout_NewCard_PaymentCard), self.cardItem])
@@ -164,6 +172,9 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
super.init()
self.backgroundColor = self.theme.list.blocksBackgroundColor
self.leftOverlayNode.backgroundColor = self.theme.list.blocksBackgroundColor
self.rightOverlayNode.backgroundColor = self.theme.list.blocksBackgroundColor
self.scrollNode.backgroundColor = nil
self.scrollNode.isOpaque = false
if #available(iOSApplicationExtension 11.0, iOS 11.0, *) {
@@ -216,7 +227,7 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
}
}
cardItem.completed = { [weak self] in
self.cardItem.completed = { [weak self] in
self?.cardholderItem?.activateInput()
}
@@ -228,6 +239,12 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
self.dataTask?.cancel()
}
override func didLoad() {
super.didLoad()
self.navigationBar?.updateBackgroundAlpha(0.0, transition: .immediate)
}
func updateCountry(_ iso2: String) {
if let name = AuthorizationSequenceCountrySelectionController.lookupCountryNameById(iso2, strings: self.strings) {
self.currentCountryIso2 = iso2
@@ -447,6 +464,12 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
}
}
let inset = max(16.0, floor((layout.size.width - 674.0) / 2.0))
var sideInset: CGFloat = 0.0
if layout.size.width >= 375.0 {
sideInset = inset
}
for items in self.itemNodes {
if !items.isEmpty && items[0] is BotPaymentHeaderItemNode {
contentHeight += 24.0
@@ -456,7 +479,7 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
for i in 0 ..< items.count {
let item = items[i]
let itemHeight = item.updateLayout(theme: self.theme, width: layout.size.width, measuredInset: commonInset, previousItemNode: i == 0 ? nil : items[i - 1], nextItemNode: i == (items.count - 1) ? nil : items[i + 1], transition: transition)
let itemHeight = item.updateLayout(theme: self.theme, width: layout.size.width, sideInset: sideInset, measuredInset: commonInset, previousItemNode: i == 0 ? nil : items[i - 1], nextItemNode: i == (items.count - 1) ? nil : items[i + 1], transition: transition)
transition.updateFrame(node: item, frame: CGRect(origin: CGPoint(x: 0.0, y: contentHeight), size: CGSize(width: layout.size.width, height: itemHeight)))
contentHeight += itemHeight
}
@@ -482,6 +505,16 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
}
self.scrollNode.view.ignoreUpdateBounds = false
if self.rightOverlayNode.supernode == nil {
self.insertSubnode(self.rightOverlayNode, aboveSubnode: self.scrollNode)
}
if self.leftOverlayNode.supernode == nil {
self.insertSubnode(self.leftOverlayNode, aboveSubnode: self.scrollNode)
}
self.leftOverlayNode.frame = CGRect(x: 0.0, y: 0.0, width: sideInset, height: layout.size.height)
self.rightOverlayNode.frame = CGRect(x: layout.size.width - sideInset, y: 0.0, width: sideInset, height: layout.size.height)
if let previousLayout = previousLayout {
var previousInsets = previousLayout.0.insets(options: [.input])
previousInsets.top += max(previousLayout.1, previousLayout.0.insets(options: [.statusBar]).top)
@@ -514,4 +547,10 @@ final class BotCheckoutNativeCardEntryControllerNode: ViewControllerTracingNode,
func activate() {
self.cardItem.activateInput()
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let value = scrollView.contentOffset.y + scrollView.contentInset.top
self.navigationBar?.updateBackgroundAlpha(min(30.0, value) / 30.0, transition: .immediate)
}
}