From 949613d7e5b1f7e1d1a95b23c67a8c039d16ac3e Mon Sep 17 00:00:00 2001 From: Stephan Diederich Date: Fri, 26 Jul 2013 15:06:17 +0200 Subject: [PATCH 1/3] move protocol to class extension --- Classes/BITFeedbackManager.h | 2 +- Classes/BITFeedbackManagerPrivate.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Classes/BITFeedbackManager.h b/Classes/BITFeedbackManager.h index e84996e40b..a3650d630b 100644 --- a/Classes/BITFeedbackManager.h +++ b/Classes/BITFeedbackManager.h @@ -94,7 +94,7 @@ typedef enum { feedback message. */ -@interface BITFeedbackManager : BITHockeyBaseManager +@interface BITFeedbackManager : BITHockeyBaseManager ///----------------------------------------------------------------------------- /// @name General settings diff --git a/Classes/BITFeedbackManagerPrivate.h b/Classes/BITFeedbackManagerPrivate.h index cd8bd31460..cbf9684a55 100644 --- a/Classes/BITFeedbackManagerPrivate.h +++ b/Classes/BITFeedbackManagerPrivate.h @@ -32,7 +32,7 @@ #import "BITFeedbackMessage.h" -@interface BITFeedbackManager () { +@interface BITFeedbackManager () { } From c816f4dc191b5a42ffcd4b4e1dd963e76d3de0ee Mon Sep 17 00:00:00 2001 From: Stephan Diederich Date: Fri, 26 Jul 2013 15:33:12 +0200 Subject: [PATCH 2/3] add feedbackManager delegate that is informed about incoming feedback fixes #30 --- Classes/BITFeedbackManager.h | 14 +++++++++- Classes/BITFeedbackManager.m | 28 ++++++++++++-------- Classes/BITFeedbackManagerDelegate.h | 29 +++++++++++++++++++++ Classes/BITHockeyManager.m | 1 + Support/HockeySDK.xcodeproj/project.pbxproj | 4 +++ 5 files changed, 64 insertions(+), 12 deletions(-) create mode 100644 Classes/BITFeedbackManagerDelegate.h diff --git a/Classes/BITFeedbackManager.h b/Classes/BITFeedbackManager.h index a3650d630b..dd2b4be5e1 100644 --- a/Classes/BITFeedbackManager.h +++ b/Classes/BITFeedbackManager.h @@ -49,7 +49,7 @@ typedef enum { @class BITFeedbackMessage; - +@class BITFeedbackManagerDelegate; /** The feedback module. @@ -96,6 +96,18 @@ typedef enum { @interface BITFeedbackManager : BITHockeyBaseManager +///----------------------------------------------------------------------------- +/// @name Delegate +///----------------------------------------------------------------------------- + +/** + Sets the `BITFeedbackManagerDelegate` delegate. + + Can be set to be notified when new feedback is received from the server. + */ +@property (nonatomic, weak) id delegate; + + ///----------------------------------------------------------------------------- /// @name General settings ///----------------------------------------------------------------------------- diff --git a/Classes/BITFeedbackManager.m b/Classes/BITFeedbackManager.m index c54e76da40..104cd186f1 100644 --- a/Classes/BITFeedbackManager.m +++ b/Classes/BITFeedbackManager.m @@ -670,17 +670,23 @@ BITFeedbackMessage *latestMessage = [self lastMessageHavingID]; if (self.userEmail && latestMessage.email && [self.userEmail compare:latestMessage.email] == NSOrderedSame) latestMessageFromUser = YES; - - if (!latestMessageFromUser && self.showAlertOnIncomingMessages && !self.currentFeedbackListViewController && !self.currentFeedbackComposeViewController) { - UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:BITHockeyLocalizedString(@"HockeyFeedbackNewMessageTitle") - message:BITHockeyLocalizedString(@"HockeyFeedbackNewMessageText") - delegate:self - cancelButtonTitle:BITHockeyLocalizedString(@"HockeyFeedbackIgnore") - otherButtonTitles:BITHockeyLocalizedString(@"HockeyFeedbackShow"), nil - ]; - [alertView setTag:0]; - [alertView show]; - _incomingMessagesAlertShowing = YES; + + if (!latestMessageFromUser) { + if([self.delegate respondsToSelector:@selector(feedbackManagerDidReceiveNewFeedback:)]) { + [self.delegate feedbackManagerDidReceiveNewFeedback:self]; + } + + if(self.showAlertOnIncomingMessages && !self.currentFeedbackListViewController && !self.currentFeedbackComposeViewController) { + UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:BITHockeyLocalizedString(@"HockeyFeedbackNewMessageTitle") + message:BITHockeyLocalizedString(@"HockeyFeedbackNewMessageText") + delegate:self + cancelButtonTitle:BITHockeyLocalizedString(@"HockeyFeedbackIgnore") + otherButtonTitles:BITHockeyLocalizedString(@"HockeyFeedbackShow"), nil + ]; + [alertView setTag:0]; + [alertView show]; + _incomingMessagesAlertShowing = YES; + } } } diff --git a/Classes/BITFeedbackManagerDelegate.h b/Classes/BITFeedbackManagerDelegate.h new file mode 100644 index 0000000000..f592a92be8 --- /dev/null +++ b/Classes/BITFeedbackManagerDelegate.h @@ -0,0 +1,29 @@ +// +// BITFeedbackManagerDelegate.h +// HockeySDK +// +// Created by Stephan Diederich on 26.07.13. +// +// + +#import + +@class BITFeedbackManager; + +/** + * Delegate protocol which is notified about changes in the feedbackManager + * @TODO + * * move shouldShowUpdateAlert from feedbackManager here + */ +@protocol BITFeedbackManagerDelegate + +@optional + +/** + * can be implemented to know when new feedback from the server arrived + * + * @param feedbackManager The feedbackManager which did detect the new messages + */ +- (void) feedbackManagerDidReceiveNewFeedback:(BITFeedbackManager*) feedbackManager; + +@end diff --git a/Classes/BITHockeyManager.m b/Classes/BITHockeyManager.m index 3e430e0ca8..7bb46ba47d 100644 --- a/Classes/BITHockeyManager.m +++ b/Classes/BITHockeyManager.m @@ -250,6 +250,7 @@ BITHockeyLog(@"INFO: Setup FeedbackManager"); _feedbackManager = [[BITFeedbackManager alloc] initWithAppIdentifier:_appIdentifier isAppStoreEnvironemt:_appStoreEnvironment]; + _feedbackManager.delegate = _delegate; #if JIRA_MOBILE_CONNECT_SUPPORT_ENABLED // Only if JMC is part of the project diff --git a/Support/HockeySDK.xcodeproj/project.pbxproj b/Support/HockeySDK.xcodeproj/project.pbxproj index 5e93f406bf..049936254d 100644 --- a/Support/HockeySDK.xcodeproj/project.pbxproj +++ b/Support/HockeySDK.xcodeproj/project.pbxproj @@ -112,6 +112,7 @@ 1EF95CA6162CB037000AE3AD /* BITFeedbackActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EF95CA4162CB036000AE3AD /* BITFeedbackActivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1EF95CA7162CB037000AE3AD /* BITFeedbackActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EF95CA5162CB036000AE3AD /* BITFeedbackActivity.m */; }; 1EF95CAA162CB314000AE3AD /* BITFeedbackComposeViewControllerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EF95CA9162CB313000AE3AD /* BITFeedbackComposeViewControllerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E405266217A2AD300096359C /* BITFeedbackManagerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = E405266117A2AD300096359C /* BITFeedbackManagerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -226,6 +227,7 @@ 1EF95CA9162CB313000AE3AD /* BITFeedbackComposeViewControllerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITFeedbackComposeViewControllerDelegate.h; sourceTree = ""; }; BEE0207C16C5107E004426EA /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/HockeySDK.strings; sourceTree = ""; }; E400561D148D79B500EB22B9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + E405266117A2AD300096359C /* BITFeedbackManagerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITFeedbackManagerDelegate.h; sourceTree = ""; }; E41EB465148D7BF50015DEDC /* BITHockeyManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITHockeyManager.h; sourceTree = ""; }; E41EB466148D7BF50015DEDC /* BITHockeyManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITHockeyManager.m; sourceTree = ""; }; E41EB48B148D7C4E0015DEDC /* CrashReporter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CrashReporter.framework; path = ../Vendor/CrashReporter.framework; sourceTree = ""; }; @@ -332,6 +334,7 @@ 1EF95CA5162CB036000AE3AD /* BITFeedbackActivity.m */, 1E49A4331612223B00463151 /* BITFeedbackManager.h */, 1E49A4341612223B00463151 /* BITFeedbackManager.m */, + E405266117A2AD300096359C /* BITFeedbackManagerDelegate.h */, 1E49A4351612223B00463151 /* BITFeedbackManagerPrivate.h */, ); name = Feedback; @@ -464,6 +467,7 @@ 1E49A4BE161222B900463151 /* BITHockeyHelper.h in Headers */, 1E49A4C4161222B900463151 /* BITAppStoreHeader.h in Headers */, 1E49A4CA161222B900463151 /* BITStoreButton.h in Headers */, + E405266217A2AD300096359C /* BITFeedbackManagerDelegate.h in Headers */, 1E49A4D0161222B900463151 /* BITWebTableViewCell.h in Headers */, 1E49A4D8161222D400463151 /* HockeySDKPrivate.h in Headers */, 1EC69F601615001500808FD9 /* BITHockeyManagerPrivate.h in Headers */, From c71c764303d0e7d84de39a0a044d203fc2dc881f Mon Sep 17 00:00:00 2001 From: Stephan Diederich Date: Fri, 26 Jul 2013 15:34:39 +0200 Subject: [PATCH 3/3] strongly type the BITHockeyManagerDelegate instead of being id, use the proper protocol. Also let the BITHockeyManagerDelegate protocol implement the module protocols. --- Classes/BITHockeyManager.h | 4 ++-- Classes/BITHockeyManagerDelegate.h | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Classes/BITHockeyManager.h b/Classes/BITHockeyManager.h index c29653e4c8..7d1c3476c5 100644 --- a/Classes/BITHockeyManager.h +++ b/Classes/BITHockeyManager.h @@ -118,7 +118,7 @@ @param appIdentifier The app identifier that should be used. @param delegate `nil` or the class implementing the option protocols */ -- (void)configureWithIdentifier:(NSString *)appIdentifier delegate:(id)delegate; +- (void)configureWithIdentifier:(NSString *)appIdentifier delegate:(id)delegate; /** @@ -154,7 +154,7 @@ @param liveIdentifier The app identifier for the app store configurations. @param delegate `nil` or the class implementing the optional protocols */ -- (void)configureWithBetaIdentifier:(NSString *)betaIdentifier liveIdentifier:(NSString *)liveIdentifier delegate:(id)delegate; +- (void)configureWithBetaIdentifier:(NSString *)betaIdentifier liveIdentifier:(NSString *)liveIdentifier delegate:(id)delegate; /** diff --git a/Classes/BITHockeyManagerDelegate.h b/Classes/BITHockeyManagerDelegate.h index 078075a075..c861b85e53 100644 --- a/Classes/BITHockeyManagerDelegate.h +++ b/Classes/BITHockeyManagerDelegate.h @@ -27,17 +27,19 @@ */ #import - +#import "BITCrashManagerDelegate.h" +#import "BITUpdateManagerDelegate.h" +#import "BITFeedbackManagerDelegate.h" @class BITHockeyManager; @class BITHockeyBaseManager; /** The `BITHockeyManagerDelegate` formal protocol defines methods further configuring - the behaviour of `BITHockeyManager`. + the behaviour of `BITHockeyManager`, as well as the delegate of the modules it manages. */ -@protocol BITHockeyManagerDelegate +@protocol BITHockeyManagerDelegate @optional