Skip to content
This repository has been archived by the owner on May 10, 2024. It is now read-only.

Fix #7828: Adding Issue Category Separately to VPN Contact Form #7829

Merged
merged 3 commits into from
Aug 8, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions Sources/BraveStrings/BraveStrings.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
108 changes: 53 additions & 55 deletions Sources/BraveVPN/BraveVPNContactFormViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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<IssueType>, 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<IssueType>(
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<IssueType>, option: IssueType) -> Void in
self?.contactForm.issue = option.displayString
self?.createEmailOutline()
}

let optionsVC =
OptionSelectionViewController<IssueType>(
headerText: Strings.VPN.contactFormIssue,
footerText: Strings.VPN.contactFormIssueDescription,
options: IssueType.allCases,
optionChanged: optionChanged)

self.navigationController?.pushViewController(optionsVC, animated: true)

}, cellClass: CenteredButtonCell.self)

let footerText =
Expand All @@ -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()
Expand All @@ -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")
Expand All @@ -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")
Expand Down Expand Up @@ -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")
Expand Down