diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/Property List.plist b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/BalanceInfo.plist similarity index 85% rename from SynchronyFinancial/SynchronyFinancial WatchKit Extension/Property List.plist rename to SynchronyFinancial/SynchronyFinancial WatchKit Extension/BalanceInfo.plist index 5d70c64..6767858 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/Property List.plist +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/BalanceInfo.plist @@ -1,24 +1,21 @@ - - Account1 + 2000 8000 2 - Account2 1300 5000 5 - Account 3 4000 10000 3 - + diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/BalanceInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/BalanceInterfaceController.swift index a8491f8..32773b4 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/BalanceInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/BalanceInterfaceController.swift @@ -11,20 +11,27 @@ import Foundation class BalanceInterfaceController: WKInterfaceController { + var util: Int? + var didAnimate: Bool = false @IBOutlet weak var image2: WKInterfaceImage! override func awake(withContext context: Any?) { super.awake(withContext: context) + + // get plist data to generate balance metric + var plistValues = PlistUtil.readPlist(for: .balance) + let balance = plistValues[0][0] + let credit = plistValues[0][1] > 0 ? plistValues[0][1] : 1 + + util = Int(round((Double(balance)/Double(credit)) * 100)) } + override func didAppear() { - // Called when watch interface is visible to user - /*var plistValues = [String]() - plistValues = PlistUtil.readPlist(namePlist: "PropertyList", key: "Account1") - let balance: Int = Int(plistValues[0])! - let credit: Int = Int(plistValues[1])! - let util = (balance/credit * 10)*/ image2.setImageNamed("scores") - image2.startAnimatingWithImages(in: NSRange(location: 0, length: 66), duration: 1.5, repeatCount: 1) + if !didAnimate { + image2.startAnimatingWithImages(in: NSRange(location: 0, length: util ?? 0), duration: 1.5, repeatCount: 1) + didAnimate = true + } //image2.stopAnimating() } diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PlistUtil.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PlistUtil.swift index 6f6420c..f5a9313 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PlistUtil.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PlistUtil.swift @@ -8,36 +8,27 @@ import Foundation +public enum PlistDataType: String { + case balance = "BalanceInfo" + case transaction = "Transcation" + case account = "Account" +} + class PlistUtil { - static func readPlist(namePlist: String, key: String) -> [String]{ - let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) as NSArray - let documentsDirectory = paths.object(at: 0) as! NSString - let path = documentsDirectory.appendingPathComponent(namePlist+".plist") - - var output:AnyObject = false as AnyObject - - if let dict = NSMutableDictionary(contentsOfFile: path){ - output = dict.object(forKey: key)! as AnyObject - }else{ - if let privPath = Bundle.main.path(forResource: namePlist, ofType: "plist"){ - if let dict = NSMutableDictionary(contentsOfFile: privPath){ - output = dict.object(forKey: key)! as AnyObject - }else{ - output = false as AnyObject - print("error_read") - } - }else{ - output = false as AnyObject - print("error_read") + static func readPlist(for data: PlistDataType) -> [[Int]] { + var balances = [[Int]]() + if let file = Bundle.main.path(forResource: data.rawValue, ofType: "plist"), + let array = NSArray.init(contentsOfFile: file) { + array.forEach { + guard let balance = $0 as? [AnyHashable], + let b = balance[0] as? Int, + let credit = balance[1] as? Int, + let age = balance[2] as? Int else { return } + balances.append([b, credit, age]) } } - print("plist_read \(output)") - return output as! [String] + + return balances } - - } - -/*Borrowed from - https://github.com/soonin/IOS-Swift-PlistReadAndWrite/blob/master/IOS-Swift-PlistReadAndWrite/PlistReadAndWrite.swift */ diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/UtilizationfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/UtilizationfaceController.swift index ec28e5d..7e762a5 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/UtilizationfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/UtilizationfaceController.swift @@ -9,18 +9,29 @@ import WatchKit import Foundation - class UtilizationInterfaceController: WKInterfaceController { + var didAnimate: Bool = false + var util: Int? @IBOutlet weak var image3: WKInterfaceImage! + override func awake(withContext context: Any?) { super.awake(withContext: context) + + // get plist data to generate utilization metric + var plistValues = PlistUtil.readPlist(for: .balance) + let balance = plistValues[0][0] + let credit = plistValues[0][1] > 0 ? plistValues[0][1] : 1 + + util = Int(round((Double(balance)/Double(credit)) * 100)) } override func didAppear() { - // Called when watch interface is visible to user - image3.setImageNamed("scores") - image3.startAnimatingWithImages(in: NSRange(location: 0, length: 46), duration: 1.5, repeatCount: 1) + if !didAnimate { + image3.setImageNamed("scores") + image3.startAnimatingWithImages(in: NSRange(location: 1, length: util ?? 0), duration: 1.5, repeatCount: 1) + didAnimate = true + } } override func willActivate() { diff --git a/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj b/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj index f2157ce..c1c6b1a 100644 --- a/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj +++ b/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj @@ -26,7 +26,7 @@ 67C8DD8321ED323B0063A01B /* CircleIndicator.sks in Resources */ = {isa = PBXBuildFile; fileRef = 67C8DD8221ED323B0063A01B /* CircleIndicator.sks */; }; 67C8DD8521ED3B5A0063A01B /* WellnessInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67C8DD8421ED3B5A0063A01B /* WellnessInterfaceController.swift */; }; 9BCE39732227138E00B7A992 /* BalanceInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BCE39722227138E00B7A992 /* BalanceInterfaceController.swift */; }; - 9BCE39752227712500B7A992 /* Property List.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9BCE39742227712500B7A992 /* Property List.plist */; }; + 9BCE39752227712500B7A992 /* BalanceInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9BCE39742227712500B7A992 /* BalanceInfo.plist */; }; 9BCE39772227731800B7A992 /* UtilizationfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BCE39762227731800B7A992 /* UtilizationfaceController.swift */; }; 9BCE39792227839B00B7A992 /* AccountNumberInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BCE39782227839B00B7A992 /* AccountNumberInterfaceController.swift */; }; 9BCE397D222F5A2800B7A992 /* PlistUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BCE397C222F5A2800B7A992 /* PlistUtil.swift */; }; @@ -99,7 +99,7 @@ 67C8DD8221ED323B0063A01B /* CircleIndicator.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = CircleIndicator.sks; sourceTree = ""; }; 67C8DD8421ED3B5A0063A01B /* WellnessInterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WellnessInterfaceController.swift; sourceTree = ""; }; 9BCE39722227138E00B7A992 /* BalanceInterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BalanceInterfaceController.swift; sourceTree = ""; }; - 9BCE39742227712500B7A992 /* Property List.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Property List.plist"; sourceTree = ""; }; + 9BCE39742227712500B7A992 /* BalanceInfo.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = BalanceInfo.plist; sourceTree = ""; }; 9BCE39762227731800B7A992 /* UtilizationfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UtilizationfaceController.swift; sourceTree = ""; }; 9BCE39782227839B00B7A992 /* AccountNumberInterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountNumberInterfaceController.swift; sourceTree = ""; }; 9BCE397C222F5A2800B7A992 /* PlistUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlistUtil.swift; sourceTree = ""; }; @@ -192,7 +192,7 @@ 9BCE397C222F5A2800B7A992 /* PlistUtil.swift */, 67BAC291219E254900713FEF /* Assets.xcassets */, 67BAC293219E254900713FEF /* Info.plist */, - 9BCE39742227712500B7A992 /* Property List.plist */, + 9BCE39742227712500B7A992 /* BalanceInfo.plist */, ); path = "SynchronyFinancial WatchKit Extension"; sourceTree = ""; @@ -335,7 +335,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9BCE39752227712500B7A992 /* Property List.plist in Resources */, + 9BCE39752227712500B7A992 /* BalanceInfo.plist in Resources */, 67BAC292219E254900713FEF /* Assets.xcassets in Resources */, 67C8DD8321ED323B0063A01B /* CircleIndicator.sks in Resources */, );