mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Fix wallet appearance
This commit is contained in:
parent
536df22d0f
commit
e1df955cca
@ -706,33 +706,46 @@ final class AppDelegate: NSObject, UIApplicationDelegate {
|
||||
self.walletContext = walletContext
|
||||
|
||||
let beginWithController: (ViewController) -> Void = { controller in
|
||||
navigationController.setViewControllers([controller], animated: false)
|
||||
|
||||
var previousBlockchainName = initialConfigBlockchainName
|
||||
|
||||
let _ = (updatedConfigValue
|
||||
|> deliverOnMainQueue).start(next: { resolved, blockchainName in
|
||||
let _ = walletContext.tonInstance.validateConfig(config: resolved.value, blockchainName: blockchainName).start(error: { _ in
|
||||
}, completed: {
|
||||
let _ = walletContext.tonInstance.updateConfig(config: resolved.value, blockchainName: blockchainName).start()
|
||||
|
||||
if previousBlockchainName != blockchainName {
|
||||
previousBlockchainName = blockchainName
|
||||
let begin: (Bool) -> Void = { animated in
|
||||
navigationController.setViewControllers([controller], animated: false)
|
||||
if animated {
|
||||
navigationController.viewControllers.last?.view.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.3)
|
||||
}
|
||||
|
||||
var previousBlockchainName = initialConfigBlockchainName
|
||||
|
||||
let _ = (updatedConfigValue
|
||||
|> deliverOnMainQueue).start(next: { resolved, blockchainName in
|
||||
let _ = walletContext.tonInstance.validateConfig(config: resolved.value, blockchainName: blockchainName).start(error: { _ in
|
||||
}, completed: {
|
||||
let _ = walletContext.tonInstance.updateConfig(config: resolved.value, blockchainName: blockchainName).start()
|
||||
|
||||
let overlayController = OverlayStatusController(theme: presentationData.theme, type: .loading(cancelled: nil))
|
||||
mainWindow.present(overlayController, on: .root)
|
||||
|
||||
let _ = (deleteAllLocalWalletsData(storage: walletContext.storage, tonInstance: walletContext.tonInstance)
|
||||
|> deliverOnMainQueue).start(error: { [weak overlayController] _ in
|
||||
overlayController?.dismiss()
|
||||
}, completed: { [weak overlayController] in
|
||||
overlayController?.dismiss()
|
||||
if previousBlockchainName != blockchainName {
|
||||
previousBlockchainName = blockchainName
|
||||
|
||||
navigationController.setViewControllers([WalletSplashScreen(context: walletContext, mode: .intro, walletCreatedPreloadState: nil)], animated: true)
|
||||
})
|
||||
}
|
||||
let overlayController = OverlayStatusController(theme: presentationData.theme, type: .loading(cancelled: nil))
|
||||
mainWindow.present(overlayController, on: .root)
|
||||
|
||||
let _ = (deleteAllLocalWalletsData(storage: walletContext.storage, tonInstance: walletContext.tonInstance)
|
||||
|> deliverOnMainQueue).start(error: { [weak overlayController] _ in
|
||||
overlayController?.dismiss()
|
||||
}, completed: { [weak overlayController] in
|
||||
overlayController?.dismiss()
|
||||
|
||||
navigationController.setViewControllers([WalletSplashScreen(context: walletContext, mode: .intro, walletCreatedPreloadState: nil)], animated: true)
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
if let splashScreen = navigationController.viewControllers.first as? WalletApplicationSplashScreen, let _ = controller as? WalletSplashScreen {
|
||||
splashScreen.animateOut(completion: {
|
||||
begin(true)
|
||||
})
|
||||
} else {
|
||||
begin(false)
|
||||
}
|
||||
}
|
||||
|
||||
let _ = (combineLatest(queue: .mainQueue(),
|
||||
|
@ -1766,7 +1766,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
|
||||
}, node: {
|
||||
assert(Queue.mainQueue().isCurrent())
|
||||
return referenceNode.syncWith({ $0 })!
|
||||
}, params: ListViewItemLayoutParams(width: state.visibleSize.width, leftInset: state.insets.left, rightInset: state.insets.right), previousItem: index == 0 ? nil : self.items[index - 1], nextItem: index == self.items.count - 1 ? nil : self.items[index + 1], animation: updateAnimation, completion: { layout, apply in
|
||||
}, params: ListViewItemLayoutParams(width: state.visibleSize.width, leftInset: state.insets.left, rightInset: state.insets.right, availableHeight: state.visibleSize.height - state.insets.top - state.insets.bottom), previousItem: index == 0 ? nil : self.items[index - 1], nextItem: index == self.items.count - 1 ? nil : self.items[index + 1], animation: updateAnimation, completion: { layout, apply in
|
||||
var updatedState = state
|
||||
var updatedOperations = operations
|
||||
|
||||
@ -1841,7 +1841,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
|
||||
let index = insertionItemIndexAndDirection.0
|
||||
let threadId = pthread_self()
|
||||
var tailRecurse = false
|
||||
self.nodeForItem(synchronous: synchronous, synchronousLoads: synchronousLoads, item: self.items[index], previousNode: previousNodes[index], index: index, previousItem: index == 0 ? nil : self.items[index - 1], nextItem: self.items.count == index + 1 ? nil : self.items[index + 1], params: ListViewItemLayoutParams(width: state.visibleSize.width, leftInset: state.insets.left, rightInset: state.insets.right), updateAnimation: updateAnimation, completion: { (node, layout, apply) in
|
||||
self.nodeForItem(synchronous: synchronous, synchronousLoads: synchronousLoads, item: self.items[index], previousNode: previousNodes[index], index: index, previousItem: index == 0 ? nil : self.items[index - 1], nextItem: self.items.count == index + 1 ? nil : self.items[index + 1], params: ListViewItemLayoutParams(width: state.visibleSize.width, leftInset: state.insets.left, rightInset: state.insets.right, availableHeight: state.visibleSize.height - state.insets.top - state.insets.bottom), updateAnimation: updateAnimation, completion: { (node, layout, apply) in
|
||||
|
||||
if pthread_equal(pthread_self(), threadId) != 0 && !tailRecurse {
|
||||
tailRecurse = true
|
||||
@ -1877,7 +1877,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
|
||||
} else {
|
||||
let updateItem = updateIndicesAndItems[0]
|
||||
if let previousNode = previousNodes[updateItem.index] {
|
||||
self.nodeForItem(synchronous: synchronous, synchronousLoads: synchronousLoads, item: updateItem.item, previousNode: previousNode, index: updateItem.index, previousItem: updateItem.index == 0 ? nil : self.items[updateItem.index - 1], nextItem: updateItem.index == (self.items.count - 1) ? nil : self.items[updateItem.index + 1], params: ListViewItemLayoutParams(width: state.visibleSize.width, leftInset: state.insets.left, rightInset: state.insets.right), updateAnimation: animated ? .System(duration: insertionAnimationDuration) : .None, completion: { _, layout, apply in
|
||||
self.nodeForItem(synchronous: synchronous, synchronousLoads: synchronousLoads, item: updateItem.item, previousNode: previousNode, index: updateItem.index, previousItem: updateItem.index == 0 ? nil : self.items[updateItem.index - 1], nextItem: updateItem.index == (self.items.count - 1) ? nil : self.items[updateItem.index + 1], params: ListViewItemLayoutParams(width: state.visibleSize.width, leftInset: state.insets.left, rightInset: state.insets.right, availableHeight: state.visibleSize.height - state.insets.top - state.insets.bottom), updateAnimation: animated ? .System(duration: insertionAnimationDuration) : .None, completion: { _, layout, apply in
|
||||
state.updateNodeAtItemIndex(updateItem.index, layout: layout, direction: updateItem.directionHint, animation: animated ? .System(duration: insertionAnimationDuration) : .None, apply: apply, operations: &operations)
|
||||
|
||||
updateIndicesAndItems.remove(at: 0)
|
||||
|
@ -73,11 +73,13 @@ public struct ListViewItemLayoutParams {
|
||||
public let width: CGFloat
|
||||
public let leftInset: CGFloat
|
||||
public let rightInset: CGFloat
|
||||
public let availableHeight: CGFloat
|
||||
|
||||
public init(width: CGFloat, leftInset: CGFloat, rightInset: CGFloat) {
|
||||
public init(width: CGFloat, leftInset: CGFloat, rightInset: CGFloat, availableHeight: CGFloat) {
|
||||
self.width = width
|
||||
self.leftInset = leftInset
|
||||
self.rightInset = rightInset
|
||||
self.availableHeight = availableHeight
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -78,7 +78,7 @@ class WalletAmountItemNode: ListViewItemNode, UITextFieldDelegate, ItemListItemN
|
||||
private let measureNode: TextNode
|
||||
|
||||
private var item: WalletAmountItem?
|
||||
private var validLayout: (CGFloat, CGFloat, CGFloat)?
|
||||
private var validLayout: (CGFloat, CGFloat, CGFloat, CGFloat)?
|
||||
|
||||
var tag: ItemListItemTag? {
|
||||
return self.item?.tag
|
||||
@ -166,7 +166,7 @@ class WalletAmountItemNode: ListViewItemNode, UITextFieldDelegate, ItemListItemN
|
||||
return
|
||||
}
|
||||
let makeInputFieldLayout = self.inputFieldAsyncLayout()
|
||||
let (_, _, inputFieldApply) = makeInputFieldLayout(item, ListViewItemLayoutParams(width: validLayout.0, leftInset: validLayout.1, rightInset: validLayout.2))
|
||||
let (_, _, inputFieldApply) = makeInputFieldLayout(item, ListViewItemLayoutParams(width: validLayout.0, leftInset: validLayout.1, rightInset: validLayout.2, availableHeight: validLayout.3))
|
||||
inputFieldApply()
|
||||
}
|
||||
|
||||
@ -196,7 +196,7 @@ class WalletAmountItemNode: ListViewItemNode, UITextFieldDelegate, ItemListItemN
|
||||
return (layout, { [weak self] in
|
||||
if let strongSelf = self {
|
||||
strongSelf.item = item
|
||||
strongSelf.validLayout = (params.width, params.leftInset, params.rightInset)
|
||||
strongSelf.validLayout = (params.width, params.leftInset, params.rightInset, params.availableHeight)
|
||||
|
||||
if let _ = updatedTheme {
|
||||
strongSelf.bottomStripeNode.backgroundColor = item.theme.list.itemBlocksSeparatorColor
|
||||
|
@ -216,7 +216,7 @@ func walletCreateInvoiceScreen(context: WalletContext, address: String) -> ViewC
|
||||
}
|
||||
return state
|
||||
}
|
||||
ensureItemVisibleImpl?(tag, false)
|
||||
ensureItemVisibleImpl?(tag, true)
|
||||
}, dismissInput: {
|
||||
dismissInputImpl?()
|
||||
}, scrollToBottom: {
|
||||
|
@ -118,21 +118,16 @@ final class WalletInfoEmptyItemNode: ListViewItemNode {
|
||||
}
|
||||
|
||||
func asyncLayout() -> (_ item: WalletInfoEmptyItem, _ params: ListViewItemLayoutParams) -> (ListViewItemNodeLayout, () -> Void) {
|
||||
let sideInset: CGFloat = 32.0
|
||||
let buttonSideInset: CGFloat = 48.0
|
||||
let iconSpacing: CGFloat = 5.0
|
||||
let titleSpacing: CGFloat = 19.0
|
||||
let termsSpacing: CGFloat = 11.0
|
||||
let buttonHeight: CGFloat = 50.0
|
||||
|
||||
let iconSize = CGSize(width: 140.0, height: 140.0)
|
||||
self.animationNode.updateLayout(size: iconSize)
|
||||
|
||||
let makeTitleLayout = TextNode.asyncLayout(self.titleNode)
|
||||
let makeTextLayout = TextNode.asyncLayout(self.textNode)
|
||||
let makeAddressLayout = TextNode.asyncLayout(self.addressNode)
|
||||
|
||||
return { [weak self] item, params in
|
||||
var iconSpacing: CGFloat = 5.0
|
||||
var titleSpacing: CGFloat = 19.0
|
||||
var iconSize = CGSize(width: 140.0, height: 140.0)
|
||||
let contentVerticalOrigin: CGFloat = 10.0
|
||||
|
||||
let sideInset: CGFloat = 16.0
|
||||
var iconOffset = CGPoint()
|
||||
|
||||
@ -149,14 +144,25 @@ final class WalletInfoEmptyItemNode: ListViewItemNode {
|
||||
addressString.insert("\n", at: addressString.index(addressString.startIndex, offsetBy: addressString.count / 2))
|
||||
let (addressLayout, addressApply) = makeAddressLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: addressString, font: Font.monospace(16.0), textColor: textColor), backgroundColor: nil, maximumNumberOfLines: 0, truncationType: .end, constrainedSize: CGSize(width: params.width - params.leftInset - params.rightInset - sideInset * 2.0, height: .greatestFiniteMagnitude), alignment: .center, lineSpacing: 0.1, cutout: nil, insets: UIEdgeInsets()))
|
||||
|
||||
let contentVerticalOrigin: CGFloat = 32.0
|
||||
let availableHeight = params.availableHeight - contentVerticalOrigin * 2.0
|
||||
|
||||
let rawContentHeight: CGFloat = iconSize.height + titleLayout.size.height + textLayout.size.height + addressLayout.size.height
|
||||
let contentSpacing = iconSpacing + titleSpacing + titleSpacing
|
||||
let contentSpacingFactor = max(0.2, min(1.0, (availableHeight - rawContentHeight) / contentSpacing))
|
||||
|
||||
if contentSpacingFactor < 0.25 {
|
||||
iconSize = CGSize(width: 90.0, height: 90.0)
|
||||
}
|
||||
|
||||
iconSpacing = floor(iconSpacing * contentSpacingFactor)
|
||||
titleSpacing = floor(titleSpacing * contentSpacingFactor)
|
||||
|
||||
let iconFrame = CGRect(origin: CGPoint(x: floor((params.width - iconSize.width) / 2.0), y: contentVerticalOrigin), size: iconSize).offsetBy(dx: iconOffset.x, dy: iconOffset.y)
|
||||
let titleFrame = CGRect(origin: CGPoint(x: floor((params.width - titleLayout.size.width) / 2.0), y: iconFrame.maxY + iconSpacing), size: titleLayout.size)
|
||||
let textFrame = CGRect(origin: CGPoint(x: floor((params.width - textLayout.size.width) / 2.0), y: titleFrame.maxY + titleSpacing), size: textLayout.size)
|
||||
let addressFrame = CGRect(origin: CGPoint(x: floor((params.width - addressLayout.size.width) / 2.0), y: textFrame.maxY + titleSpacing), size: addressLayout.size)
|
||||
|
||||
let layout = ListViewItemNodeLayout(contentSize: CGSize(width: params.width, height: (item.loading ? iconFrame.maxY : addressFrame.maxY) + 32.0), insets: UIEdgeInsets())
|
||||
let layout = ListViewItemNodeLayout(contentSize: CGSize(width: params.width, height: (item.loading ? iconFrame.maxY : addressFrame.maxY) + contentVerticalOrigin), insets: UIEdgeInsets())
|
||||
|
||||
return (layout, {
|
||||
guard let strongSelf = self else {
|
||||
@ -179,6 +185,8 @@ final class WalletInfoEmptyItemNode: ListViewItemNode {
|
||||
|
||||
strongSelf.item = item
|
||||
|
||||
strongSelf.animationNode.updateLayout(size: iconSize)
|
||||
|
||||
strongSelf.offsetContainer.frame = CGRect(origin: CGPoint(), size: layout.contentSize)
|
||||
|
||||
let _ = titleApply()
|
||||
|
@ -1117,6 +1117,10 @@ private final class WalletApplicationSplashScreenNode: ASDisplayNode {
|
||||
private let headerBackgroundNode: ASDisplayNode
|
||||
private let headerCornerNode: ASImageNode
|
||||
|
||||
private var isDismissed = false
|
||||
|
||||
private var validLayout: (layout: ContainerViewLayout, navigationHeight: CGFloat)?
|
||||
|
||||
init(theme: WalletTheme) {
|
||||
self.headerBackgroundNode = ASDisplayNode()
|
||||
self.headerBackgroundNode.backgroundColor = .black
|
||||
@ -1141,11 +1145,32 @@ private final class WalletApplicationSplashScreenNode: ASDisplayNode {
|
||||
}
|
||||
|
||||
func containerLayoutUpdated(layout: ContainerViewLayout, navigationHeight: CGFloat, transition: ContainedViewLayoutTransition) {
|
||||
if self.isDismissed {
|
||||
return
|
||||
}
|
||||
self.validLayout = (layout, navigationHeight)
|
||||
|
||||
let headerHeight = navigationHeight + 260.0
|
||||
|
||||
transition.updateFrame(node: self.headerBackgroundNode, frame: CGRect(origin: CGPoint(x: -1.0, y: 0), size: CGSize(width: layout.size.width + 2.0, height: headerHeight)))
|
||||
transition.updateFrame(node: self.headerCornerNode, frame: CGRect(origin: CGPoint(x: 0.0, y: headerHeight), size: CGSize(width: layout.size.width, height: 10.0)))
|
||||
}
|
||||
|
||||
func animateOut(completion: @escaping () -> Void) {
|
||||
guard let (layout, navigationHeight) = self.validLayout else {
|
||||
completion()
|
||||
return
|
||||
}
|
||||
self.isDismissed = true
|
||||
let transition: ContainedViewLayoutTransition = .animated(duration: 0.4, curve: .spring)
|
||||
|
||||
let headerHeight = navigationHeight + 260.0
|
||||
|
||||
transition.updateFrame(node: self.headerBackgroundNode, frame: CGRect(origin: CGPoint(x: -1.0, y: -headerHeight - 10.0), size: CGSize(width: layout.size.width + 2.0, height: headerHeight)), completion: { _ in
|
||||
completion()
|
||||
})
|
||||
transition.updateFrame(node: self.headerCornerNode, frame: CGRect(origin: CGPoint(x: 0.0, y: -10.0), size: CGSize(width: layout.size.width, height: 10.0)))
|
||||
}
|
||||
}
|
||||
|
||||
public final class WalletApplicationSplashScreen: ViewController {
|
||||
@ -1174,4 +1199,9 @@ public final class WalletApplicationSplashScreen: ViewController {
|
||||
|
||||
(self.displayNode as! WalletApplicationSplashScreenNode).containerLayoutUpdated(layout: layout, navigationHeight: self.navigationHeight, transition: transition)
|
||||
}
|
||||
|
||||
public func animateOut(completion: @escaping () -> Void) {
|
||||
self.statusBar.statusBarStyle = .Black
|
||||
(self.displayNode as! WalletApplicationSplashScreenNode).animateOut(completion: completion)
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user