diff --git a/Sources/BraveStrings/BraveStrings.swift b/Sources/BraveStrings/BraveStrings.swift index feecdcc3f31..ab4d630719e 100644 --- a/Sources/BraveStrings/BraveStrings.swift +++ b/Sources/BraveStrings/BraveStrings.swift @@ -2883,6 +2883,11 @@ extension Strings { NSLocalizedString("vpn.contactFormIssue", tableName: "BraveShared", bundle: .module, value: "Issue", comment: "Specific issue field for customer support contact form.") + + public static let contactFormIssueDescription = + NSLocalizedString("vpn.contactFormIssueDescription", tableName: "BraveShared", bundle: .module, + value: "Please choose the cetagory that describes the issue.", + comment: "Description used for specific issue field for customer support contact form.") public static let contactFormFooterSharedWithGuardian = NSLocalizedString("vpn.contactFormFooterSharedWithGuardian", tableName: "BraveShared", bundle: .module, diff --git a/Sources/BraveVPN/BraveVPNContactFormViewController.swift b/Sources/BraveVPN/BraveVPNContactFormViewController.swift index bc899a4e2a0..ef8edab34c1 100644 --- a/Sources/BraveVPN/BraveVPNContactFormViewController.swift +++ b/Sources/BraveVPN/BraveVPNContactFormViewController.swift @@ -207,59 +207,29 @@ class BraveVPNContactFormViewController: TableViewController { } })), cellClass: MultilineSubtitleCell.self) - var section = Section(rows: [ + let section = Section(rows: [ hostnameRow, tunnelProtocolRow, subscriptionTypeRow, receiptRow, appVersionRow, timezoneRow, networkTypeRow, carrierRow, errorLogs ]) - // MARK: Issue - var issueRow = - Row( - text: Strings.VPN.contactFormIssue, detailText: IssueType.other.displayString, - accessory: .disclosureIndicator, cellClass: MultilineSubtitleCell.self) - - let optionChanged = { - [weak self] - (vc: OptionSelectionViewController, option: IssueType) -> Void in - self?.dataSource.reloadCell(row: issueRow, section: section, displayText: option.displayString) - self?.contactForm.issue = option.displayString ?? IssueType.other.displayString - } - - issueRow.selection = { [weak self] in - let optionsVC = - OptionSelectionViewController( - options: IssueType.allCases, - optionChanged: optionChanged) - - self?.navigationController?.pushViewController(optionsVC, animated: true) - } - - section.rows.append(issueRow) - let sendButton = Row( text: Strings.VPN.contactFormSendButton, selection: { [weak self] in guard let self = self else { return } - if !MFMailComposeViewController.canSendMail() { - Logger.module.error("Can't send email on this device") - let alert = UIAlertController( - title: Strings.genericErrorTitle, - message: Strings.VPN.contactFormEmailNotConfiguredBody, - preferredStyle: .alert) - let okAction = UIAlertAction(title: Strings.OKString, style: .default) - alert.addAction(okAction) - self.present(alert, animated: true) - return - } - - let mail = MFMailComposeViewController().then { - $0.mailComposeDelegate = self - $0.setToRecipients([self.supportEmail]) - } - - mail.setSubject(Strings.VPN.contactFormTitle) - mail.setMessageBody(self.composeEmailBody(with: self.contactForm), isHTML: false) - self.present(mail, animated: true) + let optionChanged = { [weak self] (vc: OptionSelectionViewController, option: IssueType) -> Void in + self?.contactForm.issue = option.displayString + self?.createEmailOutline() + } + + let optionsVC = + OptionSelectionViewController( + headerText: Strings.VPN.contactFormIssue, + footerText: Strings.VPN.contactFormIssueDescription, + options: IssueType.allCases, + optionChanged: optionChanged) + + self.navigationController?.pushViewController(optionsVC, animated: true) + }, cellClass: CenteredButtonCell.self) let footerText = @@ -268,6 +238,34 @@ class BraveVPNContactFormViewController: TableViewController { dataSource.sections = [section, buttonSection] } + + private func createEmailOutline() { + if !MFMailComposeViewController.canSendMail() { + Logger.module.error("Can't send email on this device") + let alert = UIAlertController( + title: Strings.genericErrorTitle, + message: Strings.VPN.contactFormEmailNotConfiguredBody, + preferredStyle: .alert) + let okAction = UIAlertAction(title: Strings.OKString, style: .default) + alert.addAction(okAction) + present(alert, animated: true) + return + } + + let mail = MFMailComposeViewController().then { + $0.mailComposeDelegate = self + $0.setToRecipients([self.supportEmail]) + } + + var formTitle = Strings.VPN.contactFormTitle + if let issue = contactForm.issue { + formTitle += " + \(issue)" + } + + mail.setSubject(formTitle) + mail.setMessageBody(self.composeEmailBody(with: self.contactForm), isHTML: false) + present(mail, animated: true) + } private var getNetworkType: String { let status = Reach().connectionStatus() @@ -291,10 +289,18 @@ class BraveVPNContactFormViewController: TableViewController { } private func composeEmailBody(with contactForm: ContactForm) -> String { - var body = "\n\n" + var body = "\n" body.append(contentsOf: "#### \(Strings.VPN.contactFormDoNotEditText) ####\n\n") + body.append(Strings.VPN.contactFormPlatform) + body.append("\n\(UIDevice.current.systemName)\n\n") + + if let issue = contactForm.issue { + body.append(Strings.VPN.contactFormIssue) + body.append("\n\(issue)\n\n") + } + if let hostname = contactForm.hostname { body.append(Strings.VPN.contactFormHostname) body.append("\n\(hostname)\n\n") @@ -314,10 +320,7 @@ class BraveVPNContactFormViewController: TableViewController { body.append(Strings.VPN.contactFormAppVersion) body.append("\n\(appVersion)\n\n") } - - body.append(Strings.VPN.contactFormPlatform) - body.append("\n\(UIDevice.current.systemName)\n\n") - + if let timezone = contactForm.timezone { body.append(Strings.VPN.contactFormTimezone) body.append("\n\(timezone)\n\n") @@ -346,11 +349,6 @@ class BraveVPNContactFormViewController: TableViewController { body.append("\n") } - if let issue = contactForm.issue { - body.append(Strings.VPN.contactFormIssue) - body.append("\n\(issue)\n\n") - } - if let receipt = contactForm.receipt { body.append(Strings.VPN.contactFormAppStoreReceipt) body.append("\n\(receipt)\n\n")