diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj
index 4ff5a90d7..b5e256529 100644
--- a/DashWallet.xcodeproj/project.pbxproj
+++ b/DashWallet.xcodeproj/project.pbxproj
@@ -7444,7 +7444,7 @@
INFOPLIST_KEY_CFBundleDisplayName = Dash;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- MARKETING_VERSION = 7.0.2;
+ MARKETING_VERSION = 7.0.3;
PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "";
@@ -7502,7 +7502,7 @@
INFOPLIST_KEY_CFBundleDisplayName = Dash;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- MARKETING_VERSION = 7.0.2;
+ MARKETING_VERSION = 7.0.3;
PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "DashWallet/dashwallet-Bridging-Header.h";
@@ -7587,7 +7587,7 @@
EXCLUDED_ARCHS = "";
IBSC_MODULE = WatchApp_Extension;
INFOPLIST_FILE = WatchApp/Info.plist;
- MARKETING_VERSION = 7.0.2;
+ MARKETING_VERSION = 7.0.3;
PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
@@ -7609,7 +7609,7 @@
EXCLUDED_ARCHS = "";
IBSC_MODULE = WatchApp_Extension;
INFOPLIST_FILE = WatchApp/Info.plist;
- MARKETING_VERSION = 7.0.2;
+ MARKETING_VERSION = 7.0.3;
PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
@@ -7630,7 +7630,7 @@
EXCLUDED_ARCHS = "";
INFOPLIST_FILE = "WatchApp Extension/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
- MARKETING_VERSION = 7.0.2;
+ MARKETING_VERSION = 7.0.3;
PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp.watchkitextension;
PRODUCT_NAME = "${TARGET_NAME}";
SDKROOT = watchos;
@@ -7653,7 +7653,7 @@
EXCLUDED_ARCHS = "";
INFOPLIST_FILE = "WatchApp Extension/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
- MARKETING_VERSION = 7.0.2;
+ MARKETING_VERSION = 7.0.3;
PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp.watchkitextension;
PRODUCT_NAME = "${TARGET_NAME}";
SDKROOT = watchos;
@@ -7681,7 +7681,7 @@
INFOPLIST_FILE = TodayExtension/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
- MARKETING_VERSION = 7.0.2;
+ MARKETING_VERSION = 7.0.3;
PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
@@ -7706,7 +7706,7 @@
INFOPLIST_FILE = TodayExtension/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
- MARKETING_VERSION = 7.0.2;
+ MARKETING_VERSION = 7.0.3;
PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
@@ -7823,7 +7823,7 @@
INFOPLIST_KEY_CFBundleDisplayName = Dash;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- MARKETING_VERSION = 7.0.2;
+ MARKETING_VERSION = 7.0.3;
PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "DashWallet/dashwallet-Bridging-Header.h";
@@ -7851,7 +7851,7 @@
INFOPLIST_FILE = TodayExtension/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
- MARKETING_VERSION = 7.0.2;
+ MARKETING_VERSION = 7.0.3;
PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
@@ -7903,7 +7903,7 @@
EXCLUDED_ARCHS = "";
IBSC_MODULE = WatchApp_Extension;
INFOPLIST_FILE = WatchApp/Info.plist;
- MARKETING_VERSION = 7.0.2;
+ MARKETING_VERSION = 7.0.3;
PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
@@ -7924,7 +7924,7 @@
EXCLUDED_ARCHS = "";
INFOPLIST_FILE = "WatchApp Extension/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
- MARKETING_VERSION = 7.0.2;
+ MARKETING_VERSION = 7.0.3;
PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp.watchkitextension;
PRODUCT_NAME = "${TARGET_NAME}";
SDKROOT = watchos;
@@ -8040,7 +8040,7 @@
INFOPLIST_KEY_CFBundleDisplayName = Dash;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- MARKETING_VERSION = 7.0.2;
+ MARKETING_VERSION = 7.0.3;
PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "DashWallet/dashwallet-Bridging-Header.h";
@@ -8067,7 +8067,7 @@
INFOPLIST_FILE = TodayExtension/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
- MARKETING_VERSION = 7.0.2;
+ MARKETING_VERSION = 7.0.3;
PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
@@ -8118,7 +8118,7 @@
EXCLUDED_ARCHS = "";
IBSC_MODULE = WatchApp_Extension;
INFOPLIST_FILE = WatchApp/Info.plist;
- MARKETING_VERSION = 7.0.2;
+ MARKETING_VERSION = 7.0.3;
PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
@@ -8139,7 +8139,7 @@
EXCLUDED_ARCHS = "";
INFOPLIST_FILE = "WatchApp Extension/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
- MARKETING_VERSION = 7.0.2;
+ MARKETING_VERSION = 7.0.3;
PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp.watchkitextension;
PRODUCT_NAME = "${TARGET_NAME}";
SDKROOT = watchos;
diff --git a/DashWallet/Sources/Models/CrowdNode/CrowdNode.swift b/DashWallet/Sources/Models/CrowdNode/CrowdNode.swift
index 9b4336b78..063171e02 100644
--- a/DashWallet/Sources/Models/CrowdNode/CrowdNode.swift
+++ b/DashWallet/Sources/Models/CrowdNode/CrowdNode.swift
@@ -471,14 +471,20 @@ extension CrowdNode {
}
func hasAnyDeposits() -> Bool {
+ DSLogger.log("CrowdNodeDeposit: hasAnyDeposits")
guard !accountAddress.isEmpty else { return false }
+ DSLogger.log("CrowdNodeDeposit: get currentWallet")
let wallet = DWEnvironment.sharedInstance().currentWallet
+ DSLogger.log("CrowdNodeDeposit: create CrowdNodeDepositTx")
let filter = CrowdNodeDepositTx(accountAddress: accountAddress)
- return wallet.allTransactions.contains {
+ DSLogger.log("CrowdNodeDeposit: enumerate allTransactions")
+ let result = wallet.allTransactions.contains {
tx in filter.matches(tx: tx)
}
+ DSLogger.log("CrowdNodeDeposit: hasAnyDeposits: return \(result)")
+ return result
}
private func checkWithdrawalLimits(_ amount: UInt64) throws {
diff --git a/DashWallet/Sources/UI/CrowdNode/CrowdNodeModel.swift b/DashWallet/Sources/UI/CrowdNode/CrowdNodeModel.swift
index ee02a2024..c32eea789 100644
--- a/DashWallet/Sources/UI/CrowdNode/CrowdNodeModel.swift
+++ b/DashWallet/Sources/UI/CrowdNode/CrowdNodeModel.swift
@@ -98,7 +98,8 @@ final class CrowdNodeModel {
var needsBackup: Bool { DWGlobalOptions.sharedInstance().walletNeedsBackup }
var canSignUp: Bool { !needsBackup && hasEnoughWalletBalance }
var shouldShowFirstDepositBanner: Bool {
- !crowdNode.hasAnyDeposits() && crowdNodeBalance < CrowdNode.minimumDeposit
+ DSLogger.log("CrowdNodeDeposit: get shouldShowFirstDepositBanner. Balance: \(crowdNodeBalance)")
+ return !crowdNode.hasAnyDeposits() && crowdNodeBalance < CrowdNode.minimumDeposit
}
var canWithdraw: Bool {
diff --git a/DashWallet/Sources/UI/CrowdNode/Portal/CrowdNodePortalViewController.swift b/DashWallet/Sources/UI/CrowdNode/Portal/CrowdNodePortalViewController.swift
index 6dde13403..8efc508f1 100644
--- a/DashWallet/Sources/UI/CrowdNode/Portal/CrowdNodePortalViewController.swift
+++ b/DashWallet/Sources/UI/CrowdNode/Portal/CrowdNodePortalViewController.swift
@@ -245,6 +245,7 @@ extension CrowdNodePortalController : UITableViewDelegate, UITableViewDataSource
switch item {
case .deposit:
+ DSLogger.log("CrowdNodeDeposit: navigate to transfer with deposit mode")
navigationController?.pushViewController(CrowdNodeTransferController.controller(mode: TransferDirection.deposit), animated: true)
case .withdraw:
if viewModel.canWithdraw {
diff --git a/DashWallet/Sources/UI/CrowdNode/Portal/CrowdNodeTransferViewController.swift b/DashWallet/Sources/UI/CrowdNode/Portal/CrowdNodeTransferViewController.swift
index 1c1f0e525..b4144c9f5 100644
--- a/DashWallet/Sources/UI/CrowdNode/Portal/CrowdNodeTransferViewController.swift
+++ b/DashWallet/Sources/UI/CrowdNode/Portal/CrowdNodeTransferViewController.swift
@@ -43,45 +43,57 @@ final class CrowdNodeTransferController: SendAmountViewController, NetworkReacha
override var amountInputStyle: AmountInputControl.Style { .oppositeAmount }
static func controller(mode: TransferDirection) -> CrowdNodeTransferController {
+ DSLogger.log("CrowdNodeDeposit: create transfer model for \(mode)")
let model = CrowdNodeTransferModel()
model.direction = mode
+ DSLogger.log("CrowdNodeDeposit: create viewController")
let vc = CrowdNodeTransferController(model: model)
return vc
}
override func viewDidLoad() {
+ DSLogger.log("CrowdNodeDeposit: super.viewDidLoad")
super.viewDidLoad()
+ DSLogger.log("CrowdNodeDeposit: viewDidLoad")
view.backgroundColor = .dw_secondaryBackground()
navigationItem.backButtonDisplayMode = .minimal
navigationItem.largeTitleDisplayMode = .never
networkStatusDidChange = { [weak self] _ in
+ DSLogger.log("CrowdNodeDeposit: networkStatusDidChange")
self?.reloadView()
}
startNetworkMonitoring()
configureObservers()
+ DSLogger.log("CrowdNodeDeposit: viewDidLoad end")
}
override func viewDidAppear(_ animated: Bool) {
+ DSLogger.log("CrowdNodeDeposit: super.viewDidAppear")
super.viewDidAppear(animated)
+ DSLogger.log("CrowdNodeDeposit: viewDidAppear")
viewModel.showNotificationOnResult = false
if mode == .deposit && viewModel.shouldShowWithdrawalLimitsDialog {
showWithdrawalLimitsInfo()
viewModel.shouldShowWithdrawalLimitsDialog = false
}
+
+ DSLogger.log("CrowdNodeDeposit: viewDidAppear end")
}
override func viewDidDisappear(_ animated: Bool) {
+ DSLogger.log("CrowdNodeDeposit: super.viewDidDisappear")
super.viewDidDisappear(animated)
viewModel.showNotificationOnResult = true
}
override var actionButtonTitle: String? {
- mode.title
+ DSLogger.log("CrowdNodeDeposit: get actionButtonTitle")
+ return mode.title
}
override func actionButtonAction(sender: UIView) {
@@ -101,8 +113,10 @@ final class CrowdNodeTransferController: SendAmountViewController, NetworkReacha
}
override func configureModel() {
+ DSLogger.log("CrowdNodeDeposit: super.configureModel")
super.configureModel()
+ DSLogger.log("CrowdNodeDeposit: configureModel")
model.inputsSwappedHandler = { [weak self] _ in
self?.updateBalanceLabel()
}
@@ -158,22 +172,28 @@ final class CrowdNodeTransferController: SendAmountViewController, NetworkReacha
extension CrowdNodeTransferController {
override func configureHierarchy() {
+ DSLogger.log("CrowdNodeDeposit: super.configureHierarchy")
super.configureHierarchy()
+ DSLogger.log("CrowdNodeDeposit: configureTitleBar")
configureTitleBar()
+ DSLogger.log("CrowdNodeDeposit: set fromLabel")
fromLabel = FromLabel(icon: mode.imageName, text: mode.direction)
contentView.addSubview(fromLabel)
+ DSLogger.log("CrowdNodeDeposit: set KeyboardHeader")
let keyboardHeader = KeyboardHeader(icon: mode.keyboardHeaderIcon, text: mode.keyboardHeader)
keyboardHeader.translatesAutoresizingMaskIntoConstraints = false
topKeyboardView = keyboardHeader
+ DSLogger.log("CrowdNodeDeposit: set NetworkUnavailableView")
networkUnavailableView = NetworkUnavailableView(frame: .zero)
networkUnavailableView.translatesAutoresizingMaskIntoConstraints = false
networkUnavailableView.isHidden = true
contentView.addSubview(networkUnavailableView)
+ DSLogger.log("CrowdNodeDeposit: activate transfer screen constraints")
NSLayoutConstraint.activate([
fromLabel.centerXAnchor.constraint(equalTo: contentView.centerXAnchor),
NSLayoutConstraint(item: fromLabel!, attribute: .centerY, relatedBy: .equal, toItem: view, attribute: .centerY, multiplier: 0.38, constant: 0),
@@ -187,9 +207,11 @@ extension CrowdNodeTransferController {
])
if mode == .deposit && viewModel.shouldShowFirstDepositBanner {
+ DSLogger.log("CrowdNodeDeposit: set MinimumDepositBanner")
let minimumDepositBanner = MinimumDepositBanner(frame: .zero)
contentView.addSubview(minimumDepositBanner)
+ DSLogger.log("CrowdNodeDeposit: activate MinimumDepositBanner constraints")
NSLayoutConstraint.activate([
minimumDepositBanner.heightAnchor.constraint(equalToConstant: 32),
minimumDepositBanner.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
@@ -197,6 +219,7 @@ extension CrowdNodeTransferController {
minimumDepositBanner.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0),
])
+ DSLogger.log("CrowdNodeDeposit: set UITapGestureRecognizer")
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(minimumDepositBannerTapAction))
minimumDepositBanner.addGestureRecognizer(tapGestureRecognizer)
self.minimumDepositBanner = minimumDepositBanner
@@ -204,6 +227,7 @@ extension CrowdNodeTransferController {
}
private func configureTitleBar() {
+ DSLogger.log("CrowdNodeDeposit: configureTitleBar")
let titleViewStackView = UIStackView()
titleViewStackView.alignment = .center
titleViewStackView.translatesAutoresizingMaskIntoConstraints = false
@@ -211,12 +235,14 @@ extension CrowdNodeTransferController {
titleViewStackView.spacing = 1
navigationItem.titleView = titleViewStackView
+ DSLogger.log("CrowdNodeDeposit: titleLabel")
let titleLabel = UILabel()
titleLabel.font = .dw_mediumFont(ofSize: 16)
titleLabel.minimumScaleFactor = 0.5
titleLabel.text = mode.title
titleViewStackView.addArrangedSubview(titleLabel)
+ DSLogger.log("CrowdNodeDeposit: set dashPriceLabel")
dashPriceLabel = UILabel()
dashPriceLabel.font = .dw_font(forTextStyle: .footnote)
dashPriceLabel.textColor = .dw_secondaryText()
@@ -235,6 +261,7 @@ extension CrowdNodeTransferController {
extension CrowdNodeTransferController {
private func reloadView() {
let isOnline = networkStatus == .online
+ DSLogger.log("CrowdNodeDeposit: reloadView, isOnline: \(isOnline)")
networkUnavailableView.isHidden = isOnline
keyboardContainer.isHidden = !isOnline
if let btn = actionButton as? UIButton { btn.superview?.isHidden = !isOnline }
@@ -300,15 +327,20 @@ extension CrowdNodeTransferController {
}
private func showWithdrawalLimitsInfo() {
+ DSLogger.log("CrowdNodeDeposit: showWithdrawalLimitsInfo")
let vc = WithdrawalLimitsController()
+ DSLogger.log("CrowdNodeDeposit: assign WithdrawalLimitDialogModel")
vc.model = WithdrawalLimitDialogModel(icon: "image.crowdnode.info", buttonText: nil, limits: viewModel.withdrawalLimits, highlightedLimit: -1)
+ DSLogger.log("CrowdNodeDeposit: create BaseNavigationController")
let nvc = BaseNavigationController(rootViewController: vc)
+ DSLogger.log("CrowdNodeDeposit: present BaseNavigationController")
present(nvc, animated: true)
}
}
extension CrowdNodeTransferController {
func configureObservers() {
+ DSLogger.log("CrowdNodeDeposit: configureObservers")
viewModel.$crowdNodeBalance
.receive(on: DispatchQueue.main)
.removeDuplicates()
@@ -334,10 +366,13 @@ extension CrowdNodeTransferController {
}
private func updateBalanceLabel() {
+ DSLogger.log("CrowdNodeDeposit: updateBalanceLabel")
let amount = mode == .deposit ? viewModel.walletBalance : viewModel.crowdNodeBalance
+ DSLogger.log("CrowdNodeDeposit: formatted balance: \(amount)")
let formatted = model.activeAmountType == .main
? amount.formattedDashAmount
: CurrencyExchanger.shared.fiatAmountString(in: model.localCurrencyCode, for: amount.dashAmount)
+ DSLogger.log("CrowdNodeDeposit: set balance label: \(formatted)")
fromLabel.balanceText = NSLocalizedString("Balance: ", comment: "CrowdNode") + formatted
}
}
diff --git a/DashWallet/Sources/UI/CrowdNode/Portal/Model/CrowdNodeTransferModel.swift b/DashWallet/Sources/UI/CrowdNode/Portal/Model/CrowdNodeTransferModel.swift
index 1ff6e3890..ae02f6b73 100644
--- a/DashWallet/Sources/UI/CrowdNode/Portal/Model/CrowdNodeTransferModel.swift
+++ b/DashWallet/Sources/UI/CrowdNode/Portal/Model/CrowdNodeTransferModel.swift
@@ -33,6 +33,7 @@ enum TransferDirection {
case withdraw
var imageName: String {
+ DSLogger.log("CrowdNodeDeposit: get imageName")
switch self {
case .deposit: return "image.explore.dash.wts.dash"
case .withdraw: return "image.crowdnode.logo"
@@ -40,6 +41,7 @@ enum TransferDirection {
}
var title: String {
+ DSLogger.log("CrowdNodeDeposit: get title")
switch self {
case .deposit: return NSLocalizedString("Deposit", comment: "CrowdNode")
case .withdraw: return NSLocalizedString("Withdraw", comment: "CrowdNode")
@@ -47,6 +49,7 @@ enum TransferDirection {
}
var direction: String {
+ DSLogger.log("CrowdNodeDeposit: get direction")
switch self {
case .deposit: return NSLocalizedString("from Dash Wallet", comment: "from Dash Wallet")
case .withdraw: return NSLocalizedString("from CrowdNode", comment: "from CrowdNode")
@@ -54,6 +57,7 @@ enum TransferDirection {
}
var keyboardHeader: String {
+ DSLogger.log("CrowdNodeDeposit: get keyboardHeader")
switch self {
case .deposit: return NSLocalizedString("Sending to CrowdNode account", comment: "CrowdNode")
case .withdraw: return NSLocalizedString("Sending to Dash Wallet on this device", comment: "CrowdNode")
@@ -61,6 +65,7 @@ enum TransferDirection {
}
var keyboardHeaderIcon: String {
+ DSLogger.log("CrowdNodeDeposit: get keyboardHeaderIcon")
switch self {
case .deposit: return "image.crowdnode.logo"
case .withdraw: return "image.explore.dash.wts.dash"
@@ -97,6 +102,7 @@ final class CrowdNodeTransferModel: SendAmountModel {
public var direction: TransferDirection = .deposit
var dashPriceDisplayString: String {
+ DSLogger.log("CrowdNodeDeposit: get dashPriceDisplayString")
let dashAmount = kOneDash
let dashAmountFormatted = dashAmount.formattedDashAmount
let fiatBalanceFormatted = CurrencyExchanger.shared.fiatAmountString(in: localCurrencyCode, for: dashAmount.dashAmount)
diff --git a/DashWallet/Sources/UI/CrowdNode/Portal/WithdrawalLimitsController.swift b/DashWallet/Sources/UI/CrowdNode/Portal/WithdrawalLimitsController.swift
index 8223f33cf..45cc8e0e1 100644
--- a/DashWallet/Sources/UI/CrowdNode/Portal/WithdrawalLimitsController.swift
+++ b/DashWallet/Sources/UI/CrowdNode/Portal/WithdrawalLimitsController.swift
@@ -52,6 +52,7 @@ final class WithdrawalLimitsController: BaseViewController {
}
override func viewDidLoad() {
+ DSLogger.log("CrowdNodeDeposit: limits super.viewDidLoad")
super.viewDidLoad()
configureHierarchy()
@@ -61,28 +62,34 @@ final class WithdrawalLimitsController: BaseViewController {
// MARK: Life cycle
extension WithdrawalLimitsController {
private func configureHierarchy() {
+ DSLogger.log("CrowdNodeDeposit: limits configureHierarchy")
view.backgroundColor = .dw_secondaryBackground()
let action = UIAction { [weak self] _ in
self?.closeAction()
}
+ DSLogger.log("CrowdNodeDeposit: limits set rightBarButtonItem")
let closeItem = UIBarButtonItem(systemItem: .close, primaryAction: action)
navigationItem.rightBarButtonItem = closeItem
+ DSLogger.log("CrowdNodeDeposit: limits set scrollView")
let scrollView = UIScrollView(frame: .zero)
scrollView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(scrollView)
+ DSLogger.log("CrowdNodeDeposit: limits set contentView")
let contentView = UIView()
contentView.translatesAutoresizingMaskIntoConstraints = false
contentView.backgroundColor = .clear
scrollView.addSubview(contentView)
+ DSLogger.log("CrowdNodeDeposit: limits set iconView")
let iconView = UIImageView(image: UIImage(named: model?.icon ?? "image.crowdnode.info"))
iconView.contentMode = .scaleAspectFit
iconView.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(iconView)
+ DSLogger.log("CrowdNodeDeposit: limits set titleLabel")
let titleLabel = UILabel()
titleLabel.translatesAutoresizingMaskIntoConstraints = false
titleLabel.textAlignment = .center
@@ -90,6 +97,7 @@ extension WithdrawalLimitsController {
titleLabel.text = NSLocalizedString("CrowdNode withdrawal limits", comment: "CrowdNode")
scrollView.addSubview(titleLabel)
+ DSLogger.log("CrowdNodeDeposit: limits set titleLabel")
let descriptionLabel = UILabel()
descriptionLabel.translatesAutoresizingMaskIntoConstraints = false
descriptionLabel.numberOfLines = 0
@@ -100,26 +108,33 @@ extension WithdrawalLimitsController {
descriptionLabel.text = NSLocalizedString("Due to CrowdNode’s terms of service users can withdraw no more than:", comment: "CrowdNode")
scrollView.addSubview(descriptionLabel)
+ DSLogger.log("CrowdNodeDeposit: limits set limitsStackView")
let limitsStackView = UIStackView()
limitsStackView.translatesAutoresizingMaskIntoConstraints = false
limitsStackView.axis = .horizontal
limitsStackView.distribution = .fillEqually
scrollView.addSubview(limitsStackView)
+ DSLogger.log("CrowdNodeDeposit: limits set limitLabelsStackView")
let limitLabelsStackView = UIStackView()
limitLabelsStackView.translatesAutoresizingMaskIntoConstraints = false
limitLabelsStackView.axis = .horizontal
limitLabelsStackView.distribution = .fillEqually
scrollView.addSubview(limitLabelsStackView)
+ DSLogger.log("CrowdNodeDeposit: limits enumerate limits")
model?.limits.enumerated().forEach {
+ DSLogger.log("CrowdNodeDeposit: limit \($0.element)")
let isHighlighted = $0.offset == model?.highlightedLimit
+ DSLogger.log("CrowdNodeDeposit: create limit")
let limit = createLimitText(limit: $0.element, isHighlighted: isHighlighted)
limitsStackView.addArrangedSubview(limit)
+ DSLogger.log("CrowdNodeDeposit: create createLimitLabel")
let limitLabel = createLimitLabel(label: limitLabels[$0.offset], isHighlighted: isHighlighted)
limitLabelsStackView.addArrangedSubview(limitLabel)
}
+ DSLogger.log("CrowdNodeDeposit: limits activate constraints")
let frameGuide = scrollView.frameLayoutGuide
let contentGuide = scrollView.contentLayoutGuide
@@ -160,6 +175,7 @@ extension WithdrawalLimitsController {
])
if let text = model?.buttonText {
+ DSLogger.log("CrowdNodeDeposit: limits set onlineAccountHint")
let onlineAccountHint = UILabel()
onlineAccountHint.translatesAutoresizingMaskIntoConstraints = false
onlineAccountHint.numberOfLines = 0
@@ -170,6 +186,7 @@ extension WithdrawalLimitsController {
onlineAccountHint.text = NSLocalizedString("Withdraw without limits with an online account on CrowdNode website.", comment: "CrowdNode")
scrollView.addSubview(onlineAccountHint)
+ DSLogger.log("CrowdNodeDeposit: limits set actionButton")
let actionButton = UIButton(type: .custom)
actionButton.translatesAutoresizingMaskIntoConstraints = false
actionButton.addTarget(self, action: #selector(actionButtonAction), for: .touchUpInside)
@@ -179,6 +196,7 @@ extension WithdrawalLimitsController {
actionButton.setTitle(text, for: .normal)
scrollView.addSubview(actionButton)
+ DSLogger.log("CrowdNodeDeposit: limits activate buttonText constraint")
NSLayoutConstraint.activate([
onlineAccountHint.topAnchor.constraint(equalTo: limitLabelsStackView.bottomAnchor, constant: 30),
onlineAccountHint.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 15),
diff --git a/DashWallet/Sources/UI/Payment Controller/PaymentController.swift b/DashWallet/Sources/UI/Payment Controller/PaymentController.swift
index 0adbb5907..441dba899 100644
--- a/DashWallet/Sources/UI/Payment Controller/PaymentController.swift
+++ b/DashWallet/Sources/UI/Payment Controller/PaymentController.swift
@@ -212,14 +212,14 @@ extension PaymentController: DWPaymentProcessorDelegate {
vc.dismiss(animated: true) {
if let vc = self.presentationContextProvider as? UIViewController,
vc.navigationController?.topViewController is ProvideAmountViewController {
- vc.navigationController?.popViewController(animated: true)
+ vc.navigationController?.popToRootViewController(animated: true)
}
self.delegate?.paymentControllerDidFinishTransaction(self, transaction: transaction)
}
} else {
if let vc = presentationContextProvider as? UIViewController,
vc.navigationController?.topViewController is ProvideAmountViewController {
- vc.navigationController?.popViewController(animated: true)
+ vc.navigationController?.popToRootViewController(animated: true)
}
delegate?.paymentControllerDidFinishTransaction(self, transaction: transaction)
diff --git a/DashWallet/Sources/UI/Payments/Amount/BaseAmountViewController.swift b/DashWallet/Sources/UI/Payments/Amount/BaseAmountViewController.swift
index 39d9fe1fc..4c88e2e33 100644
--- a/DashWallet/Sources/UI/Payments/Amount/BaseAmountViewController.swift
+++ b/DashWallet/Sources/UI/Payments/Amount/BaseAmountViewController.swift
@@ -56,6 +56,7 @@ class BaseAmountViewController: ActionButtonViewController, AmountProviding {
func maxButtonAction() { }
init(model: BaseAmountModel) {
+ DSLogger.log("CrowdNodeDeposit: BaseAmountViewController init")
self.model = model
super.init(nibName: nil, bundle: nil)
@@ -66,6 +67,7 @@ class BaseAmountViewController: ActionButtonViewController, AmountProviding {
}
internal func configureModel() {
+ DSLogger.log("CrowdNodeDeposit: BaseAmountViewController configureModel")
model.amountChangeHandler = { [weak self] _ in
self?.amountDidChange()
}
@@ -84,6 +86,7 @@ class BaseAmountViewController: ActionButtonViewController, AmountProviding {
}
internal func amountDidChange() {
+ DSLogger.log("CrowdNodeDeposit: BaseAmountViewController amountDidChange")
actionButton?.isEnabled = model.isAllowedToContinue
amountView.amountInputControl.reloadData()
showErrorIfNeeded()
@@ -123,6 +126,7 @@ class BaseAmountViewController: ActionButtonViewController, AmountProviding {
}
override func viewDidAppear(_ animated: Bool) {
+ DSLogger.log("CrowdNodeDeposit: BaseAmountViewController viewDidAppear")
super.viewDidAppear(animated)
actionButton?.isEnabled = model.isAllowedToContinue
@@ -131,6 +135,7 @@ class BaseAmountViewController: ActionButtonViewController, AmountProviding {
}
override func viewDidLoad() {
+ DSLogger.log("CrowdNodeDeposit: BaseAmountViewController viewDidLoad")
super.viewDidLoad()
configureHierarchy()
@@ -141,6 +146,7 @@ class BaseAmountViewController: ActionButtonViewController, AmountProviding {
extension BaseAmountViewController {
@objc
internal func configureHierarchy() {
+ DSLogger.log("CrowdNodeDeposit: BaseAmountViewController configureHierarchy")
contentView = UIView()
contentView.translatesAutoresizingMaskIntoConstraints = false
contentView.backgroundColor = .dw_secondaryBackground()
diff --git a/DashWallet/Sources/UI/Payments/Amount/Model/Send/SendAmountModel.swift b/DashWallet/Sources/UI/Payments/Amount/Model/Send/SendAmountModel.swift
index f762a2f41..799242bce 100644
--- a/DashWallet/Sources/UI/Payments/Amount/Model/Send/SendAmountModel.swift
+++ b/DashWallet/Sources/UI/Payments/Amount/Model/Send/SendAmountModel.swift
@@ -55,10 +55,7 @@ class SendAmountModel: BaseAmountModel {
let account = DWEnvironment.sharedInstance().currentAccount
let allAvailableFunds = account.maxOutputAmount
- let authenticationManager = DSAuthenticationManager.sharedInstance()
- let canShowInsufficientFunds = authenticationManager.didAuthenticate
-
- return canShowInsufficientFunds && (plainAmount > allAvailableFunds)
+ return plainAmount > allAvailableFunds
}
private var syncingActivityMonitor: SyncingActivityMonitor { SyncingActivityMonitor.shared }
diff --git a/DashWallet/Sources/UI/Payments/Enter Address/EnterAddressViewController.swift b/DashWallet/Sources/UI/Payments/Enter Address/EnterAddressViewController.swift
index ffacb83b0..ac0baf362 100644
--- a/DashWallet/Sources/UI/Payments/Enter Address/EnterAddressViewController.swift
+++ b/DashWallet/Sources/UI/Payments/Enter Address/EnterAddressViewController.swift
@@ -32,6 +32,7 @@ final class EnterAddressViewController: BaseViewController, PayableViewControlle
var payModel: DWPayModelProtocol! { model }
internal var paymentController: PaymentController!
+ @objc
weak var paymentControllerDelegate: PaymentControllerDelegate?
// MARK: Actions
diff --git a/DashWallet/Sources/UI/Payments/Enter Address/Views/PasteboardContentView.swift b/DashWallet/Sources/UI/Payments/Enter Address/Views/PasteboardContentView.swift
index bdc51b7fa..deac73ad7 100644
--- a/DashWallet/Sources/UI/Payments/Enter Address/Views/PasteboardContentView.swift
+++ b/DashWallet/Sources/UI/Payments/Enter Address/Views/PasteboardContentView.swift
@@ -23,8 +23,8 @@ final class PasteboardContentView: UIView {
private var textView: TappableTextView!
override var intrinsicContentSize: CGSize {
- let h = textView.contentSize.height + 36 + 10 // textView.contentSize.height + top padding + bottom padding
- return CGSize(width: UIView.noIntrinsicMetric, height: min(200, h))
+ let h = textView.contentSize.height + 36 + 10 + 5 // textView.contentSize.height + top padding + bottom padding
+ return CGSize(width: UIView.noIntrinsicMetric, height: min(220, h))
}
override init(frame: CGRect) {
@@ -54,7 +54,9 @@ final class PasteboardContentView: UIView {
}
}
- invalidateIntrinsicContentSize()
+ DispatchQueue.main.async {
+ self.invalidateIntrinsicContentSize()
+ }
}
private func configureHierarchy() {
diff --git a/DashWallet/Sources/UI/Payments/Pay/Confirm/ConfirmPaymentViewController.swift b/DashWallet/Sources/UI/Payments/Pay/Confirm/ConfirmPaymentViewController.swift
index 7bc6cb1a4..7d761c930 100644
--- a/DashWallet/Sources/UI/Payments/Pay/Confirm/ConfirmPaymentViewController.swift
+++ b/DashWallet/Sources/UI/Payments/Pay/Confirm/ConfirmPaymentViewController.swift
@@ -67,7 +67,7 @@ class ConfirmPaymentViewController: SheetViewController {
}
override func contentViewHeight() -> CGFloat {
- 190 + CGFloat(model.items.count)*46 + view.safeAreaInsets.bottom
+ 190 + CGFloat(model.items.count)*46
}
override func viewDidLoad() {
diff --git a/DashWallet/Sources/UI/Payments/Pay/DWBasePayViewController.m b/DashWallet/Sources/UI/Payments/Pay/DWBasePayViewController.m
index 321fd10cd..85183a34a 100644
--- a/DashWallet/Sources/UI/Payments/Pay/DWBasePayViewController.m
+++ b/DashWallet/Sources/UI/Payments/Pay/DWBasePayViewController.m
@@ -71,7 +71,7 @@ - (void)performScanQRCodeAction {
- (void)payToAddressAction {
DWEnterAddressViewController *vc = [[DWEnterAddressViewController alloc] init];
-
+ vc.paymentControllerDelegate = self;
DWNavigationController *nvc = [[DWNavigationController alloc] initWithRootViewController: vc];
[self presentViewController:nvc animated:YES completion:nil];
}
@@ -157,15 +157,16 @@ - (void)paymentControllerDidFailTransaction:(PaymentController *)controller {
}
- (void)paymentControllerDidFinishTransaction:(PaymentController *_Nonnull)controller transaction:(DSTransaction *_Nonnull)transaction {
+ [self dismissViewControllerAnimated:true completion:^{
+ TxDetailModel *model = [[TxDetailModel alloc] initWithTransaction:transaction];
+ SuccessTxDetailViewController *vc = [[SuccessTxDetailViewController alloc] initWithModel:model];
+ vc.contactItem = _paymentController.contactItem;
+ vc.delegate = self;
+ [self presentViewController:vc
+ animated:YES
+ completion:nil];
+ }];
- TxDetailModel *model = [[TxDetailModel alloc] initWithTransaction:transaction];
- SuccessTxDetailViewController *vc = [[SuccessTxDetailViewController alloc] initWithModel:model];
- vc.modalPresentationStyle = UIModalPresentationFullScreen;
- vc.contactItem = _paymentController.contactItem;
- vc.delegate = self;
- [self presentViewController:vc
- animated:YES
- completion:nil];
}
- (UIViewController *_Nonnull)presentationAnchorForPaymentController:(PaymentController *_Nonnull)controller {
diff --git a/DashWallet/Sources/UI/Payments/Pay/Pay.storyboard b/DashWallet/Sources/UI/Payments/Pay/Pay.storyboard
index 55988bb8c..aa2515ba3 100644
--- a/DashWallet/Sources/UI/Payments/Pay/Pay.storyboard
+++ b/DashWallet/Sources/UI/Payments/Pay/Pay.storyboard
@@ -3,7 +3,7 @@
-
+
@@ -12,7 +12,7 @@
-
+
diff --git a/DashWallet/Sources/UI/Payments/Pay/PayViewController.swift b/DashWallet/Sources/UI/Payments/Pay/PayViewController.swift
index 629a875d2..e88d69dc7 100644
--- a/DashWallet/Sources/UI/Payments/Pay/PayViewController.swift
+++ b/DashWallet/Sources/UI/Payments/Pay/PayViewController.swift
@@ -19,32 +19,25 @@ import UIKit
// MARK: - PayViewControllerDelegate
-@objc(DWPayViewControllerDelegate)
protocol PayViewControllerDelegate: AnyObject {
func payViewControllerDidFinishPayment(_ controller: PayViewController, contact: DWDPBasicUserItem?)
}
// MARK: - PayViewController
-@objc(DWPayViewController)
class PayViewController: BaseViewController, PayableViewController {
@IBOutlet weak var tableView: UITableView!
- @objc
var paymentController: PaymentController!
- @objc
var payModel: DWPayModelProtocol!
var maxActionButtonWidth: CGFloat = 0
- @objc
var demoMode = false
- @objc
var delegate: PayViewControllerDelegate?
- @objc
static func controller(with payModel: DWPayModelProtocol) -> PayViewController {
let storyboard = UIStoryboard(name: "Pay", bundle: nil)
let controller = storyboard.instantiateInitialViewController() as! PayViewController
diff --git a/DashWallet/Sources/UI/Views/BaseController/BaseViewController+NetworkReachability.swift b/DashWallet/Sources/UI/Views/BaseController/BaseViewController+NetworkReachability.swift
index 6b7f5d7c5..8e70c1e30 100644
--- a/DashWallet/Sources/UI/Views/BaseController/BaseViewController+NetworkReachability.swift
+++ b/DashWallet/Sources/UI/Views/BaseController/BaseViewController+NetworkReachability.swift
@@ -32,6 +32,7 @@ extension NetworkReachabilityHandling {
internal var reachability: DSReachabilityManager { DSReachabilityManager.shared() }
public func startNetworkMonitoring() {
+ DSLogger.log("CrowdNodeDeposit: startNetworkMonitoring")
if !reachability.isMonitoring {
reachability.startMonitoring()
}
diff --git a/DashWallet/Sources/UI/Views/SheetViewController.swift b/DashWallet/Sources/UI/Views/SheetViewController.swift
index 5fa5f7818..ad7d0b903 100644
--- a/DashWallet/Sources/UI/Views/SheetViewController.swift
+++ b/DashWallet/Sources/UI/Views/SheetViewController.swift
@@ -24,32 +24,24 @@ class SheetViewController: BaseViewController, DWModalPresentationControllerDele
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
- let contentViewHeight = contentViewHeight()
- if contentViewHeight != -1 {
- if #available(iOS 16.0, *) {
- modalPresentationStyle = .pageSheet
-
- guard let sheet = sheetPresentationController else { return }
+ if #available(iOS 16.0, *) {
+ modalPresentationStyle = .pageSheet
- let detents: [UISheetPresentationController.Detent]
+ guard let sheet = sheetPresentationController else { return }
- let fitId = UISheetPresentationController.Detent.Identifier("fit")
- detents = [UISheetPresentationController.Detent.custom(identifier: fitId) { _ in
- contentViewHeight
- }]
- sheet.prefersGrabberVisible = true
- sheet.detents = detents
- } else {
- modalPresentationStyle = .custom
+ let detents: [UISheetPresentationController.Detent]
- modalTransition = DWModalTransition()
- modalTransition?.modalPresentationControllerDelegate = self
- transitioningDelegate = modalTransition
- }
+ let fitId = UISheetPresentationController.Detent.Identifier("fit")
+ detents = [UISheetPresentationController.Detent.custom(identifier: fitId) { [weak self] _ in
+ self?.contentViewHeight() ?? 100
+ }]
+ sheet.prefersGrabberVisible = true
+ sheet.detents = detents
} else {
modalPresentationStyle = .custom
modalTransition = DWModalTransition()
+ modalTransition?.modalPresentationControllerDelegate = self
transitioningDelegate = modalTransition
}
}
diff --git a/Podfile.lock b/Podfile.lock
index 4827b61a1..8e6b7715c 100644
--- a/Podfile.lock
+++ b/Podfile.lock
@@ -698,7 +698,7 @@ PODS:
- nanopb/encode (= 2.30908.0)
- nanopb/decode (2.30908.0)
- nanopb/encode (2.30908.0)
- - PromisesObjC (2.3.0)
+ - PromisesObjC (2.3.1)
- Protobuf (3.23.4)
- SDWebImage (5.13.2):
- SDWebImage/Core (= 5.13.2)
@@ -821,7 +821,7 @@ SPEC CHECKSUMS:
MMSegmentSlider: db7ee0d6eb2eefbd511179195bf288ff2cebac0a
Moya: 138f0573e53411fb3dc17016add0b748dfbd78ee
nanopb: a0ba3315591a9ae0a16a309ee504766e90db0c96
- PromisesObjC: 7f84fefd35e085854377a97e19424ae424cc7a9e
+ PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4
Protobuf: c6bc59bbab3d38a71c67f62d7cb7ca8f8ea4eca1
SDWebImage: 72f86271a6f3139cc7e4a89220946489d4b9a866
SQLite.swift: 903bfa3bc9ab06345fdfbb578e34f47cfcf417da