diff --git a/Classes/BITFeedbackManager.h b/Classes/BITFeedbackManager.h index e84996e40b..dd2b4be5e1 100644 --- a/Classes/BITFeedbackManager.h +++ b/Classes/BITFeedbackManager.h @@ -49,7 +49,7 @@ typedef enum { @class BITFeedbackMessage; - +@class BITFeedbackManagerDelegate; /** The feedback module. @@ -94,7 +94,19 @@ typedef enum { feedback message. */ -@interface BITFeedbackManager : BITHockeyBaseManager +@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 f447dac20b..d6258d629f 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/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 () { } diff --git a/Classes/BITHockeyManager.h b/Classes/BITHockeyManager.h index 9ff38fd787..de5773952e 100644 --- a/Classes/BITHockeyManager.h +++ b/Classes/BITHockeyManager.h @@ -121,7 +121,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; /** @@ -157,7 +157,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/BITHockeyManager.m b/Classes/BITHockeyManager.m index 0529f2cfcb..0be737dff0 100644 --- a/Classes/BITHockeyManager.m +++ b/Classes/BITHockeyManager.m @@ -290,6 +290,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/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 diff --git a/Support/HockeySDK.xcodeproj/project.pbxproj b/Support/HockeySDK.xcodeproj/project.pbxproj index e3e8dcb3fd..ffaaac7f5a 100644 --- a/Support/HockeySDK.xcodeproj/project.pbxproj +++ b/Support/HockeySDK.xcodeproj/project.pbxproj @@ -129,6 +129,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 */ @@ -274,6 +275,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 = ""; }; @@ -418,6 +420,7 @@ 1EF95CA5162CB036000AE3AD /* BITFeedbackActivity.m */, 1E49A4331612223B00463151 /* BITFeedbackManager.h */, 1E49A4341612223B00463151 /* BITFeedbackManager.m */, + E405266117A2AD300096359C /* BITFeedbackManagerDelegate.h */, 1E49A4351612223B00463151 /* BITFeedbackManagerPrivate.h */, ); name = Feedback; @@ -575,6 +578,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 */,