From 9dae621f2f6cb144cfa986300e910f897fdbbd19 Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Mon, 14 Jan 2019 17:40:38 -0500 Subject: [PATCH] import fix --- MVMCoreUI.xcodeproj/project.pbxproj | 108 ++- MVMCoreUI/Atoms/Buttons/MFCaretButton.h | 2 +- MVMCoreUI/Atoms/Buttons/MFCaretButton.m | 2 +- MVMCoreUI/Atoms/Buttons/MFCustomButton.h | 4 +- MVMCoreUI/Atoms/Buttons/MFTextButton.h | 2 +- MVMCoreUI/Atoms/Buttons/MFTextButton.m | 4 +- MVMCoreUI/Atoms/Buttons/PrimaryButton.h | 6 +- MVMCoreUI/Atoms/Buttons/PrimaryButton.m | 4 +- MVMCoreUI/Atoms/TextFields/MFDigitTextBox.m | 4 +- MVMCoreUI/Atoms/TextFields/MFDigitTextField.m | 4 +- MVMCoreUI/Atoms/TextFields/MFMdnTextField.h | 2 +- MVMCoreUI/Atoms/TextFields/MFMdnTextField.m | 2 +- MVMCoreUI/Atoms/TextFields/MFTextField.h | 2 +- MVMCoreUI/Atoms/TextFields/MFTextField.m | 2 +- .../TextFields/MFTextFieldSubclassExtension.h | 2 +- MVMCoreUI/Atoms/Views/DashLine.m | 2 +- MVMCoreUI/Atoms/Views/LabelView.h | 23 + MVMCoreUI/Atoms/Views/LabelView.m | 117 +++ MVMCoreUI/Atoms/Views/MFCaretView.m | 2 +- MVMCoreUI/Atoms/Views/MFLabel.m | 4 +- MVMCoreUI/Atoms/Views/MFLoadImageView.m | 2 +- MVMCoreUI/Atoms/Views/MFLoadingSpinner.m | 4 +- MVMCoreUI/Atoms/Views/MFTextView.m | 2 +- MVMCoreUI/Atoms/Views/SeparatorView.h | 2 +- MVMCoreUI/Atoms/Views/SeparatorView.m | 4 +- MVMCoreUI/Atoms/Views/TextButtonView.h | 31 + MVMCoreUI/Atoms/Views/TextButtonView.m | 196 +++++ .../BaseControllers/MFLoadingViewController.m | 4 +- .../MFProgrammaticTableViewController.m | 2 +- .../MFScrollingViewController.m | 2 +- MVMCoreUI/BaseControllers/MFViewController.h | 290 +++++++ MVMCoreUI/BaseControllers/MFViewController.m | 808 ++++++++++++++++++ .../ProgrammaticScrollViewController.m | 2 +- ...e.h => NSLayoutConstraint+MFConvenience.h} | 4 +- ...e.m => NSLayoutConstraint+MFConvenience.m} | 6 +- ...IConvenience.h => UIColor+MFConvenience.h} | 4 +- ...IConvenience.m => UIColor+MFConvenience.m} | 6 +- .../MVMCoreUISplitViewController.m | 6 +- ...MVMCoreUITabBarPageControlViewController.m | 2 +- .../Containers/TabBarController/TopTabbar.m | 4 +- MVMCoreUI/MVMCoreUI.h | 19 + .../OtherHandlers/MVMCoreUILoggingHandler.h | 12 + .../OtherHandlers/MVMCoreUILoggingHandler.m | 13 + MVMCoreUI/Session/MVMCoreUISession.h | 3 + MVMCoreUI/Styles/MFStyler.m | 6 +- .../Fonts/NHaasGroteskDSStd-45Lt.otf | Bin 0 -> 62664 bytes .../Fonts/NHaasGroteskDSStd-55Rg.otf | Bin 0 -> 75048 bytes .../Fonts/NHaasGroteskDSStd-75Bd.otf | Bin 0 -> 64188 bytes .../SupportingFiles/Fonts/OCRAExtended.ttf | Bin 0 -> 56712 bytes .../TopAlert/MVMCoreUITopAlertBaseView.m | 2 +- .../MVMCoreUITopAlertExpandableView.h | 2 +- .../MVMCoreUITopAlertExpandableView.m | 2 +- .../TopAlert/MVMCoreUITopAlertMainView.h | 2 +- .../TopAlert/MVMCoreUITopAlertMainView.m | 4 +- .../TopAlert/MVMCoreUITopAlertShortView.h | 2 +- .../TopAlert/MVMCoreUITopAlertShortView.m | 2 +- MVMCoreUI/TopAlert/MVMCoreUITopAlertView.h | 5 +- MVMCoreUI/TopAlert/MVMCoreUITopAlertView.m | 4 +- MVMCoreUI/Utility/MFFonts.m | 6 +- .../Utility/MVMCoreUICommonViewsUtility.h | 2 - .../Utility/MVMCoreUICommonViewsUtility.m | 4 +- MVMCoreUI/Utility/MVMCoreUIConstants.h | 6 + MVMCoreUI/Utility/MVMCoreUIConstants.m | 6 + MVMCoreUI/Utility/Sizing/MFSizeObject.h | 2 +- MVMCoreUI/Utility/Sizing/MFSizeObject.m | 2 +- MVMCoreUI/Utility/Sizing/MFSizeThreshold.m | 2 +- 66 files changed, 1681 insertions(+), 106 deletions(-) create mode 100644 MVMCoreUI/Atoms/Views/LabelView.h create mode 100644 MVMCoreUI/Atoms/Views/LabelView.m create mode 100644 MVMCoreUI/Atoms/Views/TextButtonView.h create mode 100644 MVMCoreUI/Atoms/Views/TextButtonView.m create mode 100644 MVMCoreUI/BaseControllers/MFViewController.h create mode 100644 MVMCoreUI/BaseControllers/MFViewController.m rename MVMCoreUI/Categories/{NSLayoutConstraint+MVMCoreUIConvenience.h => NSLayoutConstraint+MFConvenience.h} (98%) rename MVMCoreUI/Categories/{NSLayoutConstraint+MVMCoreUIConvenience.m => NSLayoutConstraint+MFConvenience.m} (98%) rename MVMCoreUI/Categories/{UIColor+MVMCoreUIConvenience.h => UIColor+MFConvenience.h} (98%) rename MVMCoreUI/Categories/{UIColor+MVMCoreUIConvenience.m => UIColor+MFConvenience.m} (99%) create mode 100644 MVMCoreUI/SupportingFiles/Fonts/NHaasGroteskDSStd-45Lt.otf create mode 100644 MVMCoreUI/SupportingFiles/Fonts/NHaasGroteskDSStd-55Rg.otf create mode 100644 MVMCoreUI/SupportingFiles/Fonts/NHaasGroteskDSStd-75Bd.otf create mode 100644 MVMCoreUI/SupportingFiles/Fonts/OCRAExtended.ttf diff --git a/MVMCoreUI.xcodeproj/project.pbxproj b/MVMCoreUI.xcodeproj/project.pbxproj index 20c02ce4..45361e01 100644 --- a/MVMCoreUI.xcodeproj/project.pbxproj +++ b/MVMCoreUI.xcodeproj/project.pbxproj @@ -11,21 +11,21 @@ D29DF0E221E4F3B6003B2FB9 /* LargeHeaderSingleLabelViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF0E021E4F3B6003B2FB9 /* LargeHeaderSingleLabelViewController.h */; }; D29DF0E321E4F3B6003B2FB9 /* LargeHeaderSingleLabelViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF0E121E4F3B6003B2FB9 /* LargeHeaderSingleLabelViewController.m */; }; D29DF0E621E4F3C7003B2FB9 /* MVMCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D29DF0E521E4F3C7003B2FB9 /* MVMCore.framework */; }; - D29DF11521E6805F003B2FB9 /* UIColor+MVMCoreUIConvenience.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF11121E6805F003B2FB9 /* UIColor+MVMCoreUIConvenience.h */; }; - D29DF11621E6805F003B2FB9 /* NSLayoutConstraint+MVMCoreUIConvenience.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF11221E6805F003B2FB9 /* NSLayoutConstraint+MVMCoreUIConvenience.h */; }; - D29DF11721E6805F003B2FB9 /* UIColor+MVMCoreUIConvenience.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF11321E6805F003B2FB9 /* UIColor+MVMCoreUIConvenience.m */; }; - D29DF11821E6805F003B2FB9 /* NSLayoutConstraint+MVMCoreUIConvenience.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF11421E6805F003B2FB9 /* NSLayoutConstraint+MVMCoreUIConvenience.m */; }; + D29DF11521E6805F003B2FB9 /* UIColor+MFConvenience.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF11121E6805F003B2FB9 /* UIColor+MFConvenience.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D29DF11621E6805F003B2FB9 /* NSLayoutConstraint+MFConvenience.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF11221E6805F003B2FB9 /* NSLayoutConstraint+MFConvenience.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D29DF11721E6805F003B2FB9 /* UIColor+MFConvenience.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF11321E6805F003B2FB9 /* UIColor+MFConvenience.m */; }; + D29DF11821E6805F003B2FB9 /* NSLayoutConstraint+MFConvenience.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF11421E6805F003B2FB9 /* NSLayoutConstraint+MFConvenience.m */; }; D29DF11C21E684A9003B2FB9 /* MVMCoreUISplitViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF11A21E684A9003B2FB9 /* MVMCoreUISplitViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF11D21E684A9003B2FB9 /* MVMCoreUISplitViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF11B21E684A9003B2FB9 /* MVMCoreUISplitViewController.m */; }; - D29DF12921E6851E003B2FB9 /* MVMCoreUITopAlertMainView.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF11F21E6851E003B2FB9 /* MVMCoreUITopAlertMainView.h */; }; + D29DF12921E6851E003B2FB9 /* MVMCoreUITopAlertMainView.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF11F21E6851E003B2FB9 /* MVMCoreUITopAlertMainView.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF12A21E6851E003B2FB9 /* MVMCoreUITopAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF12021E6851E003B2FB9 /* MVMCoreUITopAlertView.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF12B21E6851E003B2FB9 /* MVMCoreUITopAlertExpandableView.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF12121E6851E003B2FB9 /* MVMCoreUITopAlertExpandableView.m */; }; - D29DF12C21E6851E003B2FB9 /* MVMCoreUITopAlertShortView.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF12221E6851E003B2FB9 /* MVMCoreUITopAlertShortView.h */; }; - D29DF12D21E6851E003B2FB9 /* MVMCoreUITopAlertBaseView.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF12321E6851E003B2FB9 /* MVMCoreUITopAlertBaseView.h */; }; + D29DF12C21E6851E003B2FB9 /* MVMCoreUITopAlertShortView.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF12221E6851E003B2FB9 /* MVMCoreUITopAlertShortView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D29DF12D21E6851E003B2FB9 /* MVMCoreUITopAlertBaseView.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF12321E6851E003B2FB9 /* MVMCoreUITopAlertBaseView.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF12E21E6851E003B2FB9 /* MVMCoreUITopAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF12421E6851E003B2FB9 /* MVMCoreUITopAlertView.m */; }; D29DF12F21E6851E003B2FB9 /* MVMCoreUITopAlertMainView.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF12521E6851E003B2FB9 /* MVMCoreUITopAlertMainView.m */; }; D29DF13021E6851E003B2FB9 /* MVMCoreUITopAlertShortView.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF12621E6851E003B2FB9 /* MVMCoreUITopAlertShortView.m */; }; - D29DF13121E6851E003B2FB9 /* MVMCoreUITopAlertExpandableView.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF12721E6851E003B2FB9 /* MVMCoreUITopAlertExpandableView.h */; }; + D29DF13121E6851E003B2FB9 /* MVMCoreUITopAlertExpandableView.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF12721E6851E003B2FB9 /* MVMCoreUITopAlertExpandableView.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF13221E6851E003B2FB9 /* MVMCoreUITopAlertBaseView.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF12821E6851E003B2FB9 /* MVMCoreUITopAlertBaseView.m */; }; D29DF15421E69760003B2FB9 /* MVMCoreUIPanelButtonProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF15321E69760003B2FB9 /* MVMCoreUIPanelButtonProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF16121E69996003B2FB9 /* MFViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF15F21E69996003B2FB9 /* MFViewController.m */; }; @@ -55,7 +55,7 @@ D29DF25621E6A177003B2FB9 /* MFTextFieldSubclassExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF24B21E6A177003B2FB9 /* MFTextFieldSubclassExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF25721E6A177003B2FB9 /* MFTextField.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF24C21E6A177003B2FB9 /* MFTextField.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF25921E6A22D003B2FB9 /* MFButtonProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF25821E6A22D003B2FB9 /* MFButtonProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D29DF25C21E6A2B6003B2FB9 /* DashLine.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF25A21E6A2B6003B2FB9 /* DashLine.h */; }; + D29DF25C21E6A2B6003B2FB9 /* DashLine.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF25A21E6A2B6003B2FB9 /* DashLine.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF25D21E6A2B6003B2FB9 /* DashLine.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF25B21E6A2B6003B2FB9 /* DashLine.m */; }; D29DF26021E6A985003B2FB9 /* MFLoadImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF25E21E6A985003B2FB9 /* MFLoadImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF26121E6A985003B2FB9 /* MFLoadImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF25F21E6A985003B2FB9 /* MFLoadImageView.m */; }; @@ -65,13 +65,13 @@ D29DF26D21E6AA0B003B2FB9 /* FLAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF26921E6AA0B003B2FB9 /* FLAnimatedImageView.m */; }; D29DF26E21E6AA0B003B2FB9 /* FLAnimatedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF26A21E6AA0B003B2FB9 /* FLAnimatedImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF26F21E6AA0B003B2FB9 /* FLAnimatedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF26B21E6AA0B003B2FB9 /* FLAnimatedImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D29DF27521E79E81003B2FB9 /* MVMCoreUILoggingHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF27321E79E81003B2FB9 /* MVMCoreUILoggingHandler.h */; }; + D29DF27521E79E81003B2FB9 /* MVMCoreUILoggingHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF27321E79E81003B2FB9 /* MVMCoreUILoggingHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF27621E79E81003B2FB9 /* MVMCoreUILoggingHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF27421E79E81003B2FB9 /* MVMCoreUILoggingHandler.m */; }; D29DF27921E7A533003B2FB9 /* MVMCoreUISession.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF27721E7A533003B2FB9 /* MVMCoreUISession.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF27A21E7A533003B2FB9 /* MVMCoreUISession.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF27821E7A533003B2FB9 /* MVMCoreUISession.m */; }; D29DF28021E7AA51003B2FB9 /* MVMCoreUIDetailViewProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF27F21E7AA50003B2FB9 /* MVMCoreUIDetailViewProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF28321E7AB24003B2FB9 /* MVMCoreUICommonViewsUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF28121E7AB23003B2FB9 /* MVMCoreUICommonViewsUtility.m */; }; - D29DF28421E7AB24003B2FB9 /* MVMCoreUICommonViewsUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF28221E7AB24003B2FB9 /* MVMCoreUICommonViewsUtility.h */; }; + D29DF28421E7AB24003B2FB9 /* MVMCoreUICommonViewsUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF28221E7AB24003B2FB9 /* MVMCoreUICommonViewsUtility.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF28921E7AC2B003B2FB9 /* MFLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF28521E7AC2B003B2FB9 /* MFLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF28A21E7AC2B003B2FB9 /* MFLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF28621E7AC2B003B2FB9 /* MFLabel.m */; }; D29DF28B21E7AC2B003B2FB9 /* ViewConstrainingView.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF28721E7AC2B003B2FB9 /* ViewConstrainingView.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -86,7 +86,7 @@ D29DF29C21E7ADB9003B2FB9 /* MFProgrammaticTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF29421E7ADB8003B2FB9 /* MFProgrammaticTableViewController.m */; }; D29DF29D21E7AE38003B2FB9 /* MFStyler.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF13821E68636003B2FB9 /* MFStyler.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF29E21E7AE3B003B2FB9 /* MFStyler.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF13921E68637003B2FB9 /* MFStyler.m */; }; - D29DF2A121E7AF4E003B2FB9 /* MVMCoreUIUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF29F21E7AF4E003B2FB9 /* MVMCoreUIUtility.h */; }; + D29DF2A121E7AF4E003B2FB9 /* MVMCoreUIUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF29F21E7AF4E003B2FB9 /* MVMCoreUIUtility.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF2A221E7AF4E003B2FB9 /* MVMCoreUIUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF2A021E7AF4E003B2FB9 /* MVMCoreUIUtility.m */; }; D29DF2A521E7B2A0003B2FB9 /* MFCaretView.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF2A321E7B29F003B2FB9 /* MFCaretView.m */; }; D29DF2A621E7B2A0003B2FB9 /* MFCaretView.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF2A421E7B2A0003B2FB9 /* MFCaretView.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -95,7 +95,7 @@ D29DF2AE21E7B3A4003B2FB9 /* MFTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF2AB21E7B3A4003B2FB9 /* MFTextView.m */; }; D29DF2AF21E7B3A4003B2FB9 /* MFTextView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D29DF2AC21E7B3A4003B2FB9 /* MFTextView.xib */; }; D29DF2B021E7B3A4003B2FB9 /* MFTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF2AD21E7B3A4003B2FB9 /* MFTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D29DF2B321E7B76D003B2FB9 /* MFLoadingSpinner.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF2B121E7B76C003B2FB9 /* MFLoadingSpinner.h */; }; + D29DF2B321E7B76D003B2FB9 /* MFLoadingSpinner.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF2B121E7B76C003B2FB9 /* MFLoadingSpinner.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF2B421E7B76D003B2FB9 /* MFLoadingSpinner.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF2B221E7B76D003B2FB9 /* MFLoadingSpinner.m */; }; D29DF2BC21E7BEA4003B2FB9 /* TopTabbar.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF2B821E7BEA4003B2FB9 /* TopTabbar.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF2BD21E7BEA4003B2FB9 /* MVMCoreUITabBarPageControlViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF2B921E7BEA4003B2FB9 /* MVMCoreUITabBarPageControlViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -109,10 +109,20 @@ D29DF2C921E7BFC6003B2FB9 /* MFSizeObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF14421E68728003B2FB9 /* MFSizeObject.m */; }; D29DF2CA21E7BFC8003B2FB9 /* MFSizeThreshold.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF14621E68728003B2FB9 /* MFSizeThreshold.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF2CB21E7BFCC003B2FB9 /* MFSizeThreshold.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF14721E68728003B2FB9 /* MFSizeThreshold.m */; }; - D29DF2CE21E7C104003B2FB9 /* MFLoadingViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF2CC21E7C104003B2FB9 /* MFLoadingViewController.h */; }; + D29DF2CE21E7C104003B2FB9 /* MFLoadingViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF2CC21E7C104003B2FB9 /* MFLoadingViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; D29DF2CF21E7C104003B2FB9 /* MFLoadingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF2CD21E7C104003B2FB9 /* MFLoadingViewController.m */; }; D29DF2D121E7C1C8003B2FB9 /* MVMAnimationFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D29DF2D021E7C1C8003B2FB9 /* MVMAnimationFramework.framework */; }; D29DF2E121E9240B003B2FB9 /* MVMCoreUIPanelProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF2E021E9240B003B2FB9 /* MVMCoreUIPanelProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D29DF2EE21ECEADF003B2FB9 /* MFFonts.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF14D21E693AD003B2FB9 /* MFFonts.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D29DF2EF21ECEAE1003B2FB9 /* MFFonts.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF14C21E693AD003B2FB9 /* MFFonts.m */; }; + D29DF31A21ECECC0003B2FB9 /* NHaasGroteskDSStd-45Lt.otf in Resources */ = {isa = PBXBuildFile; fileRef = D29DF31621ECECC0003B2FB9 /* NHaasGroteskDSStd-45Lt.otf */; }; + D29DF31B21ECECC0003B2FB9 /* OCRAExtended.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D29DF31721ECECC0003B2FB9 /* OCRAExtended.ttf */; }; + D29DF31C21ECECC0003B2FB9 /* NHaasGroteskDSStd-75Bd.otf in Resources */ = {isa = PBXBuildFile; fileRef = D29DF31821ECECC0003B2FB9 /* NHaasGroteskDSStd-75Bd.otf */; }; + D29DF31D21ECECC0003B2FB9 /* NHaasGroteskDSStd-55Rg.otf in Resources */ = {isa = PBXBuildFile; fileRef = D29DF31921ECECC0003B2FB9 /* NHaasGroteskDSStd-55Rg.otf */; }; + D29DF32021ED0CBA003B2FB9 /* LabelView.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF31E21ED0CBA003B2FB9 /* LabelView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D29DF32121ED0CBA003B2FB9 /* LabelView.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF31F21ED0CBA003B2FB9 /* LabelView.m */; }; + D29DF32421ED0DA2003B2FB9 /* TextButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = D29DF32221ED0DA2003B2FB9 /* TextButtonView.m */; }; + D29DF32521ED0DA2003B2FB9 /* TextButtonView.h in Headers */ = {isa = PBXBuildFile; fileRef = D29DF32321ED0DA2003B2FB9 /* TextButtonView.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -122,10 +132,10 @@ D29DF0E021E4F3B6003B2FB9 /* LargeHeaderSingleLabelViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LargeHeaderSingleLabelViewController.h; sourceTree = ""; }; D29DF0E121E4F3B6003B2FB9 /* LargeHeaderSingleLabelViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LargeHeaderSingleLabelViewController.m; sourceTree = ""; }; D29DF0E521E4F3C7003B2FB9 /* MVMCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MVMCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D29DF11121E6805F003B2FB9 /* UIColor+MVMCoreUIConvenience.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIColor+MVMCoreUIConvenience.h"; sourceTree = ""; }; - D29DF11221E6805F003B2FB9 /* NSLayoutConstraint+MVMCoreUIConvenience.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSLayoutConstraint+MVMCoreUIConvenience.h"; sourceTree = ""; }; - D29DF11321E6805F003B2FB9 /* UIColor+MVMCoreUIConvenience.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+MVMCoreUIConvenience.m"; sourceTree = ""; }; - D29DF11421E6805F003B2FB9 /* NSLayoutConstraint+MVMCoreUIConvenience.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSLayoutConstraint+MVMCoreUIConvenience.m"; sourceTree = ""; }; + D29DF11121E6805F003B2FB9 /* UIColor+MFConvenience.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIColor+MFConvenience.h"; sourceTree = ""; }; + D29DF11221E6805F003B2FB9 /* NSLayoutConstraint+MFConvenience.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSLayoutConstraint+MFConvenience.h"; sourceTree = ""; }; + D29DF11321E6805F003B2FB9 /* UIColor+MFConvenience.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+MFConvenience.m"; sourceTree = ""; }; + D29DF11421E6805F003B2FB9 /* NSLayoutConstraint+MFConvenience.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSLayoutConstraint+MFConvenience.m"; sourceTree = ""; }; D29DF11A21E684A9003B2FB9 /* MVMCoreUISplitViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVMCoreUISplitViewController.h; sourceTree = ""; }; D29DF11B21E684A9003B2FB9 /* MVMCoreUISplitViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MVMCoreUISplitViewController.m; sourceTree = ""; }; D29DF11F21E6851E003B2FB9 /* MVMCoreUITopAlertMainView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVMCoreUITopAlertMainView.h; sourceTree = ""; }; @@ -149,8 +159,8 @@ D29DF15321E69760003B2FB9 /* MVMCoreUIPanelButtonProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVMCoreUIPanelButtonProtocol.h; sourceTree = ""; }; D29DF15921E697DA003B2FB9 /* SeparatorView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SeparatorView.h; sourceTree = ""; }; D29DF15A21E697DA003B2FB9 /* SeparatorView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SeparatorView.m; sourceTree = ""; }; - D29DF15F21E69996003B2FB9 /* MFViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MFViewController.m; path = "../../../mobilefirst_ios/mobilefirst/UIKit Objects/MF View Controller Subclasses/MFViewController.m"; sourceTree = ""; }; - D29DF16021E69996003B2FB9 /* MFViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MFViewController.h; path = "../../../mobilefirst_ios/mobilefirst/UIKit Objects/MF View Controller Subclasses/MFViewController.h"; sourceTree = ""; }; + D29DF15F21E69996003B2FB9 /* MFViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFViewController.m; sourceTree = ""; }; + D29DF16021E69996003B2FB9 /* MFViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFViewController.h; sourceTree = ""; }; D29DF16921E69E1F003B2FB9 /* MFCaretButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFCaretButton.h; sourceTree = ""; }; D29DF16A21E69E1F003B2FB9 /* MFCustomButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MFCustomButton.h; sourceTree = ""; }; D29DF16B21E69E1F003B2FB9 /* ButtonDelegateProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ButtonDelegateProtocol.h; sourceTree = ""; }; @@ -226,6 +236,14 @@ D29DF2CD21E7C104003B2FB9 /* MFLoadingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFLoadingViewController.m; sourceTree = ""; }; D29DF2D021E7C1C8003B2FB9 /* MVMAnimationFramework.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MVMAnimationFramework.framework; path = ../SharedFrameworks/MVMAnimationFramework.framework; sourceTree = ""; }; D29DF2E021E9240B003B2FB9 /* MVMCoreUIPanelProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVMCoreUIPanelProtocol.h; sourceTree = ""; }; + D29DF31621ECECC0003B2FB9 /* NHaasGroteskDSStd-45Lt.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "NHaasGroteskDSStd-45Lt.otf"; sourceTree = ""; }; + D29DF31721ECECC0003B2FB9 /* OCRAExtended.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = OCRAExtended.ttf; sourceTree = ""; }; + D29DF31821ECECC0003B2FB9 /* NHaasGroteskDSStd-75Bd.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "NHaasGroteskDSStd-75Bd.otf"; sourceTree = ""; }; + D29DF31921ECECC0003B2FB9 /* NHaasGroteskDSStd-55Rg.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "NHaasGroteskDSStd-55Rg.otf"; sourceTree = ""; }; + D29DF31E21ED0CBA003B2FB9 /* LabelView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LabelView.h; sourceTree = ""; }; + D29DF31F21ED0CBA003B2FB9 /* LabelView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LabelView.m; sourceTree = ""; }; + D29DF32221ED0DA2003B2FB9 /* TextButtonView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TextButtonView.m; sourceTree = ""; }; + D29DF32321ED0DA2003B2FB9 /* TextButtonView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextButtonView.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -261,6 +279,7 @@ D29DF0CE21E404D4003B2FB9 /* MVMCoreUI */ = { isa = PBXGroup; children = ( + D29DF31421ECECA7003B2FB9 /* SupportingFiles */, D29DF26621E6A9E4003B2FB9 /* ThirdParty */, D29DF27021E79B2C003B2FB9 /* OtherHandlers */, D29DF14E21E693BB003B2FB9 /* Session */, @@ -336,10 +355,10 @@ D29DF11021E6805F003B2FB9 /* Categories */ = { isa = PBXGroup; children = ( - D29DF11121E6805F003B2FB9 /* UIColor+MVMCoreUIConvenience.h */, - D29DF11321E6805F003B2FB9 /* UIColor+MVMCoreUIConvenience.m */, - D29DF11221E6805F003B2FB9 /* NSLayoutConstraint+MVMCoreUIConvenience.h */, - D29DF11421E6805F003B2FB9 /* NSLayoutConstraint+MVMCoreUIConvenience.m */, + D29DF11121E6805F003B2FB9 /* UIColor+MFConvenience.h */, + D29DF11321E6805F003B2FB9 /* UIColor+MFConvenience.m */, + D29DF11221E6805F003B2FB9 /* NSLayoutConstraint+MFConvenience.h */, + D29DF11421E6805F003B2FB9 /* NSLayoutConstraint+MFConvenience.m */, ); path = Categories; sourceTree = ""; @@ -439,6 +458,8 @@ D29DF17F21E69E2E003B2FB9 /* MFView.m */, D29DF28521E7AC2B003B2FB9 /* MFLabel.h */, D29DF28621E7AC2B003B2FB9 /* MFLabel.m */, + D29DF31E21ED0CBA003B2FB9 /* LabelView.h */, + D29DF31F21ED0CBA003B2FB9 /* LabelView.m */, D29DF28721E7AC2B003B2FB9 /* ViewConstrainingView.h */, D29DF28821E7AC2B003B2FB9 /* ViewConstrainingView.m */, D29DF26221E6A9D9003B2FB9 /* MFTransparentGIFView.h */, @@ -456,6 +477,8 @@ D29DF2A321E7B29F003B2FB9 /* MFCaretView.m */, D29DF2B121E7B76C003B2FB9 /* MFLoadingSpinner.h */, D29DF2B221E7B76D003B2FB9 /* MFLoadingSpinner.m */, + D29DF32321ED0DA2003B2FB9 /* TextButtonView.h */, + D29DF32221ED0DA2003B2FB9 /* TextButtonView.m */, ); path = Views; sourceTree = ""; @@ -533,6 +556,25 @@ path = TabBarController; sourceTree = ""; }; + D29DF31421ECECA7003B2FB9 /* SupportingFiles */ = { + isa = PBXGroup; + children = ( + D29DF31521ECECC0003B2FB9 /* Fonts */, + ); + path = SupportingFiles; + sourceTree = ""; + }; + D29DF31521ECECC0003B2FB9 /* Fonts */ = { + isa = PBXGroup; + children = ( + D29DF31621ECECC0003B2FB9 /* NHaasGroteskDSStd-45Lt.otf */, + D29DF31721ECECC0003B2FB9 /* OCRAExtended.ttf */, + D29DF31821ECECC0003B2FB9 /* NHaasGroteskDSStd-75Bd.otf */, + D29DF31921ECECC0003B2FB9 /* NHaasGroteskDSStd-55Rg.otf */, + ); + path = Fonts; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -555,7 +597,7 @@ D29DF0D121E404D4003B2FB9 /* MVMCoreUI.h in Headers */, D29DF29A21E7ADB8003B2FB9 /* MFProgrammaticTableViewController.h in Headers */, D29DF25621E6A177003B2FB9 /* MFTextFieldSubclassExtension.h in Headers */, - D29DF11521E6805F003B2FB9 /* UIColor+MVMCoreUIConvenience.h in Headers */, + D29DF11521E6805F003B2FB9 /* UIColor+MFConvenience.h in Headers */, D29DF2BC21E7BEA4003B2FB9 /* TopTabbar.h in Headers */, D29DF25921E6A22D003B2FB9 /* MFButtonProtocol.h in Headers */, D29DF28421E7AB24003B2FB9 /* MVMCoreUICommonViewsUtility.h in Headers */, @@ -566,6 +608,7 @@ D29DF2B321E7B76D003B2FB9 /* MFLoadingSpinner.h in Headers */, D29DF28921E7AC2B003B2FB9 /* MFLabel.h in Headers */, D29DF0E221E4F3B6003B2FB9 /* LargeHeaderSingleLabelViewController.h in Headers */, + D29DF32521ED0DA2003B2FB9 /* TextButtonView.h in Headers */, D29DF25021E6A177003B2FB9 /* MFDigitTextBox.h in Headers */, D29DF2C621E7BF57003B2FB9 /* MFTabBarInteractor.h in Headers */, D29DF25721E6A177003B2FB9 /* MFTextField.h in Headers */, @@ -574,7 +617,7 @@ D29DF26E21E6AA0B003B2FB9 /* FLAnimatedImage.h in Headers */, D29DF17321E69E1F003B2FB9 /* MFCaretButton.h in Headers */, D29DF2A621E7B2A0003B2FB9 /* MFCaretView.h in Headers */, - D29DF11621E6805F003B2FB9 /* NSLayoutConstraint+MVMCoreUIConvenience.h in Headers */, + D29DF11621E6805F003B2FB9 /* NSLayoutConstraint+MFConvenience.h in Headers */, D29DF17721E69E1F003B2FB9 /* MFTextButton.h in Headers */, D29DF16221E69996003B2FB9 /* MFViewController.h in Headers */, D29DF13121E6851E003B2FB9 /* MVMCoreUITopAlertExpandableView.h in Headers */, @@ -582,6 +625,7 @@ D29DF2CA21E7BFC8003B2FB9 /* MFSizeThreshold.h in Headers */, D29DF28021E7AA51003B2FB9 /* MVMCoreUIDetailViewProtocol.h in Headers */, D29DF2BD21E7BEA4003B2FB9 /* MVMCoreUITabBarPageControlViewController.h in Headers */, + D29DF2EE21ECEADF003B2FB9 /* MFFonts.h in Headers */, D29DF12D21E6851E003B2FB9 /* MVMCoreUITopAlertBaseView.h in Headers */, D29DF24E21E6A177003B2FB9 /* MFDigitTextField.h in Headers */, D29DF17421E69E1F003B2FB9 /* MFCustomButton.h in Headers */, @@ -591,6 +635,7 @@ D29DF2A121E7AF4E003B2FB9 /* MVMCoreUIUtility.h in Headers */, D29DF17621E69E1F003B2FB9 /* PrimaryButton.h in Headers */, D29DF2C821E7BFC1003B2FB9 /* MFSizeObject.h in Headers */, + D29DF32021ED0CBA003B2FB9 /* LabelView.h in Headers */, D29DF2E121E9240B003B2FB9 /* MVMCoreUIPanelProtocol.h in Headers */, D29DF12921E6851E003B2FB9 /* MVMCoreUITopAlertMainView.h in Headers */, D29DF12C21E6851E003B2FB9 /* MVMCoreUITopAlertShortView.h in Headers */, @@ -657,7 +702,11 @@ files = ( D29DF25521E6A177003B2FB9 /* MFDigitTextField.xib in Resources */, D29DF2AF21E7B3A4003B2FB9 /* MFTextView.xib in Resources */, + D29DF31C21ECECC0003B2FB9 /* NHaasGroteskDSStd-75Bd.otf in Resources */, D29DF24F21E6A177003B2FB9 /* MFTextField.xib in Resources */, + D29DF31D21ECECC0003B2FB9 /* NHaasGroteskDSStd-55Rg.otf in Resources */, + D29DF31A21ECECC0003B2FB9 /* NHaasGroteskDSStd-45Lt.otf in Resources */, + D29DF31B21ECECC0003B2FB9 /* OCRAExtended.ttf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -668,8 +717,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + D29DF32121ED0CBA003B2FB9 /* LabelView.m in Sources */, D29DF29621E7ADB8003B2FB9 /* StackableViewController.m in Sources */, - D29DF11721E6805F003B2FB9 /* UIColor+MVMCoreUIConvenience.m in Sources */, + D29DF11721E6805F003B2FB9 /* UIColor+MFConvenience.m in Sources */, D29DF25321E6A177003B2FB9 /* MFDigitTextField.m in Sources */, D29DF12F21E6851E003B2FB9 /* MVMCoreUITopAlertMainView.m in Sources */, D29DF17C21E69E1F003B2FB9 /* MFTextButton.m in Sources */, @@ -685,6 +735,7 @@ D29DF26521E6A9D9003B2FB9 /* MFTransparentGIFView.m in Sources */, D29DF13021E6851E003B2FB9 /* MVMCoreUITopAlertShortView.m in Sources */, D29DF26D21E6AA0B003B2FB9 /* FLAnimatedImageView.m in Sources */, + D29DF2EF21ECEAE1003B2FB9 /* MFFonts.m in Sources */, D29DF2AE21E7B3A4003B2FB9 /* MFTextView.m in Sources */, D29DF18121E69E50003B2FB9 /* MFView.m in Sources */, D29DF18321E69E54003B2FB9 /* SeparatorView.m in Sources */, @@ -706,13 +757,14 @@ D29DF29821E7ADB8003B2FB9 /* MFScrollingViewController.m in Sources */, D29DF2AA21E7B2F9003B2FB9 /* MVMCoreUIConstants.m in Sources */, D29DF17821E69E1F003B2FB9 /* MFCaretButton.m in Sources */, - D29DF11821E6805F003B2FB9 /* NSLayoutConstraint+MVMCoreUIConvenience.m in Sources */, + D29DF11821E6805F003B2FB9 /* NSLayoutConstraint+MFConvenience.m in Sources */, D29DF26C21E6AA0B003B2FB9 /* FLAnimatedImage.m in Sources */, D29DF25121E6A177003B2FB9 /* MFDigitTextBox.m in Sources */, D29DF13221E6851E003B2FB9 /* MVMCoreUITopAlertBaseView.m in Sources */, D29DF0E321E4F3B6003B2FB9 /* LargeHeaderSingleLabelViewController.m in Sources */, D29DF29C21E7ADB9003B2FB9 /* MFProgrammaticTableViewController.m in Sources */, D29DF2BE21E7BEA4003B2FB9 /* TopTabbar.m in Sources */, + D29DF32421ED0DA2003B2FB9 /* TextButtonView.m in Sources */, D29DF29E21E7AE3B003B2FB9 /* MFStyler.m in Sources */, D29DF2CB21E7BFCC003B2FB9 /* MFSizeThreshold.m in Sources */, ); diff --git a/MVMCoreUI/Atoms/Buttons/MFCaretButton.h b/MVMCoreUI/Atoms/Buttons/MFCaretButton.h index 602f3341..64bd8a0f 100644 --- a/MVMCoreUI/Atoms/Buttons/MFCaretButton.h +++ b/MVMCoreUI/Atoms/Buttons/MFCaretButton.h @@ -7,7 +7,7 @@ // #import -#import "MFCustomButton.h" +#import @interface MFCaretButton : MFCustomButton @property (nullable, nonatomic, strong) UIView *rightView; diff --git a/MVMCoreUI/Atoms/Buttons/MFCaretButton.m b/MVMCoreUI/Atoms/Buttons/MFCaretButton.m index 40886f39..bd8f058c 100644 --- a/MVMCoreUI/Atoms/Buttons/MFCaretButton.m +++ b/MVMCoreUI/Atoms/Buttons/MFCaretButton.m @@ -8,7 +8,7 @@ #import "MFCaretButton.h" #import "MFCaretView.h" -#import "UIColor+MVMCoreUIConvenience.h" +#import "UIColor+MFConvenience.h" @interface MFCaretButton () diff --git a/MVMCoreUI/Atoms/Buttons/MFCustomButton.h b/MVMCoreUI/Atoms/Buttons/MFCustomButton.h index 22afed15..52a462e9 100644 --- a/MVMCoreUI/Atoms/Buttons/MFCustomButton.h +++ b/MVMCoreUI/Atoms/Buttons/MFCustomButton.h @@ -8,8 +8,8 @@ #import #import -#import "ButtonDelegateProtocol.h" -#import "MFButtonProtocol.h" +#import +#import typedef void (^ButtonTapBlock)(id _Nonnull sender); diff --git a/MVMCoreUI/Atoms/Buttons/MFTextButton.h b/MVMCoreUI/Atoms/Buttons/MFTextButton.h index d5fcd8e7..ef24ea2d 100644 --- a/MVMCoreUI/Atoms/Buttons/MFTextButton.h +++ b/MVMCoreUI/Atoms/Buttons/MFTextButton.h @@ -7,7 +7,7 @@ // #import "MFCustomButton.h" -#import "MFView.h" +#import @class MFSizeObject; @interface MFTextButton : MFCustomButton diff --git a/MVMCoreUI/Atoms/Buttons/MFTextButton.m b/MVMCoreUI/Atoms/Buttons/MFTextButton.m index cf2e0fb5..8dc2ae46 100644 --- a/MVMCoreUI/Atoms/Buttons/MFTextButton.m +++ b/MVMCoreUI/Atoms/Buttons/MFTextButton.m @@ -8,8 +8,8 @@ #import "MFTextButton.h" #import "MFStyler.h" -#import "MFSizeObject.h" -#import "UIColor+MVMCoreUIConvenience.h" +#import +#import "UIColor+MFConvenience.h" #import "MVMCoreUISplitViewController.h" #import #import diff --git a/MVMCoreUI/Atoms/Buttons/PrimaryButton.h b/MVMCoreUI/Atoms/Buttons/PrimaryButton.h index 80d8c33c..b451a196 100644 --- a/MVMCoreUI/Atoms/Buttons/PrimaryButton.h +++ b/MVMCoreUI/Atoms/Buttons/PrimaryButton.h @@ -7,9 +7,9 @@ // #import -#import "MFCustomButton.h" -#import "MFTextField.h" -#import "MFView.h" +#import +#import +#import typedef enum : NSUInteger { PrimaryButtonTypeRed, diff --git a/MVMCoreUI/Atoms/Buttons/PrimaryButton.m b/MVMCoreUI/Atoms/Buttons/PrimaryButton.m index 4371ae76..cffd5f8b 100644 --- a/MVMCoreUI/Atoms/Buttons/PrimaryButton.m +++ b/MVMCoreUI/Atoms/Buttons/PrimaryButton.m @@ -7,12 +7,12 @@ // #import "PrimaryButton.h" -#import "MFSizeObject.h" +#import #import #import #import "MVMCoreUISplitViewController.h" #import "MFStyler.h" -#import "UIColor+MVMCoreUIConvenience.h" +#import "UIColor+MFConvenience.h" @interface PrimaryButton () diff --git a/MVMCoreUI/Atoms/TextFields/MFDigitTextBox.m b/MVMCoreUI/Atoms/TextFields/MFDigitTextBox.m index e3145b4e..49abe4cd 100644 --- a/MVMCoreUI/Atoms/TextFields/MFDigitTextBox.m +++ b/MVMCoreUI/Atoms/TextFields/MFDigitTextBox.m @@ -9,8 +9,8 @@ #import "MFDigitTextBox.h" #import "MFStyler.h" #import "MFFonts.h" -#import "UIColor+MVMCoreUIConvenience.h" -#import "MFSizeObject.h" +#import "UIColor+MFConvenience.h" +#import #import "MVMCoreUISplitViewController.h" #import #import diff --git a/MVMCoreUI/Atoms/TextFields/MFDigitTextField.m b/MVMCoreUI/Atoms/TextFields/MFDigitTextField.m index 463f8171..26b28f08 100644 --- a/MVMCoreUI/Atoms/TextFields/MFDigitTextField.m +++ b/MVMCoreUI/Atoms/TextFields/MFDigitTextField.m @@ -7,14 +7,14 @@ // #import "MFDigitTextField.h" -#import "UIColor+MVMCoreUIConvenience.h" +#import "UIColor+MFConvenience.h" #import "MFTextFieldSubclassExtension.h" #import "MVMCoreUICommonViewsUtility.h" #import "MFStyler.h" #import "StackableViewController.h" #import "MFFonts.h" #import "MFDigitTextBox.h" -#import "MFSizeObject.h" +#import #import "MVMCoreUISplitViewController.h" #import #import "MVMCoreUIUtility.h" diff --git a/MVMCoreUI/Atoms/TextFields/MFMdnTextField.h b/MVMCoreUI/Atoms/TextFields/MFMdnTextField.h index 1a2fb34d..1400a0b6 100644 --- a/MVMCoreUI/Atoms/TextFields/MFMdnTextField.h +++ b/MVMCoreUI/Atoms/TextFields/MFMdnTextField.h @@ -9,7 +9,7 @@ #import #import #import -#import "MFTextField.h" +#import @interface MFMdnTextField : MFTextField diff --git a/MVMCoreUI/Atoms/TextFields/MFMdnTextField.m b/MVMCoreUI/Atoms/TextFields/MFMdnTextField.m index 766d5962..84e0869e 100644 --- a/MVMCoreUI/Atoms/TextFields/MFMdnTextField.m +++ b/MVMCoreUI/Atoms/TextFields/MFMdnTextField.m @@ -10,7 +10,7 @@ #import #import "MVMCoreUICommonViewsUtility.h" #import -#import "UIColor+MVMCoreUIConvenience.h" +#import "UIColor+MFConvenience.h" #import "MVMCoreUIUtility.h" #import "MVMCoreUIConstants.h" diff --git a/MVMCoreUI/Atoms/TextFields/MFTextField.h b/MVMCoreUI/Atoms/TextFields/MFTextField.h index 54efff52..e3e12a04 100644 --- a/MVMCoreUI/Atoms/TextFields/MFTextField.h +++ b/MVMCoreUI/Atoms/TextFields/MFTextField.h @@ -7,7 +7,7 @@ // #import -#import "MFView.h" +#import @class PrimaryButton; @class MFTextField; diff --git a/MVMCoreUI/Atoms/TextFields/MFTextField.m b/MVMCoreUI/Atoms/TextFields/MFTextField.m index 27407fbe..2e41a4ca 100644 --- a/MVMCoreUI/Atoms/TextFields/MFTextField.m +++ b/MVMCoreUI/Atoms/TextFields/MFTextField.m @@ -11,7 +11,7 @@ #import "MFTextFieldSubclassExtension.h" #import #import "MFStyler.h" -#import "UIColor+MVMCoreUIConvenience.h" +#import "UIColor+MFConvenience.h" #import #import "MVMCoreUICommonViewsUtility.h" #import diff --git a/MVMCoreUI/Atoms/TextFields/MFTextFieldSubclassExtension.h b/MVMCoreUI/Atoms/TextFields/MFTextFieldSubclassExtension.h index f1eb18d1..869c11ca 100644 --- a/MVMCoreUI/Atoms/TextFields/MFTextFieldSubclassExtension.h +++ b/MVMCoreUI/Atoms/TextFields/MFTextFieldSubclassExtension.h @@ -6,7 +6,7 @@ // Copyright © 2016 Verizon Wireless. All rights reserved. // -#import "MFTextField.h" +#import @class DashLine; diff --git a/MVMCoreUI/Atoms/Views/DashLine.m b/MVMCoreUI/Atoms/Views/DashLine.m index 1290cce1..0837daa3 100644 --- a/MVMCoreUI/Atoms/Views/DashLine.m +++ b/MVMCoreUI/Atoms/Views/DashLine.m @@ -7,7 +7,7 @@ // #import "DashLine.h" -#import "UIColor+MVMCoreUIConvenience.h" +#import "UIColor+MFConvenience.h" #import @implementation DashLine diff --git a/MVMCoreUI/Atoms/Views/LabelView.h b/MVMCoreUI/Atoms/Views/LabelView.h new file mode 100644 index 00000000..6e20d0b6 --- /dev/null +++ b/MVMCoreUI/Atoms/Views/LabelView.h @@ -0,0 +1,23 @@ +// +// LabelView.h +// myverizon +// +// Created by Scott Pfeil on 12/11/15. +// Copyright © 2015 Verizon Wireless. All rights reserved. +// + +#import +#import +#import + +@interface LabelView : ViewConstrainingView + +// Customize the label. +@property (nullable, weak, nonatomic) MFLabel *label; + +// Change the alignment of the label +- (void)alignLeft; +- (void)alignCenter; +- (void)alignRight; + +@end diff --git a/MVMCoreUI/Atoms/Views/LabelView.m b/MVMCoreUI/Atoms/Views/LabelView.m new file mode 100644 index 00000000..6136e897 --- /dev/null +++ b/MVMCoreUI/Atoms/Views/LabelView.m @@ -0,0 +1,117 @@ +// +// LabelView.m +// myverizon +// +// Created by Scott Pfeil on 12/11/15. +// Copyright © 2015 Verizon Wireless. All rights reserved. +// + +#import +#import "MFStyler.h" +@interface LabelView () + +// Change to customize. +@property (strong, nonatomic) NSLayoutConstraint *alignCenterPin; +@property (strong, nonatomic) NSLayoutConstraint *alignCenterLeftPin; +@property (strong, nonatomic) NSLayoutConstraint *alignCenterRightPin; + +// Sets up the view. +- (void)setupView; + +@end + +@implementation LabelView + +- (void)updateView:(CGFloat)size { + [super updateView:size]; + [self.label updateView:size]; +} + +- (void)setupView { + + if (!self.label) { + self.backgroundColor = [UIColor clearColor]; + + MFLabel *label = [MFLabel commonLabelB2:YES]; + [self addSubview:label]; + self.label = label; + + // Align left and right constants. + NSLayoutConstraint *leftPin = [NSLayoutConstraint constraintWithItem:label attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0]; + self.leftPin = leftPin; + leftPin.active = YES; + + NSLayoutConstraint *topPin = [NSLayoutConstraint constraintWithItem:label attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTop multiplier:1.0 constant:0]; + topPin.priority = 999; + self.topPin = topPin; + topPin.active = YES; + + NSLayoutConstraint *bottomPin = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:label attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0]; + self.bottomPin = bottomPin; + bottomPin.active = YES; + + NSLayoutConstraint *rightPin = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:label attribute:NSLayoutAttributeRight multiplier:1.0 constant:0]; + rightPin.priority = 999; + self.rightPin = rightPin; + rightPin.active = YES; + + // Center alignments + NSLayoutConstraint *alignCenter = [NSLayoutConstraint constraintWithItem:label attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]; + self.alignCenterPin = alignCenter; + alignCenter.active = YES; + + NSLayoutConstraint *centerLeftPin = [NSLayoutConstraint constraintWithItem:label attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:self attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0]; + self.alignCenterLeftPin = centerLeftPin; + centerLeftPin.active = YES; + + NSLayoutConstraint *centerRightPin = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:label attribute:NSLayoutAttributeRight multiplier:1.0 constant:0]; + self.alignCenterRightPin = centerRightPin; + centerRightPin.active = YES; + + [self alignLeft]; + } +} + +- (void)alignLeft { + self.alignCenterPin.active = NO; + self.alignCenterLeftPin.active = NO; + self.alignCenterRightPin.active = NO; + self.leftPin.active = YES; + self.rightPin.active = YES; + self.label.textAlignment = NSTextAlignmentLeft; +} + +- (void)alignCenter { + self.alignCenterPin.active = YES; + self.alignCenterLeftPin.active = YES; + self.alignCenterRightPin.active = YES; + self.leftPin.active = NO; + self.rightPin.active = NO; + self.label.textAlignment = NSTextAlignmentCenter; +} + +- (void)alignRight { + self.alignCenterPin.active = NO; + self.alignCenterLeftPin.active = NO; + self.alignCenterRightPin.active = NO; + self.leftPin.active = YES; + self.rightPin.active = YES; + self.label.textAlignment = NSTextAlignmentRight; +} + +- (void)setLeftPinConstant:(CGFloat)constant { + [super setLeftPinConstant:constant]; + self.alignCenterLeftPin.constant = constant; +} + +- (void)setRightPinConstant:(CGFloat)constant { + [super setRightPinConstant:constant]; + self.alignCenterRightPin.constant = constant; +} + +- (void)resetConstraints { + [super resetConstraints]; + [self alignLeft]; +} + +@end diff --git a/MVMCoreUI/Atoms/Views/MFCaretView.m b/MVMCoreUI/Atoms/Views/MFCaretView.m index b543a3f0..182f7a74 100644 --- a/MVMCoreUI/Atoms/Views/MFCaretView.m +++ b/MVMCoreUI/Atoms/Views/MFCaretView.m @@ -7,7 +7,7 @@ // #import "MFCaretView.h" -#import "UIColor+MVMCoreUIConvenience.h" +#import "UIColor+MFConvenience.h" @interface MFCaretView () @property (strong, nonatomic, readwrite) UIColor *strokeColor; @property (nonatomic) NSNumber *lineWidth; diff --git a/MVMCoreUI/Atoms/Views/MFLabel.m b/MVMCoreUI/Atoms/Views/MFLabel.m index bbc0bc7e..1b7b0860 100644 --- a/MVMCoreUI/Atoms/Views/MFLabel.m +++ b/MVMCoreUI/Atoms/Views/MFLabel.m @@ -8,8 +8,8 @@ #import "MFLabel.h" #import "MFStyler.h" -#import "MFSizeObject.h" -#import "UIColor+MVMCoreUIConvenience.h" +#import +#import "UIColor+MFConvenience.h" #import "MFFonts.h" #import "MVMCoreUISplitViewController.h" #import diff --git a/MVMCoreUI/Atoms/Views/MFLoadImageView.m b/MVMCoreUI/Atoms/Views/MFLoadImageView.m index 02a73da1..c8397fc9 100644 --- a/MVMCoreUI/Atoms/Views/MFLoadImageView.m +++ b/MVMCoreUI/Atoms/Views/MFLoadImageView.m @@ -12,7 +12,7 @@ #import #import #import -#import "NSLayoutConstraint+MVMCoreUIConvenience.h" +#import "NSLayoutConstraint+MFConvenience.h" #import "MVMCoreUIUtility.h" @interface MFLoadImageView () diff --git a/MVMCoreUI/Atoms/Views/MFLoadingSpinner.m b/MVMCoreUI/Atoms/Views/MFLoadingSpinner.m index 1a6d2852..7b354dca 100644 --- a/MVMCoreUI/Atoms/Views/MFLoadingSpinner.m +++ b/MVMCoreUI/Atoms/Views/MFLoadingSpinner.m @@ -7,8 +7,8 @@ // #import "MFLoadingSpinner.h" -#import "UIColor+MVMCoreUIConvenience.h" -#import "NSLayoutConstraint+MVMCoreUIConvenience.h" +#import "UIColor+MFConvenience.h" +#import "NSLayoutConstraint+MFConvenience.h" @interface MFLoadingSpinner () diff --git a/MVMCoreUI/Atoms/Views/MFTextView.m b/MVMCoreUI/Atoms/Views/MFTextView.m index b677a2c3..df4206d7 100644 --- a/MVMCoreUI/Atoms/Views/MFTextView.m +++ b/MVMCoreUI/Atoms/Views/MFTextView.m @@ -7,7 +7,7 @@ // #import "MFTextView.h" -#import "UIColor+MVMCoreUIConvenience.h" +#import "UIColor+MFConvenience.h" #import "MVMCoreUIUtility.h" #import #import "MVMCoreUIConstants.h" diff --git a/MVMCoreUI/Atoms/Views/SeparatorView.h b/MVMCoreUI/Atoms/Views/SeparatorView.h index 464ebbb5..78fe65e8 100644 --- a/MVMCoreUI/Atoms/Views/SeparatorView.h +++ b/MVMCoreUI/Atoms/Views/SeparatorView.h @@ -7,7 +7,7 @@ // #import -#import "MFView.h" +#import @class MFSizeObject; typedef enum : NSUInteger { diff --git a/MVMCoreUI/Atoms/Views/SeparatorView.m b/MVMCoreUI/Atoms/Views/SeparatorView.m index bf406164..98e61f33 100644 --- a/MVMCoreUI/Atoms/Views/SeparatorView.m +++ b/MVMCoreUI/Atoms/Views/SeparatorView.m @@ -7,9 +7,9 @@ // #import "SeparatorView.h" -#import "MFSizeObject.h" +#import #import "MVMCoreUICommonViewsUtility.h" -#import "UIColor+MVMCoreUIConvenience.h" +#import "UIColor+MFConvenience.h" @interface SeparatorView() diff --git a/MVMCoreUI/Atoms/Views/TextButtonView.h b/MVMCoreUI/Atoms/Views/TextButtonView.h new file mode 100644 index 00000000..0d4a6995 --- /dev/null +++ b/MVMCoreUI/Atoms/Views/TextButtonView.h @@ -0,0 +1,31 @@ +// +// TextButtonView.h +// myverizon +// +// Created by Scott Pfeil on 12/11/15. +// Copyright © 2015 Verizon Wireless. All rights reserved. +// + +#import +#import +#import + +@interface TextButtonView : ViewConstrainingView + +@property (nullable, weak, nonatomic) MFTextButton *textButton; +@property (nullable, weak, nonatomic) MFTextButton *secondaryTextButton; + +// Any standard init creates a single button. + +// inits with two buttons. +- (nullable instancetype)initWithTwoButtons; + +// Change the alignment of the button. Default is left. +- (void)alignLeft; +- (void)alignCenter; +- (void)alignRight; + +// To add dotted underline below text button, in case of one button +- (void)addDotLineBelowButton; + +@end diff --git a/MVMCoreUI/Atoms/Views/TextButtonView.m b/MVMCoreUI/Atoms/Views/TextButtonView.m new file mode 100644 index 00000000..7c9f5e23 --- /dev/null +++ b/MVMCoreUI/Atoms/Views/TextButtonView.m @@ -0,0 +1,196 @@ +// +// TextButtonView.m +// myverizon +// +// Created by Scott Pfeil on 12/11/15. +// Copyright © 2015 Verizon Wireless. All rights reserved. +// + +#import "TextButtonView.h" +#import +#import "MVMCoreUICommonViewsUtility.h" +#import "NSLayoutConstraint+MFConvenience.h" + +#import + +@interface TextButtonView () + +@property (weak, nonatomic) NSLayoutConstraint *alignCenterPin; +@property (weak, nonatomic) NSLayoutConstraint *alignCenterLeftPin; +@property (weak, nonatomic) NSLayoutConstraint *alignCenterRightPin; +@property (strong, nonatomic) UIView *dotLine; + +// Sets up the view. +- (void)setupView; + +@end + +@implementation TextButtonView + +#pragma mark - Dotted line helpers + +- (void)updateDottedLine { + [self layoutIfNeeded]; + CAShapeLayer *dotLineShapeLayer = [CAShapeLayer layer]; + [dotLineShapeLayer setBounds:self.dotLine.bounds]; + [dotLineShapeLayer setPosition:self.dotLine.center]; + [dotLineShapeLayer setFillColor:[[UIColor clearColor] CGColor]]; + [dotLineShapeLayer setStrokeColor:[[UIColor mfTextButtonColor] CGColor]]; + [dotLineShapeLayer setLineWidth:1.0f]; + [dotLineShapeLayer setLineJoin:kCALineJoinRound]; + [dotLineShapeLayer setLineCap:kCALineCapRound]; + [dotLineShapeLayer setLineDashPattern:@[@2,@2]]; + CGMutablePathRef signOutpath = CGPathCreateMutable(); + CGPathMoveToPoint(signOutpath, NULL, -self.dotLine.frame.origin.x, -self.dotLine.frame.origin.y); + CGPathAddLineToPoint(signOutpath, NULL, -self.dotLine.frame.origin.x+self.dotLine.frame.size.width,-self.dotLine.frame.origin.y); + [dotLineShapeLayer setPath:signOutpath]; + CGPathRelease(signOutpath); + self.dotLine.layer.sublayers = nil; + [self.dotLine.layer addSublayer:dotLineShapeLayer]; +} + +- (void)addDotLineBelowButton { + UIView *dotLine = [MVMCoreUICommonViewsUtility commonView]; + [self.textButton addSubview:dotLine]; + self.dotLine = dotLine; + [NSLayoutConstraint constraintPinView:dotLine heightConstraint:YES heightConstant:1 widthConstraint:NO widthConstant:0]; + [NSLayoutConstraint constraintPinSubview:dotLine pinTop:NO pinBottom:YES pinLeft:YES pinRight:YES]; + dotLine.userInteractionEnabled = NO; + [self updateDottedLine]; +} + +#pragma mark- View Cycle + +- (void)updateView:(CGFloat)size { + [super updateView:size]; + [self.textButton updateView:size]; + [self.secondaryTextButton updateView:size]; + [self updateDottedLine]; +} + +- (void)setupView { + + if (!self.textButton) { + self.backgroundColor = [UIColor clearColor]; + self.translatesAutoresizingMaskIntoConstraints = NO; + + MFTextButton *button = [MFTextButton textButton:nil constrainHeight:YES forWidth:CGFLOAT_MIN]; + button.translatesAutoresizingMaskIntoConstraints = NO; + [self addSubview:button]; + self.textButton = button; + + // Align left and right constants. + NSLayoutConstraint *leftPin = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0]; + self.leftPin = leftPin; + leftPin.active = YES; + + NSLayoutConstraint *topPin = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTop multiplier:1.0 constant:0]; + self.topPin = topPin; + topPin.active = YES; + + NSLayoutConstraint *bottomPin = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:button attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0]; + self.bottomPin = bottomPin; + bottomPin.active = YES; + + NSLayoutConstraint *rightPin = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:button attribute:NSLayoutAttributeRight multiplier:1.0 constant:0]; + self.rightPin = rightPin; + rightPin.active = YES; + + // Center alignments + NSLayoutConstraint *alignCenter = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]; + self.alignCenterPin = alignCenter; + alignCenter.active = YES; + + NSLayoutConstraint *centerLeftPin = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:self attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0]; + self.alignCenterLeftPin = centerLeftPin; + centerLeftPin.active = YES; + + NSLayoutConstraint *centerRightPin = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:button attribute:NSLayoutAttributeRight multiplier:1.0 constant:0]; + self.alignCenterRightPin = centerRightPin; + centerRightPin.active = YES; + + [self alignLeft]; + } +} + +- (instancetype)initWithTwoButtons { + + if (self = [super init]) { + if (!self.secondaryTextButton) { + + if (self.textButton) { + [self.textButton removeFromSuperview]; + } + + MFTextButton *leftButton = [MFTextButton textButton:nil constrainHeight:YES forWidth:CGFLOAT_MIN]; + leftButton.translatesAutoresizingMaskIntoConstraints = NO; + [self addSubview:leftButton]; + self.textButton = leftButton; + + MFTextButton *rightButton = [MFTextButton textButton:nil constrainHeight:YES forWidth:CGFLOAT_MIN]; + rightButton.translatesAutoresizingMaskIntoConstraints = NO; + [self addSubview:rightButton]; + self.secondaryTextButton = rightButton; + + NSLayoutConstraint *leftPin = [NSLayoutConstraint constraintWithItem:leftButton attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0]; + self.leftPin = leftPin; + leftPin.active = YES; + + NSLayoutConstraint *topPin = [NSLayoutConstraint constraintWithItem:leftButton attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTop multiplier:1.0 constant:0]; + self.topPin = topPin; + topPin.active = YES; + + NSLayoutConstraint *bottomPin = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:leftButton attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0]; + self.bottomPin = bottomPin; + bottomPin.active = YES; + + NSLayoutConstraint *rightPin = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:rightButton attribute:NSLayoutAttributeRight multiplier:1.0 constant:0]; + self.rightPin = rightPin; + rightPin.active = YES; + + [NSLayoutConstraint activateConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[leftButton]->=10-[rightButton]" options:NSLayoutFormatAlignAllCenterY metrics:nil views:NSDictionaryOfVariableBindings(leftButton,rightButton)]]; + } + } + return self; +} + +- (void)alignLeft { + self.alignCenterPin.active = NO; + self.alignCenterLeftPin.active = NO; + self.alignCenterRightPin.active = YES; + self.leftPin.active = YES; + self.rightPin.active = NO; +} + +- (void)alignCenter { + self.alignCenterPin.active = YES; + self.alignCenterLeftPin.active = YES; + self.alignCenterRightPin.active = YES; + self.leftPin.active = NO; + self.rightPin.active = NO; +} + +- (void)alignRight { + self.alignCenterPin.active = NO; + self.alignCenterLeftPin.active = YES; + self.alignCenterRightPin.active = NO; + self.leftPin.active = NO; + self.rightPin.active = YES; +} + +- (void)setLeftPinConstant:(CGFloat)constant { + [super setLeftPinConstant:constant]; + self.alignCenterLeftPin.constant = constant; +} + +- (void)setRightPinConstant:(CGFloat)constant { + [super setRightPinConstant:constant]; + self.alignCenterRightPin.constant = constant; +} + +- (void)resetConstraints { + [super resetConstraints]; + [self alignLeft]; +} + +@end diff --git a/MVMCoreUI/BaseControllers/MFLoadingViewController.m b/MVMCoreUI/BaseControllers/MFLoadingViewController.m index a54ccc40..c44dd76f 100644 --- a/MVMCoreUI/BaseControllers/MFLoadingViewController.m +++ b/MVMCoreUI/BaseControllers/MFLoadingViewController.m @@ -8,8 +8,8 @@ #import "MFLoadingViewController.h" #import "MFLoadingSpinner.h" -#import "NSLayoutConstraint+MVMCoreUIConvenience.h" -#import "UIColor+MVMCoreUIConvenience.h" +#import "NSLayoutConstraint+MFConvenience.h" +#import "UIColor+MFConvenience.h" #import "MFStyler.h" #import "MVMCoreUICommonViewsUtility.h" diff --git a/MVMCoreUI/BaseControllers/MFProgrammaticTableViewController.m b/MVMCoreUI/BaseControllers/MFProgrammaticTableViewController.m index 1b1b469f..ba7df785 100644 --- a/MVMCoreUI/BaseControllers/MFProgrammaticTableViewController.m +++ b/MVMCoreUI/BaseControllers/MFProgrammaticTableViewController.m @@ -7,7 +7,7 @@ // #import "MFProgrammaticTableViewController.h" -#import "NSLayoutConstraint+MVMCoreUIConvenience.h" +#import "NSLayoutConstraint+MFConvenience.h" #import @import MVMAnimationFramework; diff --git a/MVMCoreUI/BaseControllers/MFScrollingViewController.m b/MVMCoreUI/BaseControllers/MFScrollingViewController.m index e23695a6..5c56998f 100644 --- a/MVMCoreUI/BaseControllers/MFScrollingViewController.m +++ b/MVMCoreUI/BaseControllers/MFScrollingViewController.m @@ -12,7 +12,7 @@ #import #import #import -#import "NSLayoutConstraint+MVMCoreUIConvenience.h" +#import "NSLayoutConstraint+MFConvenience.h" #import #import "MVMCoreUIUtility.h" #import "MVMCoreUIConstants.h" diff --git a/MVMCoreUI/BaseControllers/MFViewController.h b/MVMCoreUI/BaseControllers/MFViewController.h new file mode 100644 index 00000000..b7df0bef --- /dev/null +++ b/MVMCoreUI/BaseControllers/MFViewController.h @@ -0,0 +1,290 @@ +// +// MFViewController.h +// myverizon +// +// Created by Scott Pfeil on 11/26/13. +// Copyright (c) 2013 Verizon Wireless. All rights reserved. +// +// The base view controller. Any view controller that is part of the app flow should be subclassed from this object. + +#import +#import +#import +#import +#import +#import +#import + +#import +#import +#import +#import +#import +#import + +#import +#import + +@class MainMenuViewController; +@class MVMCoreUITabBarPageControlViewController; +@class MVMAnimationManager; + +@interface MFViewController : UIViewController + +// Stores the load object that this screen was loaded with. +@property (nullable, strong, nonatomic) MVMCoreLoadObject *loadObject; + +// The current selected text field. +@property (nullable, weak, nonatomic) __block id selectedField; + +// Flags for if the master and support should be accessible. These are set initially and then checked everytime view will appear to make sure that the support and master buttons are showing if they should be. +// ** When set, they will update the support and master buttons +@property (nonatomic) BOOL masterShouldBeAccessible; +@property (nonatomic) BOOL supportShouldBeAccessible; +@property (nonatomic) BOOL cartShouldBeAccessible; +@property (nonatomic) BOOL communityShouldBeAccessible; +@property (nonatomic) BOOL closeButtonAccessible; + +// A flag for if we need to update the UI or not next time viewDidLayoutSubviews is called. +@property (nonatomic) BOOL needToUpdateUI; + +// flag used to tell if we need to updateViews based on rotation. +@property (nonatomic) BOOL needToupdateUIOnScreenSizeChanges; + + +// A flag for if this viewControler should trigger MFAnimationController's StartAnimations in viewDidAppear +@property (nonatomic) BOOL shouldTriggerStartAnimations; + +// The page type for this screen. +@property (nullable, strong, nonatomic) NSString *pageType; + +// Set if this page is containted in a tab bar page control. +@property (nullable, weak, nonatomic) MVMCoreUITabBarPageControlViewController *tabBarPageControl; + +/* The bottom progress view that is shown in the shop flow */ +@property (nullable, nonatomic, strong) UIProgressView *progressView; + +// a flag that tells the view controller's view will appear not trying to load specaill support icon +@property (assign, nonatomic) BOOL DontChangeSpecialSupportIcon; + +// The size of the previous screen configuration. Updates each rotate. +@property (nonatomic) CGSize previousScreenSize; + +// The current top alert showing page type +@property (nullable, nonatomic, strong) NSString *currentTopAlertPageType; + +#pragma mark - Helpers + +// Dismisses this screen. +- (void)dismiss; + +// Checks if this view controller is the visible one (not necessarily visible to user, but for the app). +- (BOOL)isVisibleViewController; + +// Registers the text field for the error key so that if there is a text field error with this key, the textfield will show the error. +- (void)registerTextField:(nonnull MFTextField *)textField forErrorKey:(nonnull NSString *)errorKey; + +// Returns if the screen size has changed. +- (BOOL)screenSizeChanged; + +#pragma mark - Functions To Subclass + +// This view controller should subclass this function and check the load to make sure it has all the needed data. Fills the error object if there are any errors. Returns if we should finish the load or not. +- (BOOL)shouldFinishProcessingLoad:(nonnull MVMCoreLoadObject *)loadObject error:(MVMCoreErrorObject *_Nonnull *_Nonnull)error; + +// Sets the screen to use the screen heading. +// it is required in device flow, where we are showing greeting name as screen heading, +// device details screen heading needs to be updated/refreshed again, if user has changed device nick name +- (nullable NSString *)screenHeading; + +// properly set the screen heading message +- (void)setScreenHeadingMessage:(nullable NSString *)screenHeadingMessage; + +// There is new data and we need to reset the data for the screen. Refresh all logic based on json dictionary. Can put most view creation logic in here. +- (void)newDataBuildScreen; + +// A function that gets called on only the initial load. Meant for subclassing. +- (void)initialLoad __attribute__((objc_requires_super)); + +// Subclass this function to layout any subviews here. Update constraints based on the screen in here. +- (void)updateViews; + +// Called when the back button is pressed. Overwrite for special functionality. Default is to just popviewcontroller. +- (void)backButtonPressed; + +// Called when the close button is pressed. +- (void)closeButtonPressed; + +// Handles the error. Logs and shows to screen. +- (void)handleErrorAsPopup:(nonnull MVMCoreErrorObject *)error; + +// Can override the standard tab page control to not cache in tab. You should be following proper caching techniques (caching, updating when needed, deleting when needed), so this should be a last resort. +- (BOOL)shouldCacheInTabPageControl; + +#pragma mark - Response Handling + +// Called to begin observing for json updates. Called by default in view did load if pageTypesToListenFor returns an array with page types. +- (void)observeForResponseJSONUpdates; + +// Stops observing for json objects. +- (void)stopObservingForResponseJSONUpdates; + +// Returns an array of page types to observe for when we receive a response with JSON. Subclass this to have the ui update when the returned page types are cached. +- (nullable NSArray *)pageTypesToListenFor; + +// Returns an array of modules to observe for when we receive a response with JSON. Subclass this to have the ui update when the returned page types are cached. +- (nullable NSArray *)modulesToListenFor; + +// The function that gets called by the notification center when the JSON is updated. +- (void)responseJSONUpdated:(nonnull NSNotification *)notification; + +// Updates the json dictionary and the screen with the passed in dictionary. Subclass to get any custom behavior if necessary. +- (void)updateWithResponsePage:(nullable NSDictionary *)page modules:(nullable NSDictionary *)modules; + +#pragma mark - Navigation Item, Menu, Support, Top Alert + +// overide to set the navigation bar tint color +- (nullable UIColor *)navigationBarTintColor; + +// Sets the navigation bar color when the screen is loaded. Can be subclassed to change this logic. +- (nonnull UIColor *)navigationBarColor; + +// Default is no. +- (BOOL)navigationBarHidden; + +// Default is no. +- (BOOL)navigationBarTransparent; + +// Handles the navigation bar ui. +- (void)updateNavigationBarUI:(nonnull UINavigationController *)navigationController; + +// Returns if the master panel is initially accessible or not. This is always true in the base class. Subclass to override. +- (BOOL)isMasterInitiallyAccessible; + +// Returns if the support panel is initially accessible or not. This is always true in the base class. Subclass to override. +- (BOOL)isSupportInitiallyAccessible; + +// This returns a server driven flag. By default we don't show support before launchapp unless server says otherwise. +- (BOOL)showRightPanelForScreenBeforeLaunchApp; + +// Called when the user presses a menu option. Determines if we should load the option the default way or not. +- (BOOL)mainTableView:(nonnull MainMenuViewController *)mainTableView shouldSelectOptionAtIndexPath:(nonnull NSIndexPath *)indexPath; + +// applies an image to the navigation title +-(void)createTitleWithImageName:(nullable NSString *)imageName; + +#pragma mark - UITextField Functions + +// Resigns the first responder. +- (IBAction)textFieldDoneEditing:(nullable id)sender; + +// Dismisses the keyboard. +- (void)dismissFieldInput:(nullable id)sender; + +#pragma mark - TableView + +// For subclassing, returns the number of sections for table. Use this function instead of numberOfSectionsForTableview. +- (NSInteger)getNumberOfSections; + +#pragma mark - ButtonDelegateProtocol + +// Returns YES by default. +- (BOOL)button:(nonnull NSObject *)button shouldPerformActionWithMap:(nullable NSDictionary *)actionMap additionalData:(nullable NSDictionary *)additionalData; + +#pragma mark - MVMCoreActionDelegateProtocol + +// track the action which is fired +- (void)logActionWithActionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData; + +// Asks the load handler to load. standard. +- (void)handleOpenPageForRequestParameters:(nonnull MVMCoreRequestParameters *)requestParameters actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData NS_REQUIRES_SUPER; + +// Calls dismiss +- (void)handleBackAction:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData; + +// This will try to load the previous submission by default and append any additional data. +- (void)prepareRequestForPreviousSubmission:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData submit:(nonnull void (^)(MVMCoreRequestParameters * _Nonnull requestParameters, NSDictionary * _Nullable dataForPage))submit; + +// Does nothing at the moment. +- (void)willShowPopupWithAlertObject:(nonnull MVMCoreAlertObject *)alertObject alertJson:(nonnull NSDictionary *)alertJson; + +// Handle cancel +- (void)handleCancel:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData; + +// Calls the default. See MVMCoreActionHandler +- (void)handleUnknownActionType:(nullable NSString *)actionType actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData; + +// Calls the default. See MVMCoreActionHandler +- (void)handleActionError:(nonnull MVMCoreErrorObject *)error additionalData:(nullable NSDictionary *)additionalData; + +// Does nothing +- (void)prepareForOpenOtherAppModule:(nullable NSString *)module; + +#pragma mark - MVMCoreLoadDelegateProtocol + +/////----------------------------------------------------------------------------------- +// Standard Protocol Functions (refer to the MVMCoreLoadDelegateProtocol for more. +// Listed here in the .h so subclass could call [super] if need be. + +// By default, returns YES. +- (BOOL)shouldContinueToErrorPage:(nonnull MVMCoreLoadObject *)loadObject error:(nullable MVMCoreErrorObject *)error; + +// Calls the default, see LoadHandler. +- (BOOL)handleModuleError:(nonnull NSString *)module loadObject:(nonnull MVMCoreLoadObject *)loadObject error:(nonnull MVMCoreErrorObject *)error; + +// By default, lets the alert object handle showing itself. +- (nullable MVMCoreAlertObject *)alertObjectToShow:(nonnull MVMCoreLoadObject *)loadObject error:(nullable MVMCoreErrorObject *)errorObject; + +// By default, goes through all of the fields register with registerTextField and sets the error for them if needed. +- (void)handleFieldErrors:(nullable NSArray *)fieldErrors loadObject:(nonnull MVMCoreLoadObject *)loadObject; + +// Calls the default, see LoadHandler. +- (void)loadFinished:(nullable MVMCoreLoadObject *)loadObject loadedViewController:(nullable MFViewController *)loadedViewController error:(nullable MVMCoreErrorObject *)error __attribute__((objc_requires_super)); + +// By default, does nothing. +- (void)loadCancelled:(nullable MVMCoreLoadObject *)loadObject; + +#pragma mark - adobe analytics + +// add any addtional track data for the action that is fired with the main action informaiton. +- (nullable NSArray *)additionalActionsToTrackWithMainActionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData; + +// Returns action track data, it can be overrided for customization +- (nullable NSDictionary *)getActionTrackDataDictionaryForActionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData; + +// Initiates track page state +- (void)adobeTrackPageState; + +// can be subclassed to return any additional data for action tracking +- (nullable NSDictionary *)additionalDataToTrackActionWithActionInformation:(nullable NSDictionary *)actionInformation; + +// can be subclassed to return any additional data for page tracking +- (nullable NSDictionary *)additionalDataToTrackForPage; + +// can be subclased to return dynamic pagename values for page tracking +- (nullable NSArray *)dynamicPageNameValuesToTrackPage; + +#pragma mark - review app pop up + +//client side logic to prevent review app, it should only be configured for extra client logic to show or not show review app pop up +- (BOOL)shouldReviewApp; + +#pragma mark - extra logic for support + +- (nullable NSDictionary *)extraStartInfoForSupport; + +#pragma mark - Animation + +// main manager used for intro animations +@property (nullable, strong, nonatomic) MVMAnimationManager *introAnimationManager; +// property to check if controller has animations disabled +@property (assign) BOOL disableAnimations; + +// subclass to set up intro animations +- (void)setupIntroAnimations; + +// can be overriden to return the close button action map +- (nullable NSDictionary *)closeButtonActionMap; + +@end + diff --git a/MVMCoreUI/BaseControllers/MFViewController.m b/MVMCoreUI/BaseControllers/MFViewController.m new file mode 100644 index 00000000..fe6729d5 --- /dev/null +++ b/MVMCoreUI/BaseControllers/MFViewController.m @@ -0,0 +1,808 @@ +// +// MFViewController.m +// myverizon +// +// Created by Scott Pfeil on 11/26/13. +// Copyright (c) 2013 Verizon Wireless. All rights reserved. +// + +#import "MFViewController.h" +#import +#import +#import +#import "MVMCoreUISplitViewController.h" +#import +#import +#import "MVMCoreUITabBarPageControlViewController.h" +#import +#import "MFLoadImageView.h" +#import "MFFonts.h" +#import +#import +#import +#import +#import +#import +#import +#import +#import "NSLayoutConstraint+MFConvenience.h" +#import "UIColor+MFConvenience.h" +#import "MVMCoreUICommonViewsUtility.h" +#import "MFStyler.h" +#import "MVMCoreUIUtility.h" +#import "MVMCoreUIConstants.h" +#import "MVMCoreUISession.h" +#import "MVMCoreUILoggingHandler.h" + +@import MVMAnimationFramework; + +@interface MFViewController () + +// A flag for if this view controller is observing for cache updates or not. +@property (nonatomic) BOOL observingForResponseJSONUpdates; + +// A flag for if the initial load is finished or not. +@property (nonatomic) BOOL initialLoadFinished; + +// A mapping for mapping text fields for error keys +@property (strong, nonatomic) NSMutableDictionary *textFieldErrorMapping; + +// title view for navigation bar, used for custom navigation titles +@property (weak, nonatomic) UILabel *titleLabel; + +@end + +@implementation MFViewController + +- (void)dismiss { + if (self.presentingViewController) { + [[MVMCoreNavigationHandler sharedNavigationHandler] dismissViewController:self animated:YES]; + } else if (self.navigationController) { + [[MVMCoreNavigationHandler sharedNavigationHandler] popViewController:self animated:YES]; + } +} + +- (BOOL)isVisibleViewController { + return ((self.presentingViewController && !self.presentedViewController) || [self.navigationController topViewController] == self); +} + +- (void)registerTextField:(nonnull MFTextField *)textField forErrorKey:(nonnull NSString *)errorKey { + + if (!self.textFieldErrorMapping) { + self.textFieldErrorMapping = [NSMutableDictionary dictionary]; + } + [self.textFieldErrorMapping setObject:textField forKey:errorKey]; +} + +- (BOOL)screenSizeChanged { + return !CGSizeEqualToSize(self.previousScreenSize, CGSizeZero) && !fequalwiththreshold(self.previousScreenSize.width, self.view.bounds.size.width, .1); +} + +#pragma mark - Functions To Subclass + +- (BOOL)shouldFinishProcessingLoad:(nonnull MVMCoreLoadObject *)loadObject error:(MVMCoreErrorObject *_Nonnull *_Nonnull)error { + self.loadObject = loadObject; + self.pageType = loadObject.pageType; + return YES; +} + +// Sets the screen to use the screen heading. +// it is required in device flow, where we are showing greeting name as screen heading, +// device details screen heading needs to be updated/refreshed again, if user has changed device nick name +- (NSString *)screenHeading { + NSString *screenHeading = [self.loadObject.pageJSON string:KeyScreenHeading]; + return screenHeading; +} + +- (void)setScreenHeadingMessage:(nullable NSString *)screenHeadingMessage { + + if (screenHeadingMessage.length > 0) { + if (self.titleLabel) { + self.titleLabel.text = screenHeadingMessage; + } else { + self.navigationItem.title = screenHeadingMessage; + } + self.navigationItem.title = screenHeadingMessage; + self.navigationItem.accessibilityLabel = screenHeadingMessage; + if (self.navigationItem.titleView) { + self.navigationItem.titleView.accessibilityLabel = screenHeadingMessage; + } + } +} + +- (BOOL)checkforHeaderImage { + return [self.loadObject.pageJSON stringForKey:@"headerLogo"].length; +} + +-(void)createTitleWithImageName:(nullable NSString *)imageName { + UIView *titleView = [[UIView alloc] init]; + titleView.bounds = CGRectMake(CGRectGetMaxX(titleView.bounds), CGRectGetMaxY(titleView.bounds), 1, 1); + UIImageView *imageView = [[UIImageView alloc] initWithImage:[MVMCoreUIUtility imageNamed:imageName]]; + imageView.translatesAutoresizingMaskIntoConstraints = NO; + imageView.contentMode = UIViewContentModeScaleAspectFit; + [titleView addSubview:imageView]; + [NSLayoutConstraint constraintPinSubviewToSuperview:imageView]; + [NSLayoutConstraint constraintPinView:imageView heightConstraint:YES heightConstant:12 widthConstraint:YES widthConstant:127]; + // + [NSLayoutConstraint constraintPinView:titleView heightConstraint:YES heightConstant:1 widthConstraint:YES widthConstant:1]; + + [NSLayoutConstraint constraintPinSubview:imageView pinCenterX:YES pinCenterY:YES]; + + titleView.isAccessibilityElement = YES; + titleView.accessibilityLabel = [self screenHeading]; + titleView.accessibilityTraits = UIAccessibilityTraitHeader; + self.navigationItem.titleView = titleView; + +} + +- (void)newDataBuildScreen { + if ([self checkforHeaderImage]) { + // user header image + [self createTitleWithImageName:[self.loadObject.pageJSON stringForKey:@"headerLogo"]]; + } else { + // Sets the screen to use the screen heading. + NSString *screenHeading = [self screenHeading]; + + if (screenHeading) { + [self setScreenHeadingMessage:screenHeading]; + } + } +} + +- (void)initialLoad { + + // Creates an initial load object if needed. + if (!self.loadObject) { + self.loadObject = [[MVMCoreLoadObject alloc] initWithDelegate:self]; + } + + // Avoid the setter so we are only setting the bool and wait for view will appear to update the navigation bar. + _masterShouldBeAccessible = [self isMasterInitiallyAccessible]; + _supportShouldBeAccessible = [self isSupportInitiallyAccessible]; + + // Observe for cache updates if desired. + [self observeForResponseJSONUpdates]; +} + +- (void)updateViews { + +} + +- (void)backButtonPressed { + + // Sends keep alive to the server. + [[MVMCoreSessionTimeHandler sharedSessionHandler] sendKeepAliveToServer:NO]; + [[MVMCoreNavigationHandler sharedNavigationHandler] popViewController:(self.tabBarPageControl ?: self) animated:YES]; +} + +- (void)closeButtonPressed { + // TODO: Handle close button action with action map +} + +- (void)handleErrorAsPopup:(nonnull MVMCoreErrorObject *)error { + + // Logs the error. + if (error.logError) { + [MVMCoreLoggingHandler addErrorToLog:error]; + } + + MVMCoreLog(@"Error: %@ %@ %@ %@",[error stringErrorCode], error.domain, error.location,error.messageToDisplay); + if (!error.silentError) { + + // Show alert + MVMCoreAlertObject *alertObject = [[MVMCoreAlertObject alloc] initPopupAlertWithError:error isGreedy:NO]; + [[MVMCoreAlertHandler sharedAlertHandler] showAlertWithAlertObject:alertObject]; + } +} + +- (BOOL)shouldCacheInTabPageControl { + return YES; +} + +#pragma mark - Response Handling + +- (void)observeForResponseJSONUpdates { + if (!self.observingForResponseJSONUpdates && (self.pageTypesToListenFor.count > 0 || self.modulesToListenFor.count > 0)) { + self.observingForResponseJSONUpdates = YES; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(responseJSONUpdated:) name:NotificationResponseLoaded object:nil]; + } +} + +- (void)stopObservingForResponseJSONUpdates { + if (self.observingForResponseJSONUpdates) { + [[NSNotificationCenter defaultCenter] removeObserver:self name:NotificationResponseLoaded object:nil]; + self.observingForResponseJSONUpdates = NO; + } +} + +- (nullable NSArray *)pageTypesToListenFor { + return nil; +} + +- (nullable NSArray *)modulesToListenFor { + return nil; +} + +- (void)responseJSONUpdated:(nonnull NSNotification *)notification { + + // Checks for a page we are listening for. + NSArray *pageTypesListeningFor = [self pageTypesToListenFor]; + NSDictionary *pages = [notification.userInfo dict:KeyPageMap]; + __block NSDictionary *pageUpdated = nil; + [pageTypesListeningFor enumerateObjectsUsingBlock:^(NSString * _Nonnull pageToListenFor, NSUInteger idx, BOOL * _Nonnull stop) { + NSDictionary *page = [pages dict:pageToListenFor]; + if (page) { + pageUpdated = page; + *stop = YES; + } + }]; + + // Checks for modules we are listening for. + NSArray *modulesListeningFor = [self modulesToListenFor]; + NSDictionary *modules = [notification.userInfo dict:KeyModuleMap]; + __block NSMutableDictionary *modulesUpdated = [NSMutableDictionary dictionary]; + [modulesListeningFor enumerateObjectsUsingBlock:^(NSString * _Nonnull moduleToListenFor, NSUInteger idx, BOOL * _Nonnull stop) { + NSDictionary *module = [modules dict:moduleToListenFor]; + if (module) { + [modulesUpdated setObject:module forKey:moduleToListenFor]; + } + }]; + + [self updateWithResponsePage:pageUpdated modules:modulesUpdated]; +} + +- (void)updateWithResponsePage:(nullable NSDictionary *)page modules:(nullable NSDictionary *)modules { + + if (page || modules.count > 0) { + + [MVMCoreDispatchUtility performBlockOnMainThread:^{ + + if (modules) { + if (self.loadObject.modulesJSON) { + NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithDictionary:self.loadObject.modulesJSON]; + [mutableDictionary addEntriesFromDictionary:modules]; + self.loadObject.modulesJSON = [NSDictionary dictionaryWithDictionary:mutableDictionary]; + } else { + self.loadObject.modulesJSON = modules; + } + } + + if (page) { + self.loadObject.pageJSON = page; + } + + [self newDataBuildScreen]; + self.needToUpdateUI = YES; + [self.view setNeedsLayout]; + [self.view layoutIfNeeded]; + }]; + } +} + +#pragma mark - Navigation Item, Menu, Support + +- (nonnull UIColor *)navigationBarColor { + return [UIColor whiteColor]; +} + +- (BOOL)navigationBarHidden { + return NO; +} + +- (BOOL)navigationBarTransparent { + return NO; +} + +- (void)updateNavigationBarUI:(nonnull UINavigationController *)navigationController { + if (navigationController) { + [navigationController setNavigationBarHidden:[self navigationBarHidden] animated:NO]; + + [UIColor mfSetBackgroundColorForNavigationBar:[self navigationBarColor] navigationBar:navigationController.navigationBar transparent:[self navigationBarTransparent]]; + + UIColor *navigationBarTintColor = [self navigationBarTintColor] ?: [UIColor blackColor]; + navigationController.navigationBar.tintColor = navigationBarTintColor; + + // Have the navigation title match the tint color + if (self.titleLabel) { + self.titleLabel.textColor = navigationBarTintColor; + } else { + NSMutableDictionary *attributes = [[NSMutableDictionary alloc] initWithDictionary:navigationController.navigationBar.titleTextAttributes]; + [attributes setObject:navigationBarTintColor forKey:NSForegroundColorAttributeName]; + navigationController.navigationBar.titleTextAttributes = attributes; + } + + if (navigationController == [MVMCoreUISplitViewController mainSplitViewController].navigationController) { + // Update icons if main navigation controller. + [self setMasterShouldBeAccessible:self.masterShouldBeAccessible]; + [self setSupportShouldBeAccessible:self.supportShouldBeAccessible]; + [self showBottomProgressBar]; + [[MVMCoreUISession sharedGlobal].splitViewController setNavigationIconColor:navigationBarTintColor]; + + // Update separator. + UIView *separatorView = (UIView *)[MVMCoreUISession sharedGlobal].splitViewController.navigationBarSeparator; + separatorView.hidden = (self.class == [MVMCoreUITabBarPageControlViewController class] + || self.tabBarPageControl + || self.loadObject.requestParameters.tabWasPressed); + } + } +} + +- (BOOL)isMasterInitiallyAccessible { + if ([self.loadObject.pageJSON boolForKey:KeyHideMainMenu]) { + return NO; + } + return [MVMCoreUISession sharedGlobal].launchAppLoadedSuccessfully; +} + +- (void)setMasterShouldBeAccessible:(BOOL)masterShouldBeAccessible { + + MVMCoreUISplitViewController *splitViewController = [MVMCoreUISession sharedGlobal].splitViewController; + if (self.tabBarPageControl) { + [self.tabBarPageControl setMasterShouldBeAccessible:masterShouldBeAccessible]; + } else if ([self isVisibleViewController]) { + [splitViewController setLeftPanelIsAccessible:masterShouldBeAccessible forViewController:self]; + } + _masterShouldBeAccessible = masterShouldBeAccessible; +} + +- (BOOL)isSupportInitiallyAccessible { + return [MVMCoreUISession sharedGlobal].launchAppLoadedSuccessfully || [self showRightPanelForScreenBeforeLaunchApp]; +} + +- (BOOL)showRightPanelForScreenBeforeLaunchApp { + return [self.loadObject.pageJSON lenientBoolForKey:@"showRightPanel"]; +} + +- (void)setSupportShouldBeAccessible:(BOOL)supportShouldBeAccessible { + + MVMCoreUISplitViewController *splitViewController = [MVMCoreUISession sharedGlobal].splitViewController; + if (self.tabBarPageControl) { + [self.tabBarPageControl setSupportShouldBeAccessible:supportShouldBeAccessible]; + } else if ([self isVisibleViewController]) { + [splitViewController setRightPanelIsAccessible:supportShouldBeAccessible forViewController:self]; + } + _supportShouldBeAccessible = supportShouldBeAccessible; +} + +- (BOOL)mainTableView:(MainMenuViewController *)mainTableView shouldSelectOptionAtIndexPath:(NSIndexPath *)indexPath { + return YES; +} + +// sub class to change the navigation bar color +- (UIColor *)navigationBarTintColor { + return nil; +} + +- (void)showBottomProgressBar { + + MVMCoreUISplitViewController *splitViewController = [MVMCoreUISession sharedGlobal].splitViewController; + if ([self isVisibleViewController]) { + + NSString *progressAsString = [self.loadObject.pageJSON stringForKey:KeyProgressPercent]; + float progress = progressAsString.length > 0 ? [progressAsString floatValue]/100 : 0; + [splitViewController setBottomProgressBarProgress:progress]; + } +} + +#pragma mark - View lifecycle + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + + self.navigationItem.hidesBackButton = YES; + + // init intro animation manager + MVMAnimationManager *introAnimationManager = [[MVMAnimationManager alloc] init]; + self.introAnimationManager = introAnimationManager; + + // Present the tooltip from the bottom over the tab bar controller. + if ([MVMCoreGetterUtility isOnIPad]) { + + // Different style for ipad. + self.modalPresentationStyle = UIModalPresentationFormSheet; + } else { + + // Standard. + self.modalPresentationStyle = UIModalPresentationOverCurrentContext; + } + + MVMCoreLog(@"View Controller Loaded : %@",NSStringFromClass([self class])); + // Do some initial loading. + if (!self.initialLoadFinished) { + self.initialLoadFinished = YES; + [self initialLoad]; + } + + // Since we have new data, build stuff for the screen. + [self newDataBuildScreen]; + + // Update the UI after the view is loaded. + self.needToUpdateUI = YES; + self.needToupdateUIOnScreenSizeChanges = YES; + + if (UIAccessibilityIsVoiceOverRunning()) { + self.disableAnimations = YES; + } + + if (!self.disableAnimations) { + [self setupIntroAnimations]; + } +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. + + [[MVMCoreCache sharedCache] clearImageCache]; +} + +- (void)viewDidLayoutSubviews { + // Updates the views if necessary + if (self.needToUpdateUI || (self.needToupdateUIOnScreenSizeChanges && [self screenSizeChanged])) { + + // Add to fix a strange bug where the width is zero and things get messed up. + if ([self isViewLoaded] && (NSInteger)CGRectGetWidth(self.view.bounds) > 1) { + + [self updateViews]; + self.needToUpdateUI = NO; + } + } + + self.previousScreenSize = self.view.bounds.size; + + [super viewDidLayoutSubviews]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + // Update the navigation bar ui when view is appearing. Don't handle if there is a tab bar page control, it will be handled later. + if (!self.tabBarPageControl) { + [self updateNavigationBarUI:self.navigationController]; + } +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + + // Don't track page state if there is a tab bar page control, it will be handled later. + if (!self.tabBarPageControl) { + [self adobeTrackPageState]; + } + + // perform intro animations + if (!self.disableAnimations) { + [self.introAnimationManager performAnimations]; + } +} + +- (void)dealloc { + [self stopObservingForResponseJSONUpdates]; + MVMCoreLog(@"%@ deallocated", [[self class] description]); +} + +- (BOOL)shouldAutorotate { + return YES; +} + +- (UIInterfaceOrientationMask)supportedInterfaceOrientations { + + if ([MVMCoreGetterUtility isOnIPad]) { + return UIInterfaceOrientationMaskAll; + } else { + return UIInterfaceOrientationMaskPortrait; + } +} + +- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator { + + [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; + + // Updates the detail view width. + void (^completion)(id) = ^(id context) { + [self.view setNeedsLayout]; + }; + [coordinator animateAlongsideTransition:^(id context) { + } completion:completion]; +} + +#pragma mark - UITextField Functions + +// To Remove TextFields Bug: Keyboard is not dismissing after reaching textfield max length limit +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + [textField resignFirstResponder]; + return YES; +} + +- (IBAction)textFieldDoneEditing:(id)sender { + [sender resignFirstResponder]; +} + +- (void)textFieldDidBeginEditing:(UITextField *)textField { + self.selectedField = textField; + //Accessibility + if (UIAccessibilityIsVoiceOverRunning()) { + if ([self textFieldHasDoneButton:textField]) {//If there is no toolbar and done, input view can't be dismissed + [self.view setAccessibilityElements:@[textField.inputView,textField.inputAccessoryView]]; + } + [self performSelector:@selector(focusElement:) withObject:textField.inputView afterDelay:0.1]; + } +} + +- (BOOL)textFieldHasDoneButton:(UITextField *)textField { + return [textField.inputAccessoryView isKindOfClass:[UIToolbar class]] && [[[((UIToolbar *)textField.inputAccessoryView) items] lastObject] isKindOfClass:[UIBarButtonItem class]] && [textField.inputView isKindOfClass:[UIPickerView class]]; +} + +- (void)textFieldDidEndEditing:(UITextField *)textField { + + if (textField == self.selectedField) { + //Accessibility + if (UIAccessibilityIsVoiceOverRunning()) { + [self.view setAccessibilityElements:nil]; + [self performSelector:@selector(focusElement:) withObject:textField afterDelay:0.1]; + } + self.selectedField = nil; + } +} + +- (void)dismissFieldInput:(id)sender { + if (self.selectedField) { + [self.selectedField resignFirstResponder]; + } +} + +#pragma mark - UITextView Functions + +- (BOOL)textViewShouldBeginEditing:(UITextView *)textView { + self.selectedField = textView; + return YES; +} + +- (void)textViewDidEndEditing:(UITextView *)textView { + if (textView == self.selectedField) { + self.selectedField = nil; + } +} + +#pragma mark - TableView + +- (NSInteger)getNumberOfSections { + NSInteger numberOfSections = 1; + return numberOfSections; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + NSInteger numberOfSections = 0; + + // Fixes a funky issue where the table is being loaded before it should be. + if (CGRectGetWidth(tableView.bounds) > 1) { + numberOfSections = [self getNumberOfSections]; + } + + return numberOfSections; +} + +#pragma mark - ButtonDelegateProtocol + +- (BOOL)button:(nonnull NSObject *)button shouldPerformActionWithMap:(nullable NSDictionary *)actionMap additionalData:(nullable NSDictionary *)additionalData { + return YES; +} + +#pragma mark - MVMCoreActionDelegateProtocol + +- (void)logActionWithActionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData { + [[MVMCoreUILoggingHandler sharedLoggingHandler] defaultLogActionForController:self actionInformation:actionInformation additionalData:additionalData]; +} + +- (void)handleOpenPageForRequestParameters:(nonnull MVMCoreRequestParameters *)requestParameters actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData { + + if (requestParameters.openSupportPanel) { + [[MVMCoreUISession sharedGlobal].splitViewController.rightPanel willOpenWithActionInformation:actionInformation]; + } + + requestParameters.parentPageType = [self.loadObject.pageJSON stringForKey:@"parentPageType"]; + + [[MVMCoreLoadHandler sharedGlobal] loadRequest:requestParameters dataForPage:additionalData delegate:self]; +} + +- (void)handleBackAction:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData { + BOOL openSupportPanel = [actionInformation boolForKey:KeyOpenSupport]; + if (openSupportPanel) { + [[MVMCoreUISession sharedGlobal].splitViewController.rightPanel willOpenWithActionInformation:actionInformation]; + } + + if (self.tabBarPageControl) { + [self.tabBarPageControl handleBackAction:actionInformation additionalData:additionalData]; + } else { + [self dismiss]; + } +} + +- (void)shouldLinkAwayWithURL:(nullable NSURL *)URL appURL:(nullable NSURL *)appURL actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData linkAwayBlock:(nonnull void (^)(NSURL * _Nullable, NSURL * _Nullable, NSDictionary * _Nullable, NSDictionary * _Nullable))linkAwayBlock { + linkAwayBlock(appURL,URL,actionInformation,additionalData); +} + +- (void)prepareRequestForPreviousSubmission:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData submit:(nonnull void (^)(MVMCoreRequestParameters * _Nonnull requestParameters, NSDictionary * _Nullable dataForPage))submit { + + // Combines data + NSDictionary *dataForPage = self.loadObject.dataForPage; + if (dataForPage && additionalData) { + + NSMutableDictionary *mutableData = [NSMutableDictionary dictionaryWithDictionary:dataForPage]; + [mutableData addEntriesFromDictionary:additionalData]; + dataForPage = mutableData; + } else if (additionalData) { + dataForPage = additionalData; + } + + // Makes previous request + submit(self.loadObject.requestParameters,dataForPage); +} + +- (void)willShowPopupWithAlertObject:(nonnull MVMCoreAlertObject *)alertObject alertJson:(nonnull NSDictionary *)alertJson { +} + +- (nullable MVMCoreAlertObject *)willShowTopAlertWithAlertObject:(nonnull MVMCoreAlertObject *)alertObject alertJson:(nonnull NSDictionary *)alertJson { + if (self.currentTopAlertPageType && [self.currentTopAlertPageType isEqualToString:[alertJson string:KeyPageType]]) { + return nil; + } else { + return alertObject; + } +} + +// Handle cancel +- (void)handleCancel:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData { + +} + +- (void)handleUnknownActionType:(nullable NSString *)actionType actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData { + + [MVMCoreActionHandler defaultHandleUnknownActionType:actionType actionInformation:actionInformation additionalData:additionalData delegate:self]; +} + +- (void)handleActionError:(nonnull MVMCoreErrorObject *)error additionalData:(nullable NSDictionary *)additionalData { + + [MVMCoreActionHandler defaultHandleActionError:error additionalData:additionalData]; +} + +- (void)prepareForOpenOtherAppModule:(nullable NSString *)module { + +} + +#pragma mark - MVMCoreLoadDelegateProtocol + +- (BOOL)checkForDelegateSpecificErrors:(nullable MVMCoreErrorObject *)errorObject loadObject:(nonnull MVMCoreLoadObject *)loadObject completionHandler:(nonnull void (^)(BOOL shouldContinueLoad, MVMCoreLoadObject * _Nullable loadObject, MVMCoreErrorObject * _Nullable error))completionHandler { + return [MVMCoreLoadHandler defaultCheckForSpecificErrors:errorObject loadObject:loadObject]; +} + +- (BOOL)shouldContinueToErrorPage:(nonnull MVMCoreLoadObject *)loadObject error:(nullable MVMCoreErrorObject *)error { + return YES; +} + +- (BOOL)handleModuleError:(nonnull NSString *)module loadObject:(nonnull MVMCoreLoadObject *)loadObject error:(nonnull MVMCoreErrorObject *)error { + return [MVMCoreLoadHandler defaultHandleModuleError:module loadObject:loadObject error:error]; +} + +- (nullable MVMCoreAlertObject *)alertObjectToShow:(nonnull MVMCoreLoadObject *)loadObject error:(nullable MVMCoreErrorObject *)errorObject { + return [MVMCoreAlertObject alertObjectForLoadObject:loadObject error:errorObject actionDelegate:self]; +} + +- (void)handleFieldErrors:(nullable NSArray *)fieldErrors loadObject:(nonnull MVMCoreLoadObject *)loadObject { + + if (self.textFieldErrorMapping.count > 0) { + NSMutableArray *enabledTextField = [NSMutableArray new]; + for (NSUInteger i = 0; i < fieldErrors.count; i++) { + + NSDictionary *info = [fieldErrors objectAtIndex:i ofType:[NSDictionary class]]; + NSString *fieldName = [info stringForKey:KeyFieldName]; + MFTextField *textField = [self.textFieldErrorMapping objectForKey:fieldName ofType:[MFTextField class]]; + if (textField && textField.enabled) { + [textField setErrorMessage:[info stringForKey:KeyUserMessage]]; + [enabledTextField addObject:textField]; + } + } + if ([enabledTextField count] > 0) { + MFTextField *firstErrorTextField = enabledTextField[0]; + [firstErrorTextField pushAccessibilityNotification]; + } + } +} + +- (void)loadFinished:(nullable MVMCoreLoadObject *)loadObject loadedViewController:(nullable MFViewController *)loadedViewController error:(nullable MVMCoreErrorObject *)error { + + // Open the support panel +#warning Scott/Chris, decide if we want to do this if there is an error. + if (!error && (loadObject.requestParameters.openSupportPanel || [loadObject.systemParametersJSON boolForKey:KeyOpenSupport])) { + [[MVMCoreUISession sharedGlobal].splitViewController showRightPanelAnimated:YES]; + } + [[MVMCoreUILoggingHandler sharedLoggingHandler] defaultTrackLoadFinishedForController:self loadObject:loadObject]; +} + +- (void)loadCancelled:(nullable MVMCoreLoadObject *)loadObject { + +} + +#pragma mark - TopAlertDelegateProtocol + +- (void)topAlertViewShown:(nonnull id)topAlert topAlertObject:(nonnull MVMCoreTopAlertObject *)topAlertObject { + self.currentTopAlertPageType = topAlertObject.pageType; +} + +- (void)topAlertViewDismissed:(nonnull id)topAlert { + self.currentTopAlertPageType = nil; +} + +- (BOOL)shouldLoadTopAlertAction:(nullable NSDictionary *)actionMap additionalData:(nullable NSDictionary *)additionalData { + if (![[actionMap stringForKey:KeyPageType] isEqualToString:self.loadObject.requestParameters.pageType]) { + return YES; + } else { + return NO; + } +} + +#pragma mark - MVMCoreViewManagerViewControllerProtocol + +- (void)viewControllerReadyInManager:(nonnull id )manager { + // The screen is officially ready. Only update the navigation bar if initial load has finished. + if (manager == self.tabBarPageControl) { + if (self.initialLoadFinished) { + [self updateNavigationBarUI:self.tabBarPageControl.navigationController]; + } + [self adobeTrackPageState]; + } +} + +#pragma mark - adobe analytics + +- (nullable NSArray *)additionalActionsToTrackWithMainActionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData { + return nil; +} + +- (nullable NSDictionary *)getActionTrackDataDictionaryForActionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData { + return [[MVMCoreUILoggingHandler sharedLoggingHandler] defaultGetActionTrackDataDictionaryForController:self actionInformation:actionInformation additionalData:additionalData]; +} + +- (void)adobeTrackPageState { + [[MVMCoreUILoggingHandler sharedLoggingHandler] defaultLogPageStateForController:self]; +} + +- (nullable NSDictionary *)additionalDataToTrackActionWithActionInformation:(nullable NSDictionary *)actionInformation { + return nil; +} + +- (nullable NSDictionary *)additionalDataToTrackForPage { + return nil; +} + +- (nullable NSArray *)dynamicPageNameValuesToTrackPage { + return nil; +} + +#pragma mark - review app pop up + +//client side logic to prevent review app, it should only be configured for extra client logic to show or not show review app pop up +- (BOOL)shouldReviewApp { + return YES; +} + +//Accessibility +- (void) focusElement:(id) element { + dispatch_async(dispatch_get_main_queue(), ^{ + UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, element); + }); +} + +// support + +- (NSDictionary *)extraStartInfoForSupport { + return nil; +} + +#pragma mark - Animations +// subclass to override default intro animations +-(void) setupIntroAnimations { + +} + +@end diff --git a/MVMCoreUI/BaseControllers/ProgrammaticScrollViewController.m b/MVMCoreUI/BaseControllers/ProgrammaticScrollViewController.m index 792a346b..fab82151 100644 --- a/MVMCoreUI/BaseControllers/ProgrammaticScrollViewController.m +++ b/MVMCoreUI/BaseControllers/ProgrammaticScrollViewController.m @@ -8,7 +8,7 @@ #import "ProgrammaticScrollViewController.h" #import -#import "NSLayoutConstraint+MVMCoreUIConvenience.h" +#import "NSLayoutConstraint+MFConvenience.h" #import "MVMCoreUICommonViewsUtility.h" @interface ProgrammaticScrollViewController () diff --git a/MVMCoreUI/Categories/NSLayoutConstraint+MVMCoreUIConvenience.h b/MVMCoreUI/Categories/NSLayoutConstraint+MFConvenience.h similarity index 98% rename from MVMCoreUI/Categories/NSLayoutConstraint+MVMCoreUIConvenience.h rename to MVMCoreUI/Categories/NSLayoutConstraint+MFConvenience.h index dc7b4f0a..ed9d1876 100644 --- a/MVMCoreUI/Categories/NSLayoutConstraint+MVMCoreUIConvenience.h +++ b/MVMCoreUI/Categories/NSLayoutConstraint+MFConvenience.h @@ -1,5 +1,5 @@ // -// NSLayoutConstraint+MVMCoreUIConvenience.h +// NSLayoutConstraint+MFConvenience.h // myverizon // // Created by Chris Yang on 1/15/16. @@ -24,7 +24,7 @@ extern NSString * _Nonnull const ConstraintCenterY; extern NSString * _Nonnull const ConstraintHeight; extern NSString * _Nonnull const ConstraintWidth; -@interface NSLayoutConstraint (MVMCoreUIConvenience) +@interface NSLayoutConstraint (MFConvenience) //this will pin subview to superview + (nullable NSDictionary *)constraintPinSubviewToSuperview:(nullable UIView *)subview; diff --git a/MVMCoreUI/Categories/NSLayoutConstraint+MVMCoreUIConvenience.m b/MVMCoreUI/Categories/NSLayoutConstraint+MFConvenience.m similarity index 98% rename from MVMCoreUI/Categories/NSLayoutConstraint+MVMCoreUIConvenience.m rename to MVMCoreUI/Categories/NSLayoutConstraint+MFConvenience.m index 66be44d3..1ed0acd1 100644 --- a/MVMCoreUI/Categories/NSLayoutConstraint+MVMCoreUIConvenience.m +++ b/MVMCoreUI/Categories/NSLayoutConstraint+MFConvenience.m @@ -1,12 +1,12 @@ // -// NSLayoutConstraint+MVMCoreUIConvenience.m +// NSLayoutConstraint+MFConvenience.m // myverizon // // Created by Chris Yang on 1/15/16. // Copyright © 2016 Verizon Wireless. All rights reserved. // -#import "NSLayoutConstraint+MVMCoreUIConvenience.h" +#import "NSLayoutConstraint+MFConvenience.h" //constraint constants NSString *const ConstraintTop = @"top"; @@ -18,7 +18,7 @@ NSString *const ConstraintCenterY = @"centerY"; NSString *const ConstraintHeight = @"height"; NSString *const ConstraintWidth = @"width"; -@implementation NSLayoutConstraint (MVMCoreUIConvenience) +@implementation NSLayoutConstraint (MFConvenience) + (NSDictionary *)constraintPinSubviewToSuperview:(UIView *)subview { return [NSLayoutConstraint constraintPinSubview:subview pinTop:YES pinBottom:YES pinLeft:YES pinRight:YES]; diff --git a/MVMCoreUI/Categories/UIColor+MVMCoreUIConvenience.h b/MVMCoreUI/Categories/UIColor+MFConvenience.h similarity index 98% rename from MVMCoreUI/Categories/UIColor+MVMCoreUIConvenience.h rename to MVMCoreUI/Categories/UIColor+MFConvenience.h index dcd28e14..c7b6a950 100644 --- a/MVMCoreUI/Categories/UIColor+MVMCoreUIConvenience.h +++ b/MVMCoreUI/Categories/UIColor+MFConvenience.h @@ -1,5 +1,5 @@ // -// UIColor+MVMCoreUIConvenience.h +// UIColor+MFConvenience.h // mobilefirst // // Created by Chris Yang on 2/21/16. @@ -8,7 +8,7 @@ #import -@interface UIColor (MVMCoreUIConvenience) +@interface UIColor (MFConvenience) #pragma mark - 2.0 diff --git a/MVMCoreUI/Categories/UIColor+MVMCoreUIConvenience.m b/MVMCoreUI/Categories/UIColor+MFConvenience.m similarity index 99% rename from MVMCoreUI/Categories/UIColor+MVMCoreUIConvenience.m rename to MVMCoreUI/Categories/UIColor+MFConvenience.m index b9d4e9d4..e73dccd4 100644 --- a/MVMCoreUI/Categories/UIColor+MVMCoreUIConvenience.m +++ b/MVMCoreUI/Categories/UIColor+MFConvenience.m @@ -1,15 +1,15 @@ // -// UIColor+MVMCoreUIConvenience.m +// UIColor+MFConvenience.m // mobilefirst // // Created by Chris Yang on 2/21/16. // Copyright © 2016 Verizon Wireless. All rights reserved. // -#import "UIColor+MVMCoreUIConvenience.h" +#import "UIColor+MFConvenience.h" #import -@implementation UIColor (MVMCoreUIConvenience) +@implementation UIColor (MFConvenience) #pragma mark - 2.0 diff --git a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m index 033194d3..7db9fd67 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m @@ -13,12 +13,12 @@ #import #import #import "MVMCoreUIUtility.h" -#import "UIColor+MVMCoreUIConvenience.h" -#import "NSLayoutConstraint+MVMCoreUIConvenience.h" +#import "UIColor+MFConvenience.h" +#import "NSLayoutConstraint+MFConvenience.h" #import "MFViewController.h" #import "MFFonts.h" #import "MFLoadingViewController.h" -#import "MFSizeObject.h" +#import #import "SeparatorView.h" #import "MVMCoreUISession.h" #import "MVMCoreUIConstants.h" diff --git a/MVMCoreUI/Containers/TabBarController/MVMCoreUITabBarPageControlViewController.m b/MVMCoreUI/Containers/TabBarController/MVMCoreUITabBarPageControlViewController.m index ad428c17..39320dad 100644 --- a/MVMCoreUI/Containers/TabBarController/MVMCoreUITabBarPageControlViewController.m +++ b/MVMCoreUI/Containers/TabBarController/MVMCoreUITabBarPageControlViewController.m @@ -14,7 +14,7 @@ #import #import #import -#import "UIColor+MVMCoreUIConvenience.h" +#import "UIColor+MFConvenience.h" #import #import #import "SeparatorView.h" diff --git a/MVMCoreUI/Containers/TabBarController/TopTabbar.m b/MVMCoreUI/Containers/TabBarController/TopTabbar.m index 689ff1ae..bc114d36 100644 --- a/MVMCoreUI/Containers/TabBarController/TopTabbar.m +++ b/MVMCoreUI/Containers/TabBarController/TopTabbar.m @@ -10,8 +10,8 @@ #import "MVMCoreUICommonViewsUtility.h" #import "MFStyler.h" #import -#import "UIColor+MVMCoreUIConvenience.h" -#import "NSLayoutConstraint+MVMCoreUIConvenience.h" +#import "UIColor+MFConvenience.h" +#import "NSLayoutConstraint+MFConvenience.h" #import "MVMCoreUIUtility.h" #import #import "MVMCoreUICommonViewsUtility.h" diff --git a/MVMCoreUI/MVMCoreUI.h b/MVMCoreUI/MVMCoreUI.h index 94fb4647..f04bc94f 100644 --- a/MVMCoreUI/MVMCoreUI.h +++ b/MVMCoreUI/MVMCoreUI.h @@ -17,14 +17,28 @@ FOUNDATION_EXPORT const unsigned char MVMCoreUIVersionString[]; // In this header, you should import all the public headers of your framework using statements like #import #import +#pragma mark - TopAlert #import +#import +#import +#import +#import + +#pragma mark - OtherHandlers +#import + +#pragma mark - Categories +#import +#import #pragma mark - Styles #import #pragma mark - Utility +#import #import #import +#import #import #import @@ -34,6 +48,7 @@ FOUNDATION_EXPORT const unsigned char MVMCoreUIVersionString[]; #import #import #import +#import #pragma mark - Containers #import @@ -51,9 +66,13 @@ FOUNDATION_EXPORT const unsigned char MVMCoreUIVersionString[]; #import #import #import +#import #import #import #import +#import +#import +#import #pragma mark Buttons #import diff --git a/MVMCoreUI/OtherHandlers/MVMCoreUILoggingHandler.h b/MVMCoreUI/OtherHandlers/MVMCoreUILoggingHandler.h index 2b564ad0..26678257 100644 --- a/MVMCoreUI/OtherHandlers/MVMCoreUILoggingHandler.h +++ b/MVMCoreUI/OtherHandlers/MVMCoreUILoggingHandler.h @@ -8,12 +8,24 @@ #import +@class MFViewController; + NS_ASSUME_NONNULL_BEGIN @interface MVMCoreUILoggingHandler : MVMCoreLoggingHandler - (void)logTopAlertAction:(nonnull MVMCoreTopAlertObject *)topAlertObject actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData; +// Page State Logging +- (void)defaultLogPageStateForController:(nonnull MFViewController *)controller; + +// Action Logging +- (void)defaultLogActionForController:(nonnull MFViewController *)controller actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData; +- (nullable NSDictionary *)defaultGetActionTrackDataDictionaryForController:(nonnull MFViewController *)controller actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData; + +// Load Logging +- (void)defaultTrackLoadFinishedForController:(nonnull MFViewController *)controller loadObject:(nullable MVMCoreLoadObject *)loadObject; + @end NS_ASSUME_NONNULL_END diff --git a/MVMCoreUI/OtherHandlers/MVMCoreUILoggingHandler.m b/MVMCoreUI/OtherHandlers/MVMCoreUILoggingHandler.m index 33903f0c..1d538bc2 100644 --- a/MVMCoreUI/OtherHandlers/MVMCoreUILoggingHandler.m +++ b/MVMCoreUI/OtherHandlers/MVMCoreUILoggingHandler.m @@ -13,4 +13,17 @@ - (void)logTopAlertAction:(nonnull MVMCoreTopAlertObject *)topAlertObject actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData { } +- (void)defaultLogPageStateForController:(nonnull MFViewController *)controller { +} + +- (void)defaultLogActionForController:(nonnull MFViewController *)controller actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData { +} + +- (nullable NSDictionary *)defaultGetActionTrackDataDictionaryForController:(nonnull MFViewController *)controller actionInformation:(nullable NSDictionary *)actionInformation additionalData:(nullable NSDictionary *)additionalData { + return nil; +} + +- (void)defaultTrackLoadFinishedForController:(nonnull MFViewController *)controller loadObject:(nullable MVMCoreLoadObject *)loadObject { +} + @end diff --git a/MVMCoreUI/Session/MVMCoreUISession.h b/MVMCoreUI/Session/MVMCoreUISession.h index a68a1515..b5ac2d6c 100644 --- a/MVMCoreUI/Session/MVMCoreUISession.h +++ b/MVMCoreUI/Session/MVMCoreUISession.h @@ -20,6 +20,9 @@ NS_ASSUME_NONNULL_BEGIN // for handscroll Animation on subclasses of MFScrollingViewController @property (assign, nonatomic) BOOL enableHandScrollAnimation; +//indicates if the app launched successfully +@property (assign, nonatomic) BOOL launchAppLoadedSuccessfully; + @end NS_ASSUME_NONNULL_END diff --git a/MVMCoreUI/Styles/MFStyler.m b/MVMCoreUI/Styles/MFStyler.m index 0b6e19d1..4367b37e 100644 --- a/MVMCoreUI/Styles/MFStyler.m +++ b/MVMCoreUI/Styles/MFStyler.m @@ -8,9 +8,9 @@ #import "MFStyler.h" #import "MFFonts.h" -#import "MFSizeObject.h" -#import "UIColor+MVMCoreUIConvenience.h" -#import "NSLayoutConstraint+MVMCoreUIConvenience.h" +#import +#import "UIColor+MFConvenience.h" +#import "NSLayoutConstraint+MFConvenience.h" #import "MVMCoreUISplitViewController.h" CGFloat const PaddingDefault = 24; diff --git a/MVMCoreUI/SupportingFiles/Fonts/NHaasGroteskDSStd-45Lt.otf b/MVMCoreUI/SupportingFiles/Fonts/NHaasGroteskDSStd-45Lt.otf new file mode 100644 index 0000000000000000000000000000000000000000..bddef9eb7e16ee3c6d72d91ee3ad064ad5d15b43 GIT binary patch literal 62664 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�=> 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

jan8MpnGKFv7c}Nl?0Cx%b?Ma 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 F{{T=I5EuXe literal 0 HcmV?d00001 diff --git a/MVMCoreUI/SupportingFiles/Fonts/NHaasGroteskDSStd-55Rg.otf b/MVMCoreUI/SupportingFiles/Fonts/NHaasGroteskDSStd-55Rg.otf new file mode 100644 index 0000000000000000000000000000000000000000..f56ed7aaf89f16bad53d72034e0002639d48364e GIT binary patch literal 75048 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

_D2qW`Ep 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

3x1o+N6#i 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 literal 0 HcmV?d00001 diff --git a/MVMCoreUI/TopAlert/MVMCoreUITopAlertBaseView.m b/MVMCoreUI/TopAlert/MVMCoreUITopAlertBaseView.m index 31f13545..08b92f1a 100644 --- a/MVMCoreUI/TopAlert/MVMCoreUITopAlertBaseView.m +++ b/MVMCoreUI/TopAlert/MVMCoreUITopAlertBaseView.m @@ -15,7 +15,7 @@ #import "MVMCoreUITopAlertView.h" #import #import -#import "UIColor+MVMCoreUIConvenience.h" +#import "UIColor+MFConvenience.h" #import "MVMCoreUICommonViewsUtility.h" #import "MFStyler.h" #import "MVMCoreUISession.h" diff --git a/MVMCoreUI/TopAlert/MVMCoreUITopAlertExpandableView.h b/MVMCoreUI/TopAlert/MVMCoreUITopAlertExpandableView.h index 7d30eb7b..d1b2d470 100644 --- a/MVMCoreUI/TopAlert/MVMCoreUITopAlertExpandableView.h +++ b/MVMCoreUI/TopAlert/MVMCoreUITopAlertExpandableView.h @@ -7,7 +7,7 @@ // #import -#import "MVMCoreUITopAlertBaseView.h" +#import #import @class PrimaryButton; diff --git a/MVMCoreUI/TopAlert/MVMCoreUITopAlertExpandableView.m b/MVMCoreUI/TopAlert/MVMCoreUITopAlertExpandableView.m index 501e1d2c..c6a53691 100644 --- a/MVMCoreUI/TopAlert/MVMCoreUITopAlertExpandableView.m +++ b/MVMCoreUI/TopAlert/MVMCoreUITopAlertExpandableView.m @@ -16,7 +16,7 @@ #import #import #import "MFStyler.h" -#import "NSLayoutConstraint+MVMCoreUIConvenience.h" +#import "NSLayoutConstraint+MFConvenience.h" #import "MVMCoreUIUtility.h" @interface MVMCoreUITopAlertExpandableView () diff --git a/MVMCoreUI/TopAlert/MVMCoreUITopAlertMainView.h b/MVMCoreUI/TopAlert/MVMCoreUITopAlertMainView.h index e2754253..6ebd1026 100644 --- a/MVMCoreUI/TopAlert/MVMCoreUITopAlertMainView.h +++ b/MVMCoreUI/TopAlert/MVMCoreUITopAlertMainView.h @@ -7,7 +7,7 @@ // #import -#import "MVMCoreUITopAlertBaseView.h" +#import #import @class PrimaryButton; diff --git a/MVMCoreUI/TopAlert/MVMCoreUITopAlertMainView.m b/MVMCoreUI/TopAlert/MVMCoreUITopAlertMainView.m index 0f00c1ec..e0595e7c 100644 --- a/MVMCoreUI/TopAlert/MVMCoreUITopAlertMainView.m +++ b/MVMCoreUI/TopAlert/MVMCoreUITopAlertMainView.m @@ -8,12 +8,12 @@ #import "MVMCoreUITopAlertMainView.h" #import "MFStyler.h" -#import "NSLayoutConstraint+MVMCoreUIConvenience.h" +#import "NSLayoutConstraint+MFConvenience.h" #import #import "PrimaryButton.h" #import #import -#import "UIColor+MVMCoreUIConvenience.h" +#import "UIColor+MFConvenience.h" #import #import "MFLoadImageView.h" #import diff --git a/MVMCoreUI/TopAlert/MVMCoreUITopAlertShortView.h b/MVMCoreUI/TopAlert/MVMCoreUITopAlertShortView.h index f0f5c3a8..02ea2f2a 100644 --- a/MVMCoreUI/TopAlert/MVMCoreUITopAlertShortView.h +++ b/MVMCoreUI/TopAlert/MVMCoreUITopAlertShortView.h @@ -7,7 +7,7 @@ // #import -#import "MVMCoreUITopAlertBaseView.h" +#import @class MVMCoreTopAlertObject; @class MFCustomButton; diff --git a/MVMCoreUI/TopAlert/MVMCoreUITopAlertShortView.m b/MVMCoreUI/TopAlert/MVMCoreUITopAlertShortView.m index b709d957..8307a595 100644 --- a/MVMCoreUI/TopAlert/MVMCoreUITopAlertShortView.m +++ b/MVMCoreUI/TopAlert/MVMCoreUITopAlertShortView.m @@ -8,7 +8,7 @@ #import "MVMCoreUITopAlertShortView.h" #import "MFStyler.h" -#import "NSLayoutConstraint+MVMCoreUIConvenience.h" +#import "NSLayoutConstraint+MFConvenience.h" #import #import "MVMCoreUIConstants.h" diff --git a/MVMCoreUI/TopAlert/MVMCoreUITopAlertView.h b/MVMCoreUI/TopAlert/MVMCoreUITopAlertView.h index 6c2ac2ad..90c60f6d 100644 --- a/MVMCoreUI/TopAlert/MVMCoreUITopAlertView.h +++ b/MVMCoreUI/TopAlert/MVMCoreUITopAlertView.h @@ -7,14 +7,13 @@ // #import -#import "MFCustomButton.h" #import #import #import -#import "ButtonDelegateProtocol.h" +#import #import #import -#import "MFView.h" +#import @class MVMCoreTopAlertObject; diff --git a/MVMCoreUI/TopAlert/MVMCoreUITopAlertView.m b/MVMCoreUI/TopAlert/MVMCoreUITopAlertView.m index 106b468f..a236fdd2 100644 --- a/MVMCoreUI/TopAlert/MVMCoreUITopAlertView.m +++ b/MVMCoreUI/TopAlert/MVMCoreUITopAlertView.m @@ -21,9 +21,9 @@ #import #import #import "MVMCoreUICommonViewsUtility.h" -#import "UIColor+MVMCoreUIConvenience.h" +#import "UIColor+MFConvenience.h" #import -#import "NSLayoutConstraint+MVMCoreUIConvenience.h" +#import "NSLayoutConstraint+MFConvenience.h" #import #import #import diff --git a/MVMCoreUI/Utility/MFFonts.m b/MVMCoreUI/Utility/MFFonts.m index f9131600..b69efc1a 100644 --- a/MVMCoreUI/Utility/MFFonts.m +++ b/MVMCoreUI/Utility/MFFonts.m @@ -8,12 +8,14 @@ #import "MFFonts.h" #import +#import "MVMCoreUIUtility.h" +#import @implementation MFFonts + (void)loadFont:(NSString *)fontName type:(NSString *)type{ - NSString *fontPath = [[MVMCoreUtility bundleForMVMCoreUI] pathForResource:fontName ofType:type]; + NSString *fontPath = [[MVMCoreUIUtility bundleForMVMCoreUI] pathForResource:fontName ofType:type]; NSData *inData = [NSData dataWithContentsOfFile:fontPath]; CFErrorRef error; CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)inData); @@ -21,7 +23,7 @@ CGFontRef font = CGFontCreateWithDataProvider(provider); if (!CTFontManagerRegisterGraphicsFont(font, &error)) { CFStringRef errorDescription = CFErrorCopyDescription(error); - MFDLog(@"Failed to load font: %@", errorDescription); + MVMCoreLog(@"Failed to load font: %@", errorDescription); CFRelease(errorDescription); } CFRelease(font); diff --git a/MVMCoreUI/Utility/MVMCoreUICommonViewsUtility.h b/MVMCoreUI/Utility/MVMCoreUICommonViewsUtility.h index 51467225..ca0db027 100644 --- a/MVMCoreUI/Utility/MVMCoreUICommonViewsUtility.h +++ b/MVMCoreUI/Utility/MVMCoreUICommonViewsUtility.h @@ -13,8 +13,6 @@ @class PrimaryButton; @class CustomTextView; -@class MFApplePromoView; -@class MFViewController; @interface MVMCoreUICommonViewsUtility : NSObject diff --git a/MVMCoreUI/Utility/MVMCoreUICommonViewsUtility.m b/MVMCoreUI/Utility/MVMCoreUICommonViewsUtility.m index 6ca89454..1dbe51c1 100644 --- a/MVMCoreUI/Utility/MVMCoreUICommonViewsUtility.m +++ b/MVMCoreUI/Utility/MVMCoreUICommonViewsUtility.m @@ -10,9 +10,9 @@ #import "PrimaryButton.h" #import "MFTextView.h" #import "MFStyler.h" -#import "UIColor+MVMCoreUIConvenience.h" +#import "UIColor+MFConvenience.h" #import -#import "NSLayoutConstraint+MVMCoreUIConvenience.h" +#import "NSLayoutConstraint+MFConvenience.h" #import "MVMCoreUIUtility.h" #import #import diff --git a/MVMCoreUI/Utility/MVMCoreUIConstants.h b/MVMCoreUI/Utility/MVMCoreUIConstants.h index c467fef7..8df68965 100644 --- a/MVMCoreUI/Utility/MVMCoreUIConstants.h +++ b/MVMCoreUI/Utility/MVMCoreUIConstants.h @@ -11,11 +11,17 @@ #pragma mark - Keys +extern NSString * const KeyScreenHeading; + extern NSString * const KeyDisableButton; extern NSString * const KeyValue; extern NSString * const KeyLabel; extern NSString * const KeyDisable; +extern NSString * const KeyFieldName; + +extern NSString * const KeyHideMainMenu; +extern NSString * const KeyProgressPercent; #pragma mark - Values diff --git a/MVMCoreUI/Utility/MVMCoreUIConstants.m b/MVMCoreUI/Utility/MVMCoreUIConstants.m index ea71a6f5..f0f1a24f 100644 --- a/MVMCoreUI/Utility/MVMCoreUIConstants.m +++ b/MVMCoreUI/Utility/MVMCoreUIConstants.m @@ -10,11 +10,17 @@ #pragma mark - Keys +NSString * const KeyScreenHeading = @"screenHeading"; + NSString * const KeyDisableButton = @"disableAction"; NSString * const KeyValue = @"value"; NSString * const KeyLabel = @"label"; NSString * const KeyDisable = @"disable"; +NSString * const KeyFieldName = @"fieldName"; + +NSString * const KeyHideMainMenu = @"hideMainMenu"; +NSString * const KeyProgressPercent = @"progressPercent"; #pragma mark - Values diff --git a/MVMCoreUI/Utility/Sizing/MFSizeObject.h b/MVMCoreUI/Utility/Sizing/MFSizeObject.h index e4665107..781feb4c 100644 --- a/MVMCoreUI/Utility/Sizing/MFSizeObject.h +++ b/MVMCoreUI/Utility/Sizing/MFSizeObject.h @@ -7,7 +7,7 @@ // #import -#import "MFSizeThreshold.h" +#import extern CGFloat const MFSizeiPhone4HeightThreshold; extern CGFloat const MFSizeiPhone5HeightThreshold; diff --git a/MVMCoreUI/Utility/Sizing/MFSizeObject.m b/MVMCoreUI/Utility/Sizing/MFSizeObject.m index 96c44218..41a9cd27 100644 --- a/MVMCoreUI/Utility/Sizing/MFSizeObject.m +++ b/MVMCoreUI/Utility/Sizing/MFSizeObject.m @@ -6,7 +6,7 @@ // Copyright © 2016 Verizon Wireless. All rights reserved. // -#import "MFSizeObject.h" +#import #import "MVMCoreUISplitViewController.h" #import diff --git a/MVMCoreUI/Utility/Sizing/MFSizeThreshold.m b/MVMCoreUI/Utility/Sizing/MFSizeThreshold.m index 408be4f3..3520e589 100644 --- a/MVMCoreUI/Utility/Sizing/MFSizeThreshold.m +++ b/MVMCoreUI/Utility/Sizing/MFSizeThreshold.m @@ -7,7 +7,7 @@ // #import "MFSizeThreshold.h" -#import "MFSizeObject.h" +#import @implementation MFSizeThreshold