diff --git a/CHANGES.rst b/CHANGES.rst index 342e45a41..fbd44c524 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,7 +5,7 @@ Changes to be released in next version * 🙌 Improvements - * + * Added "Continue in background" button to bug report screen 🐛 Bugfix * diff --git a/Riot/Assets/en.lproj/Vector.strings b/Riot/Assets/en.lproj/Vector.strings index 910125790..43eeda5d2 100644 --- a/Riot/Assets/en.lproj/Vector.strings +++ b/Riot/Assets/en.lproj/Vector.strings @@ -854,6 +854,7 @@ Tap the + to start adding people."; "bug_report_progress_zipping" = "Collecting logs"; "bug_report_progress_uploading" = "Uploading report"; "bug_report_send" = "Send"; +"bug_report_background_mode" = "Continue in background"; // Widget "widget_no_integrations_server_configured" = "No integrations server configured"; diff --git a/Riot/Generated/Strings.swift b/Riot/Generated/Strings.swift index 8bbb3550d..3bdfa2fc6 100644 --- a/Riot/Generated/Strings.swift +++ b/Riot/Generated/Strings.swift @@ -378,6 +378,10 @@ internal enum VectorL10n { internal static var bugCrashReportTitle: String { return VectorL10n.tr("Vector", "bug_crash_report_title") } + /// Continue in background + internal static var bugReportBackgroundMode: String { + return VectorL10n.tr("Vector", "bug_report_background_mode") + } /// Please describe the bug. What did you do? What did you expect to happen? What actually happened? internal static var bugReportDescription: String { return VectorL10n.tr("Vector", "bug_report_description") diff --git a/Riot/Modules/BugReport/BugReportViewController.h b/Riot/Modules/BugReport/BugReportViewController.h index 1182622bc..972e02d24 100644 --- a/Riot/Modules/BugReport/BugReportViewController.h +++ b/Riot/Modules/BugReport/BugReportViewController.h @@ -48,6 +48,8 @@ @property (weak, nonatomic) IBOutlet UIButton *cancelButton; @property (weak, nonatomic) IBOutlet UIButton *sendButton; +@property (weak, nonatomic) IBOutlet UIButton *backgroundButton; + + (instancetype)bugReportViewController; - (void)showInViewController:(UIViewController*)viewController; diff --git a/Riot/Modules/BugReport/BugReportViewController.m b/Riot/Modules/BugReport/BugReportViewController.m index 2be791daa..2756dd83e 100644 --- a/Riot/Modules/BugReport/BugReportViewController.m +++ b/Riot/Modules/BugReport/BugReportViewController.m @@ -33,6 +33,7 @@ @property (nonatomic) BOOL sendLogs; @property (nonatomic) BOOL sendScreenshot; +@property (nonatomic) BOOL isSendingLogs; @property (weak, nonatomic) IBOutlet UIView *overlayView; @@ -95,6 +96,8 @@ [_cancelButton setTitle:[NSBundle mxk_localizedStringForKey:@"cancel"] forState:UIControlStateHighlighted]; [_sendButton setTitle:NSLocalizedStringFromTable(@"bug_report_send", @"Vector", nil) forState:UIControlStateNormal]; [_sendButton setTitle:NSLocalizedStringFromTable(@"bug_report_send", @"Vector", nil) forState:UIControlStateHighlighted]; + [_backgroundButton setTitle:NSLocalizedStringFromTable(@"bug_report_background_mode", @"Vector", nil) forState:UIControlStateNormal]; + [_backgroundButton setTitle:NSLocalizedStringFromTable(@"bug_report_background_mode", @"Vector", nil) forState:UIControlStateHighlighted]; // Do not send empty report _sendButton.enabled = NO;; @@ -160,6 +163,7 @@ self.sendButton.tintColor = ThemeService.shared.theme.tintColor; self.cancelButton.tintColor = ThemeService.shared.theme.tintColor; + self.backgroundButton.tintColor = ThemeService.shared.theme.tintColor; _bugReportDescriptionTextView.layer.borderColor = ThemeService.shared.theme.headerBackgroundColor.CGColor; @@ -236,6 +240,15 @@ } } +- (void)setIsSendingLogs:(BOOL)isSendingLogs +{ + _isSendingLogs = isSendingLogs; + + _sendButton.hidden = isSendingLogs; + _sendingContainer.hidden = !isSendingLogs; + _backgroundButton.hidden = !isSendingLogs; +} + #pragma mark - MXKViewController - (void)dismissKeyboard { @@ -277,8 +290,7 @@ - (IBAction)onSendButtonPress:(id)sender { - _sendButton.hidden = YES; - _sendingContainer.hidden = NO; + self.isSendingLogs = YES; // Setup data to send bugReportRestClient = [[MXBugReportRestClient alloc] initWithBugReportEndpoint:BuildSettings.bugReportEndpointUrlString]; @@ -373,45 +385,75 @@ [bugReportDescription appendFormat:@"\n\n\n--------------------------------------------------------------------------------\n\n%@", crashLog]; } + // starting a background task to have a bit of extra time in case of user forgets about the report and sends the app to background + __block UIBackgroundTaskIdentifier operationBackgroundId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ + [[UIApplication sharedApplication] endBackgroundTask:operationBackgroundId]; + operationBackgroundId = UIBackgroundTaskInvalid; + }]; + // Submit [bugReportRestClient sendBugReport:bugReportDescription sendLogs:_sendLogs sendCrashLog:_reportCrash sendFiles:files attachGitHubLabels:gitHubLabels progress:^(MXBugReportState state, NSProgress *progress) { switch (state) { case MXBugReportStateProgressZipping: - _sendingLabel.text = NSLocalizedStringFromTable(@"bug_report_progress_zipping", @"Vector", nil); + self->_sendingLabel.text = NSLocalizedStringFromTable(@"bug_report_progress_zipping", @"Vector", nil); break; case MXBugReportStateProgressUploading: - _sendingLabel.text = NSLocalizedStringFromTable(@"bug_report_progress_uploading", @"Vector", nil); + self->_sendingLabel.text = NSLocalizedStringFromTable(@"bug_report_progress_uploading", @"Vector", nil); break; default: break; } - _sendingProgress.progress = progress.fractionCompleted; + self->_sendingProgress.progress = progress.fractionCompleted; } success:^{ - bugReportRestClient = nil; + self->bugReportRestClient = nil; - if (_reportCrash) + if (self->_reportCrash) { // Erase the crash log [MXLogger deleteCrashLog]; } [self dismissViewControllerAnimated:YES completion:nil]; + + if (operationBackgroundId != UIBackgroundTaskInvalid) + { + [[UIApplication sharedApplication] endBackgroundTask:operationBackgroundId]; + operationBackgroundId = UIBackgroundTaskInvalid; + } } failure:^(NSError *error) { - bugReportRestClient = nil; + if (self.presentingViewController) + { + self->bugReportRestClient = nil; - [[AppDelegate theDelegate] showErrorAsAlert:error]; + [[AppDelegate theDelegate] showErrorAsAlert:error]; - _sendButton.hidden = NO; - _sendingContainer.hidden = YES; + self.isSendingLogs = NO; + } + else + { + [[[UIApplication sharedApplication].windows firstObject].rootViewController presentViewController:self animated:YES completion:^{ + self->bugReportRestClient = nil; + + [[AppDelegate theDelegate] showErrorAsAlert:error]; + + self.isSendingLogs = NO; + }]; + } + + if (operationBackgroundId != UIBackgroundTaskInvalid) + { + [[UIApplication sharedApplication] endBackgroundTask:operationBackgroundId]; + operationBackgroundId = UIBackgroundTaskInvalid; + } }]; } @@ -424,8 +466,7 @@ [bugReportRestClient cancel]; bugReportRestClient = nil; - _sendButton.hidden = NO; - _sendingContainer.hidden = YES; + self.isSendingLogs = NO; } else { @@ -450,4 +491,9 @@ self.sendScreenshot = !self.sendScreenshot; } +- (IBAction)onBackgroundTap:(id)sender +{ + [self dismissViewControllerAnimated:YES completion:^{}]; +} + @end diff --git a/Riot/Modules/BugReport/BugReportViewController.xib b/Riot/Modules/BugReport/BugReportViewController.xib index 0448023f2..9137bd20b 100644 --- a/Riot/Modules/BugReport/BugReportViewController.xib +++ b/Riot/Modules/BugReport/BugReportViewController.xib @@ -1,16 +1,15 @@ - - - - + + - + + @@ -53,29 +52,36 @@ - - + - + + @@ -200,6 +207,7 @@ + @@ -248,6 +256,7 @@ +