From f5b580ba503e04de9d4969a479c21d37b43f07a1 Mon Sep 17 00:00:00 2001 From: "Suresh, Kamlesh" Date: Thu, 14 Feb 2019 00:09:45 -0500 Subject: [PATCH 1/5] detail_view_protocol_right_left_button --- MVMCoreUI/BaseControllers/MFViewController.m | 11 +++++++ .../MVMCoreUIDetailViewProtocol.h | 5 ++++ .../MVMCoreUISplitViewController.m | 29 ++++++++++++++++++- 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/MVMCoreUI/BaseControllers/MFViewController.m b/MVMCoreUI/BaseControllers/MFViewController.m index 383d923a..fea8aeb9 100644 --- a/MVMCoreUI/BaseControllers/MFViewController.m +++ b/MVMCoreUI/BaseControllers/MFViewController.m @@ -324,6 +324,17 @@ return [self.loadObject.pageJSON lenientBoolForKey:@"showRightPanel"]; } + +- (BOOL)isOverridingRightButton { + return [self.loadObject.pageJSON dict:@"supportLink"]; +} + +- (void)rightPanelButtonPressed { + [[MVMCoreActionHandler sharedActionHandler] handleActionWithDictionary:[self.loadObject.pageJSON dict:@"supportLink"] + additionalData:nil + delegate:self]; +} + - (void)setSupportShouldBeAccessible:(BOOL)supportShouldBeAccessible { MVMCoreUISplitViewController *splitViewController = [MVMCoreUISession sharedGlobal].splitViewController; diff --git a/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h b/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h index 5af78022..4d8657e9 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h @@ -24,6 +24,11 @@ NS_ASSUME_NONNULL_BEGIN // Called when the back button is pressed. Overwrite for special functionality. - (void)backButtonPressed; +- (void)leftPanelButtonPressed; +- (void)rightPanelButtonPressed; +- (BOOL)isOverridingRightButton; +- (BOOL)isOverridingLeftButton; + @end NS_ASSUME_NONNULL_END diff --git a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m index bd150f59..302d2ca0 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m @@ -142,6 +142,19 @@ CGFloat const PanelAnimationDuration = 0.2; - (IBAction)leftPanelButtonPressed:(id)sender { [MVMCoreDispatchUtility performBlockOnMainThread:^{ + UIViewController *viewController = self.navigationController.topViewController; + + // If Viewcontroller confirms to protocol and implements the the method leftPanelButtonPressed + if ([viewController conformsToProtocol:@protocol(MVMCoreUIDetailViewProtocol)] + && [viewController respondsToSelector:@selector(leftPanelButtonPressed)] + && [viewController respondsToSelector:@selector(isOverridingLeftButton)]) { + + if ([((UIViewController *)viewController) isOverridingLeftButton]) { + [((UIViewController *)viewController) leftPanelButtonPressed]; + return; + } + } + if (self.mainViewLeading.constant < .1) { // Hide the keyboard @@ -153,6 +166,7 @@ CGFloat const PanelAnimationDuration = 0.2; // Hide [self hideLeftPanelIfNeededAnimated:YES]; } + }]; } @@ -169,9 +183,22 @@ CGFloat const PanelAnimationDuration = 0.2; - (IBAction)rightPanelButtonPressed:(id)sender { [MVMCoreDispatchUtility performBlockOnMainThread:^{ + UIViewController *viewController = self.navigationController.topViewController; + + // If Viewcontroller confirms to protocol and implements the the method rightPanelButtonPressed + if ([viewController conformsToProtocol:@protocol(MVMCoreUIDetailViewProtocol)] + && [viewController respondsToSelector:@selector(isOverridingRightButton)] + && [viewController respondsToSelector:@selector(rightPanelButtonPressed)]) { + + if ([((UIViewController *)viewController) isOverridingRightButton]) { + [((UIViewController *)viewController) rightPanelButtonPressed]; + return; + } + } + if (self.mainViewTrailing.constant < .1) { // Hide the keyboard - [self.navigationController.topViewController.view endEditing:YES]; + [viewController.view endEditing:YES]; // Show [self showRightPanelAnimated:YES]; From 8a73be75e1256ea4669bb3a4a4a88dd940b98428 Mon Sep 17 00:00:00 2001 From: "Suresh, Kamlesh" Date: Thu, 14 Feb 2019 14:58:44 -0500 Subject: [PATCH 2/5] code review --- MVMCoreUI/BaseControllers/MFViewController.m | 15 ++++++++------- .../MVMCoreUIDetailViewProtocol.h | 2 -- .../MVMCoreUISplitViewController.m | 18 +++++------------- 3 files changed, 13 insertions(+), 22 deletions(-) diff --git a/MVMCoreUI/BaseControllers/MFViewController.m b/MVMCoreUI/BaseControllers/MFViewController.m index fea8aeb9..3d09e826 100644 --- a/MVMCoreUI/BaseControllers/MFViewController.m +++ b/MVMCoreUI/BaseControllers/MFViewController.m @@ -326,13 +326,14 @@ - (BOOL)isOverridingRightButton { - return [self.loadObject.pageJSON dict:@"supportLink"]; -} - -- (void)rightPanelButtonPressed { - [[MVMCoreActionHandler sharedActionHandler] handleActionWithDictionary:[self.loadObject.pageJSON dict:@"supportLink"] - additionalData:nil - delegate:self]; + if ([self.loadObject.pageJSON dict:@"supportLink"]) { + [[MVMCoreActionHandler sharedActionHandler] handleActionWithDictionary:[self.loadObject.pageJSON dict:@"supportLink"] + additionalData:nil + delegate:self]; + return YES; + } else { + return NO; + } } - (void)setSupportShouldBeAccessible:(BOOL)supportShouldBeAccessible { diff --git a/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h b/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h index 4d8657e9..82279d5f 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h @@ -24,8 +24,6 @@ NS_ASSUME_NONNULL_BEGIN // Called when the back button is pressed. Overwrite for special functionality. - (void)backButtonPressed; -- (void)leftPanelButtonPressed; -- (void)rightPanelButtonPressed; - (BOOL)isOverridingRightButton; - (BOOL)isOverridingLeftButton; diff --git a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m index 302d2ca0..e9b7c94a 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m @@ -146,13 +146,9 @@ CGFloat const PanelAnimationDuration = 0.2; // If Viewcontroller confirms to protocol and implements the the method leftPanelButtonPressed if ([viewController conformsToProtocol:@protocol(MVMCoreUIDetailViewProtocol)] - && [viewController respondsToSelector:@selector(leftPanelButtonPressed)] - && [viewController respondsToSelector:@selector(isOverridingLeftButton)]) { - - if ([((UIViewController *)viewController) isOverridingLeftButton]) { - [((UIViewController *)viewController) leftPanelButtonPressed]; - return; - } + && [viewController respondsToSelector:@selector(isOverridingLeftButton)] + && [((UIViewController *)viewController) leftPanelButtonPressed]) { + return; } if (self.mainViewLeading.constant < .1) { @@ -188,12 +184,8 @@ CGFloat const PanelAnimationDuration = 0.2; // If Viewcontroller confirms to protocol and implements the the method rightPanelButtonPressed if ([viewController conformsToProtocol:@protocol(MVMCoreUIDetailViewProtocol)] && [viewController respondsToSelector:@selector(isOverridingRightButton)] - && [viewController respondsToSelector:@selector(rightPanelButtonPressed)]) { - - if ([((UIViewController *)viewController) isOverridingRightButton]) { - [((UIViewController *)viewController) rightPanelButtonPressed]; - return; - } + && [((UIViewController *)viewController) isOverridingRightButton]) { + return; } if (self.mainViewTrailing.constant < .1) { From b0e6d30500800447b64e9702eac3cd526c97a405 Mon Sep 17 00:00:00 2001 From: "Suresh, Kamlesh" Date: Thu, 14 Feb 2019 15:03:52 -0500 Subject: [PATCH 3/5] isOverridingLeftButton --- .../SplitViewController/MVMCoreUISplitViewController.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m index e9b7c94a..5c21f4d0 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m @@ -147,7 +147,7 @@ CGFloat const PanelAnimationDuration = 0.2; // If Viewcontroller confirms to protocol and implements the the method leftPanelButtonPressed if ([viewController conformsToProtocol:@protocol(MVMCoreUIDetailViewProtocol)] && [viewController respondsToSelector:@selector(isOverridingLeftButton)] - && [((UIViewController *)viewController) leftPanelButtonPressed]) { + && [((UIViewController *)viewController) isOverridingLeftButton]) { return; } From 90310adfea3c00b4f883061d26152082d928a63d Mon Sep 17 00:00:00 2001 From: "Suresh, Kamlesh" Date: Thu, 14 Feb 2019 16:01:35 -0500 Subject: [PATCH 4/5] code review --- MVMCoreUI/BaseControllers/MFViewController.m | 2 +- .../SplitViewController/MVMCoreUIDetailViewProtocol.h | 3 +++ .../SplitViewController/MVMCoreUISplitViewController.m | 6 +----- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/MVMCoreUI/BaseControllers/MFViewController.m b/MVMCoreUI/BaseControllers/MFViewController.m index 3d09e826..d2c1e7b3 100644 --- a/MVMCoreUI/BaseControllers/MFViewController.m +++ b/MVMCoreUI/BaseControllers/MFViewController.m @@ -326,7 +326,7 @@ - (BOOL)isOverridingRightButton { - if ([self.loadObject.pageJSON dict:@"supportLink"]) { + if ([self.loadObject.pageJSON dict:@"rightPanelButtonMap"]) { [[MVMCoreActionHandler sharedActionHandler] handleActionWithDictionary:[self.loadObject.pageJSON dict:@"supportLink"] additionalData:nil delegate:self]; diff --git a/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h b/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h index 82279d5f..0c5a865d 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUIDetailViewProtocol.h @@ -24,7 +24,10 @@ NS_ASSUME_NONNULL_BEGIN // Called when the back button is pressed. Overwrite for special functionality. - (void)backButtonPressed; +// View Controller can override this method and do custom action instead of opening the right panel - (BOOL)isOverridingRightButton; + +// View Controller can override this method and do custom action instead of opening the left panel - (BOOL)isOverridingLeftButton; @end diff --git a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m index 5c21f4d0..7dfb97e0 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m @@ -152,17 +152,14 @@ CGFloat const PanelAnimationDuration = 0.2; } if (self.mainViewLeading.constant < .1) { - // Hide the keyboard - [self.navigationController.topViewController.view endEditing:YES]; - + [viewController.view endEditing:YES]; // Show [self showLeftPanelAnimated:YES]; } else { // Hide [self hideLeftPanelIfNeededAnimated:YES]; } - }]; } @@ -191,7 +188,6 @@ CGFloat const PanelAnimationDuration = 0.2; if (self.mainViewTrailing.constant < .1) { // Hide the keyboard [viewController.view endEditing:YES]; - // Show [self showRightPanelAnimated:YES]; } else { From 82dabe019b5b933de833bc9d8bfa0be66116f6df Mon Sep 17 00:00:00 2001 From: "Suresh, Kamlesh" Date: Thu, 14 Feb 2019 16:17:41 -0500 Subject: [PATCH 5/5] rightPanelLinkDict --- MVMCoreUI/BaseControllers/MFViewController.m | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/MVMCoreUI/BaseControllers/MFViewController.m b/MVMCoreUI/BaseControllers/MFViewController.m index d2c1e7b3..cd245630 100644 --- a/MVMCoreUI/BaseControllers/MFViewController.m +++ b/MVMCoreUI/BaseControllers/MFViewController.m @@ -326,8 +326,9 @@ - (BOOL)isOverridingRightButton { - if ([self.loadObject.pageJSON dict:@"rightPanelButtonMap"]) { - [[MVMCoreActionHandler sharedActionHandler] handleActionWithDictionary:[self.loadObject.pageJSON dict:@"supportLink"] + NSDictionary *rightPanelLinkDict = [self.loadObject.pageJSON dict:@"rightPanelButtonLink"]; + if (rightPanelLinkDict) { + [[MVMCoreActionHandler sharedActionHandler] handleActionWithDictionary:rightPanelLinkDict additionalData:nil delegate:self]; return YES;