diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard b/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard index e57f1c6..16caf3d 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard +++ b/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard @@ -1,6 +1,6 @@ - + @@ -129,17 +129,95 @@ diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/AccountDetailsInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/AccountDetailsInterfaceController.swift index 502ab4a..601f41c 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/AccountDetailsInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/AccountDetailsInterfaceController.swift @@ -11,15 +11,26 @@ import Foundation class AccountDetailsInterfaceController: WKInterfaceController { var selectedAccount: Account? + var dictForAcct: [String: Account] = [:] + @IBOutlet weak var transactionsButton: WKInterfaceButton! + @IBOutlet weak var payButton: WKInterfaceButton! @IBOutlet weak var balanceLabel: WKInterfaceLabel! @IBOutlet weak var availableFundsLabel: WKInterfaceLabel! @IBOutlet weak var accountNameLabel: WKInterfaceLabel! @IBOutlet weak var nextPaymentDueLabel: WKInterfaceLabel! + @IBAction func payBillTapped() { + if let acct = selectedAccount { + dictForAcct.updateValue(acct, forKey: "acct") + } + pushController(withName: "PayMinimum", context: dictForAcct) + } + override func awake(withContext context: Any?) { super.awake(withContext: context) - + payButton.setWidth(self.contentFrame.width / 2) + transactionsButton.setWidth(self.contentFrame.width / 2) guard let data = context as? [String: Account] else { NSLog("Error receiving context containing selected account in AccountDetailInterfaceController") return @@ -39,6 +50,17 @@ class AccountDetailsInterfaceController: WKInterfaceController { super.didDeactivate() } + override func contextForSegue(withIdentifier segueIdentifier: String) -> Any? { + if segueIdentifier == "payBill" { + if let acct = selectedAccount { + dictForAcct.updateValue(acct, forKey: "acct") + return dictForAcct + } + } + + return nil + } + private func configureForAccount() { guard selectedAccount != nil, let acct = selectedAccount else { NSLog("Error configuring AccountDetails. selectedAccount is nil") diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PayBillInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PayBillInterfaceController.swift new file mode 100644 index 0000000..3285d74 --- /dev/null +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PayBillInterfaceController.swift @@ -0,0 +1,65 @@ +// +// PayBillInterfaceController.swift +// SynchronyFinancial +// +// Created by Alan Maynard on 3/13/19. +// Copyright © 2019 Alan Maynard. All rights reserved. +// + +import WatchKit +import Foundation + +class PayBillInterfaceController: WKInterfaceController { + var acct: Account? + var payDict: [String: Any] = [:] + + @IBOutlet weak var balanceLabel: WKInterfaceLabel! + @IBOutlet weak var payBalanceButton: WKInterfaceButton! + @IBOutlet weak var minimumLabel: WKInterfaceLabel! + @IBOutlet weak var payMinimumButton: WKInterfaceButton! + + override func awake(withContext context: Any?) { + super.awake(withContext: context) + + // Configure interface objects here. + guard let data = context as? [String: Account] else { + NSLog("Error receiving context containing selected account in AccountDetailInterfaceController") + return + } + + acct = data["acct"] + configure() + } + + override func willActivate() { + // This method is called when watch view controller is about to be visible to user + super.willActivate() + } + + override func didDeactivate() { + // This method is called when watch view controller is no longer visible + super.didDeactivate() + } + + override func contextForSegue(withIdentifier segueIdentifier: String) -> Any? { + if segueIdentifier == "PayMinimum" { + payDict.updateValue(Double(acct?.minPayDue ?? 0.0), forKey: "payment_amount") + } else if segueIdentifier == "PayAll" { + payDict.updateValue(Double(acct?.curBalance ?? 0.0), forKey: "payment_amount") + } + return payDict + } + + private func configure() { + if let valid = acct { + payDict.updateValue(valid, forKey: "acct") + let balanceFormatted = String(format: "$%.2f", valid.curBalance) + balanceLabel.setText("Balance: \(balanceFormatted)") + payBalanceButton.setTitle("Pay \(balanceFormatted)") + + let minimumFormatted = String(format: "$%.2f", valid.minPayDue) + minimumLabel.setText("Minimum Payment: \(minimumFormatted)") + payMinimumButton.setTitle("Pay \(minimumFormatted)") + } + } +} diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift new file mode 100644 index 0000000..30ed7b8 --- /dev/null +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift @@ -0,0 +1,57 @@ +// +// PaymentDetailInterfaceController.swift +// SynchronyFinancial +// +// Created by Monday on 2019/03/24. +// Copyright © 2019 Alan Maynard. All rights reserved. +// + +import WatchKit +import Foundation + +class PaymentDetailInterfaceController: WKInterfaceController { + var selectedAccount: Account? + var dictForAcct: [String: Account] = [:] + var paymentButtonArmed: Bool = false + var paymentAmount: Double = 0.0 + + @IBOutlet weak var detailButton: WKInterfaceButton! + @IBOutlet weak var amount: WKInterfaceLabel! + @IBOutlet weak var paymentButton: WKInterfaceButton! + + override func awake(withContext context: Any?) { + super.awake(withContext: context) + guard let data = context as? [String: Any], let acct = data["acct"] as? Account, let amount = data["payment_amount"] as? Double else { + NSLog("Error getting account object and payment amount") + return + } + + self.paymentAmount = amount + self.selectedAccount = acct + paymentButton.setTitle(String(format: "Pay $%.2f", amount)) + } + + @IBAction func paymentAction() { + if paymentButtonArmed { + popToRootController() + } else { +// animate(withDuration: 0.75) { +// self.paymentButton.setBackgroundColor(UIColor.init(red: 141, green: 241, blue: 48, alpha: 1.0)) +// } + + paymentButton.setBackgroundColor(#colorLiteral(red: 0.6092301607, green: 0.9366738796, blue: 0.2432599962, alpha: 1)) + paymentButtonArmed = true + paymentButton.setTitle("Pay Now") + } + } + + override func willActivate() { + // This method is called when watch view controller is about to be visible to user + super.willActivate() + } + + override func didDeactivate() { + // This method is called when watch view controller is no longer visible + super.didDeactivate() + } +} diff --git a/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj b/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj index d90b26f..6d5600b 100644 --- a/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj +++ b/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj @@ -9,6 +9,8 @@ /* Begin PBXBuildFile section */ 1123372E223ABD6400B70925 /* FetchData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1123372D223ABD6400B70925 /* FetchData.swift */; }; 281283568A34D3C5D9C7B383 /* libPods-SynchronyFinancial WatchKit Extension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CAA6D46F907ADAABF49FD409 /* libPods-SynchronyFinancial WatchKit Extension.a */; }; + 481864A8224802BB0059CF7A /* PaymentDetailInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 481864A7224802BB0059CF7A /* PaymentDetailInterfaceController.swift */; }; + 481864A9224802BB0059CF7A /* PaymentDetailInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 481864A7224802BB0059CF7A /* PaymentDetailInterfaceController.swift */; }; 48DA0058221D12E70081A500 /* AccountCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48DA0057221D12E70081A500 /* AccountCell.swift */; }; 48F243072214C98600B9C894 /* AccountTableInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48F243062214C98600B9C894 /* AccountTableInterfaceController.swift */; }; 48F2430A2214CBA200B9C894 /* Interface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 67BAC27C219E254800713FEF /* Interface.storyboard */; }; @@ -18,6 +20,8 @@ 67228CD8224D6E2700CA29E4 /* WKInterfaceImage+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67228CD7224D6E2700CA29E4 /* WKInterfaceImage+Extensions.swift */; }; 673F396E21A644570051469E /* MainMenuInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 673F396C21A644460051469E /* MainMenuInterfaceController.swift */; }; 673F397021A652A00051469E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 673F396F21A652A00051469E /* Assets.xcassets */; }; + 674BD1532239A39D0076AFD6 /* PayBillInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 674BD1522239A39D0076AFD6 /* PayBillInterfaceController.swift */; }; + 674BD1542239A39D0076AFD6 /* PayBillInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 674BD1522239A39D0076AFD6 /* PayBillInterfaceController.swift */; }; 676392B422429DC800740A8C /* TransactionsInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 676392B322429DC800740A8C /* TransactionsInterfaceController.swift */; }; 676392B62242A3F800740A8C /* TransactionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 676392B52242A3F800740A8C /* TransactionCell.swift */; }; 678C38842230950100FEAAF6 /* AccountDetailsInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 678C38832230950100FEAAF6 /* AccountDetailsInterfaceController.swift */; }; @@ -84,6 +88,7 @@ 1BEF4B8BF190D117CA6104E5 /* Pods-SynchronyFinancial WatchKit App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SynchronyFinancial WatchKit App.release.xcconfig"; path = "Pods/Target Support Files/Pods-SynchronyFinancial WatchKit App/Pods-SynchronyFinancial WatchKit App.release.xcconfig"; sourceTree = ""; }; 250BDAF6AD4E1CCA82995E30 /* Pods-SynchronyFinancial WatchKit Extension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SynchronyFinancial WatchKit Extension.release.xcconfig"; path = "Pods/Target Support Files/Pods-SynchronyFinancial WatchKit Extension/Pods-SynchronyFinancial WatchKit Extension.release.xcconfig"; sourceTree = ""; }; 396A16E056D05DEC937A07DA /* Pods-SynchronyFinancial.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SynchronyFinancial.release.xcconfig"; path = "Pods/Target Support Files/Pods-SynchronyFinancial/Pods-SynchronyFinancial.release.xcconfig"; sourceTree = ""; }; + 481864A7224802BB0059CF7A /* PaymentDetailInterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentDetailInterfaceController.swift; sourceTree = ""; }; 48DA0057221D12E70081A500 /* AccountCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountCell.swift; sourceTree = ""; }; 48F243062214C98600B9C894 /* AccountTableInterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountTableInterfaceController.swift; sourceTree = ""; }; 48F2430B2214CBF700B9C894 /* Account.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Account.swift; sourceTree = ""; }; @@ -92,6 +97,7 @@ 67228CD7224D6E2700CA29E4 /* WKInterfaceImage+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WKInterfaceImage+Extensions.swift"; sourceTree = ""; }; 673F396C21A644460051469E /* MainMenuInterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenuInterfaceController.swift; sourceTree = ""; }; 673F396F21A652A00051469E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 674BD1522239A39D0076AFD6 /* PayBillInterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PayBillInterfaceController.swift; sourceTree = ""; }; 676392B322429DC800740A8C /* TransactionsInterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionsInterfaceController.swift; sourceTree = ""; }; 676392B52242A3F800740A8C /* TransactionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionCell.swift; sourceTree = ""; }; 678C38832230950100FEAAF6 /* AccountDetailsInterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountDetailsInterfaceController.swift; sourceTree = ""; }; @@ -194,6 +200,8 @@ 67BAC28A219E254900713FEF /* SynchronyFinancial WatchKit Extension */ = { isa = PBXGroup; children = ( + 674BD1522239A39D0076AFD6 /* PayBillInterfaceController.swift */, + 481864A7224802BB0059CF7A /* PaymentDetailInterfaceController.swift */, 676392B322429DC800740A8C /* TransactionsInterfaceController.swift */, 673F396C21A644460051469E /* MainMenuInterfaceController.swift */, 67228CD7224D6E2700CA29E4 /* WKInterfaceImage+Extensions.swift */, @@ -456,8 +464,10 @@ buildActionMask = 2147483647; files = ( 67E17B86223812C2008871FE /* Defaults.swift in Sources */, + 674BD1532239A39D0076AFD6 /* PayBillInterfaceController.swift in Sources */, 48F2430D2214CBF700B9C894 /* Account.swift in Sources */, 678C388622309F7D00FEAAF6 /* AccountCell.swift in Sources */, + 481864A8224802BB0059CF7A /* PaymentDetailInterfaceController.swift in Sources */, 48F2430E2214CBF700B9C894 /* Transaction.swift in Sources */, 67BAC269219E254700713FEF /* AppDelegate.swift in Sources */, ); @@ -469,6 +479,7 @@ files = ( 678C3885223098C400FEAAF6 /* Account.swift in Sources */, 67BAC28E219E254900713FEF /* ExtensionDelegate.swift in Sources */, + 674BD1542239A39D0076AFD6 /* PayBillInterfaceController.swift in Sources */, 678C38842230950100FEAAF6 /* AccountDetailsInterfaceController.swift in Sources */, 673F396E21A644570051469E /* MainMenuInterfaceController.swift in Sources */, 67E17B87223812C2008871FE /* Defaults.swift in Sources */, @@ -479,6 +490,7 @@ 676392B422429DC800740A8C /* TransactionsInterfaceController.swift in Sources */, 48DA0058221D12E70081A500 /* AccountCell.swift in Sources */, 67228CD8224D6E2700CA29E4 /* WKInterfaceImage+Extensions.swift in Sources */, + 481864A9224802BB0059CF7A /* PaymentDetailInterfaceController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };