Skip to content

Commit

Permalink
Final NetP ship review feedback (#2221)
Browse files Browse the repository at this point in the history
  • Loading branch information
graeme authored Dec 5, 2023
1 parent fe7db6c commit 630a07f
Show file tree
Hide file tree
Showing 18 changed files with 57 additions and 39 deletions.
Binary file not shown.
12 changes: 12 additions & 0 deletions DuckDuckGo/Assets.xcassets/Card-24.imageset/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "Card-24.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "Rocket-24.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Binary file not shown.
4 changes: 2 additions & 2 deletions DuckDuckGo/NetworkProtectionInviteView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ private struct NetworkProtectionInviteMessageView<Content>: View where Content:
.padding(.bottom, 16)
interactiveContent()
Spacer()
Text(UserText.netPInviteOnlyMessage)
Text(UserText.networkProtectionWaitlistAvailabilityDisclaimer)
.foregroundColor(.init(designSystemColor: .textSecondary))
.daxFootnoteRegular()
.multilineTextAlignment(.center)
Expand All @@ -130,7 +130,7 @@ private struct NetworkProtectionInviteMessageData {
let imageIdentifier: String
let title: String
let message: String
let footer = UserText.netPInviteOnlyMessage
let footer = UserText.networkProtectionWaitlistAvailabilityDisclaimer
}

extension AnyTransition {
Expand Down
2 changes: 1 addition & 1 deletion DuckDuckGo/NetworkProtectionStatusView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ struct NetworkProtectionStatusView: View {
@ViewBuilder
private func inviteOnlyFooter() -> some View {
// Needs to be inlined like this for the markdown parsing to work
Text("\(UserText.netPInviteOnlyMessage) [\(UserText.netPStatusViewShareFeedback)](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)")
Text("\(UserText.networkProtectionWaitlistAvailabilityDisclaimer) [\(UserText.netPStatusViewShareFeedback)](https://form.asana.com/?k=_wNLt6YcT5ILpQjDuW0Mxw&d=137249556945)")
.foregroundColor(.init(designSystemColor: .textSecondary))
.accentColor(.init(designSystemColor: .accent))
.daxFootnoteRegular()
Expand Down
2 changes: 1 addition & 1 deletion DuckDuckGo/NetworkProtectionVPNSettingsView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ struct NetworkProtectionVPNSettingsView: View {
Text(string)
}
VStack(alignment: .leading) {
Text(UserText.netPPreferredLocationSettingTitle)
Text(UserText.netPVPNLocationTitle)
.daxBodyRegular()
.foregroundColor(.init(designSystemColor: .textPrimary))
Text(viewModel.preferredLocation.title)
Expand Down
8 changes: 3 additions & 5 deletions DuckDuckGo/UserText.swift
Original file line number Diff line number Diff line change
Expand Up @@ -627,7 +627,6 @@ In addition to the details entered into this form, your app issue report will co
static let netPInviteFieldPrompt = NSLocalizedString("network.protection.invite.field.prompt", value: "Invite Code", comment: "Prompt for the network protection invite code text field")
static let netPInviteSuccessTitle = NSLocalizedString("network.protection.invite.success.title", value: "Success! You’re in.", comment: "Title for the network protection invite success view")
static let netPInviteSuccessMessage = NSLocalizedString("network.protection.invite.success.message", value: "Hide your location from websites and conceal your online activity from Internet providers and others on your network.", comment: "Message for the network protection invite success view")
static let netPInviteOnlyMessage = NSLocalizedString("network.protection.invite.only.message", value: "DuckDuckGo Network Protection is currently invite-only.", comment: "Message explaining that netP is invite only")

static let netPStatusViewTitle = NSLocalizedString("network.protection.status.view.title", value: "Network Protection", comment: "Title label text for the status view when netP is disconnected")
static let netPStatusHeaderTitleOff = NSLocalizedString("network.protection.status.header.title.off", value: "Network Protection is Off", comment: "Header title label text for the status view when netP is disconnected")
Expand All @@ -650,7 +649,7 @@ In addition to the details entered into this form, your app issue report will co
return localized.format(arguments: city, country)
}
static let netPVPNNotificationsTitle = NSLocalizedString("network.protection.vpn.notifications.title", value: "VPN Notifications", comment: "Title for the VPN Notifications management screen.")
static let netPStatusViewShareFeedback = NSLocalizedString("network.protection.status.menu.share.feedback", value: "Share Feedback", comment: "The status view 'Share Feedback' button which is shown inline on the status view after the \(netPInviteOnlyMessage) text")
static let netPStatusViewShareFeedback = NSLocalizedString("network.protection.status.menu.share.feedback", value: "Share Feedback", comment: "The status view 'Share Feedback' button which is shown inline on the status view after the temporary free use footer text")
static let netPStatusViewErrorConnectionFailedTitle = NSLocalizedString("network.protection.status.view.error.connection.failed.title", value: "Failed to Connect.", comment: "Generic connection failed error title shown in NetworkProtection's status view.")
static let netPStatusViewErrorConnectionFailedMessage = NSLocalizedString("network.protection.status.view.error.connection.failed.message", value: "Please try again later.", comment: "Generic connection failed error message shown in NetworkProtection's status view.")
static let netPPreferredLocationSettingTitle = NSLocalizedString("network.protection.vpn.preferred.location.title", value: "Preferred Location", comment: "Title for the Preferred Location VPN Settings item.")
Expand All @@ -665,9 +664,9 @@ In addition to the details entered into this form, your app issue report will co
return message.format(arguments: count)
}
static let netPExcludeLocalNetworksSettingTitle = NSLocalizedString("network.protection.vpn.exclude.local.networks.setting.title", value: "Exclude Local Networks", comment: "Title for the Exclude Local Networks setting item.")
static let netPExcludeLocalNetworksSettingFooter = NSLocalizedString("network.protection.vpn.exclude.local.networks.setting.footer", value: "Bypass the VPN for local network connections, like to a printer.", comment: "Footer text for the Exclude Local Networks setting item.")
static let netPExcludeLocalNetworksSettingFooter = NSLocalizedString("network.protection.vpn.exclude.local.networks.setting.footer", value: "Let local traffic bypass the VPN and connect to devices on your local network, like a printer.", comment: "Footer text for the Exclude Local Networks setting item.")
static let netPSecureDNSSettingFooter = NSLocalizedString("network.protection.vpn.secure.dns.setting.footer", value: "Our VPN uses Secure DNS to keep your online activity private, so that your Internet provider can't see what websites you visit.", comment: "Footer text for the Always on VPN setting item.")
static let netPTurnOnNotificationsButtonTitle = NSLocalizedString("network.protection.turn.on.notifications.button.title", value: "Turn on Notifications", comment: "Title for the button to link to the iOS app settings and enable notifications app-wide.")
static let netPTurnOnNotificationsButtonTitle = NSLocalizedString("network.protection.turn.on.notifications.button.title", value: "Turn On Notifications", comment: "Title for the button to link to the iOS app settings and enable notifications app-wide.")
static let netPTurnOnNotificationsSectionFooter = NSLocalizedString("network.protection.turn.on.notifications.section.footer", value: "Allow DuckDuckGo to notify you if your connection drops or VPN status changes.", comment: "Footer text under the button to link to the iOS app settings and enable notifications app-wide.")
static let netPVPNAlertsToggleTitle = NSLocalizedString("network.protection.vpn.alerts.toggle.title", value: "VPN Alerts", comment: "Title for the toggle for VPN alerts.")
static let netPVPNAlertsToggleSectionFooter = NSLocalizedString("network.protection.vpn.alerts.toggle.section.footer", value: "Get notified if your connection drops or VPN status changes.", comment: "List section footer for the toggle for VPN alerts.")
Expand Down Expand Up @@ -894,7 +893,6 @@ But if you *do* want a peek under the hood, you can find more information about

// MARK: - VPN Waitlist

static let networkProtectionWaitlistJoinTitle = NSLocalizedString("network-protection.waitlist.join.title", value: "Network Protection Early Access", comment: "Title for Network Protection join waitlist screen")
static let networkProtectionWaitlistJoinSubtitle1 = NSLocalizedString("network-protection.waitlist.join.subtitle.1", value: "Secure your connection anytime, anywhere with Network Protection, the VPN from DuckDuckGo.", comment: "First subtitle for Network Protection join waitlist screen")
static let networkProtectionWaitlistJoinSubtitle2 = NSLocalizedString("network-protection.waitlist.join.subtitle.2", value: "Join the waitlist, and we’ll notify you when it’s your turn.", comment: "Second subtitle for Network Protection join waitlist screen")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ final class VPNWaitlistTermsAndConditionsViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()

title = UserText.networkProtectionWaitlistJoinTitle
title = UserText.netPNavTitle
addHostingControllerToViewHierarchy()

DailyPixel.fire(pixel: .networkProtectionWaitlistTermsDisplayed)
Expand Down
40 changes: 21 additions & 19 deletions DuckDuckGo/VPNWaitlistView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ struct VPNWaitlistSignUpView: View {
GeometryReader { proxy in
ScrollView {
VStack(alignment: .center, spacing: 8) {
HeaderView(imageName: "JoinVPNWaitlist", title: UserText.networkProtectionWaitlistJoinTitle)
HeaderView(imageName: "JoinVPNWaitlist", title: UserText.netPNavTitle)

Text(UserText.networkProtectionWaitlistJoinSubtitle1)
.daxBodyRegular()
Expand All @@ -87,7 +87,7 @@ struct VPNWaitlistSignUpView: View {
action(.custom(.openNetworkProtectionInviteCodeScreen))
})
.buttonStyle(RoundedButtonStyle(enabled: true, style: .bordered))
.padding(.top, 18)
.padding(.top, 16)

if requestInFlight {
HStack {
Expand All @@ -99,13 +99,11 @@ struct VPNWaitlistSignUpView: View {
}
.padding(.top, 14)
}

Spacer()
Text(UserText.networkProtectionWaitlistAvailabilityDisclaimer)
.font(.footnote)
.foregroundStyle(Color.secondary)
.padding(.top, 24)

Spacer()
}
.padding([.leading, .trailing], 24)
.frame(minHeight: proxy.size.height)
Expand Down Expand Up @@ -181,17 +179,22 @@ private struct AllowNotificationsView: View {
.fixMultilineScrollableText()
.lineSpacing(5)

Button(UserText.waitlistAllowNotifications) {

Button {
action(.openNotificationSettings)
} label: {
HStack {
Image("Bell-16")
Text(UserText.waitlistAllowNotifications)
.daxButton()
}
}
.buttonStyle(RoundedButtonStyle(enabled: true))

}
.padding(24)
.padding(20)
.background(Color.waitlistNotificationBackground)
.cornerRadius(8)
.shadow(color: .black.opacity(0.05), radius: 12, x: 0, y: 4)

}

}
Expand All @@ -208,17 +211,17 @@ struct VPNWaitlistInvitedView: View {

let benefitsList: [VPNWaitlistBenefit] = [
.init(
imageName: "Shield-16",
imageName: "Shield-24",
title: UserText.networkProtectionWaitlistInvitedSection1Title,
subtitle: UserText.networkProtectionWaitlistInvitedSection1Subtitle
),
.init(
imageName: "Rocket-16",
imageName: "Rocket-24",
title: UserText.networkProtectionWaitlistInvitedSection2Title,
subtitle: UserText.networkProtectionWaitlistInvitedSection2Subtitle
),
.init(
imageName: "Card-16",
imageName: "Card-24",
title: UserText.networkProtectionWaitlistInvitedSection3Title,
subtitle: UserText.networkProtectionWaitlistInvitedSection3Subtitle
),
Expand All @@ -232,7 +235,10 @@ struct VPNWaitlistInvitedView: View {
GeometryReader { proxy in
ScrollView {
VStack(alignment: .center, spacing: 0) {
HeaderView(imageName: "InvitedVPNWaitlist", title: UserText.networkProtectionWaitlistInvitedTitle)
HeaderView(
imageName: "InvitedVPNWaitlist",
title: UserText.networkProtectionWaitlistInvitedTitle
)

Text(UserText.networkProtectionWaitlistInvitedSubtitle)
.daxBodyRegular()
Expand All @@ -249,14 +255,11 @@ struct VPNWaitlistInvitedView: View {
Button(UserText.networkProtectionWaitlistGetStarted, action: { action(.custom(.openNetworkProtectionPrivacyPolicyScreen)) })
.buttonStyle(RoundedButtonStyle(enabled: true))
.padding(.top, 32)

Spacer()
Text(UserText.networkProtectionWaitlistAvailabilityDisclaimer)
.font(.footnote)
.foregroundStyle(Color.secondary)
.foregroundStyle(Color(designSystemColor: .textSecondary))
.padding(.top, 24)

Spacer()

}
.frame(maxWidth: .infinity, minHeight: proxy.size.height)
.padding([.leading, .trailing], 18)
Expand Down Expand Up @@ -344,7 +347,6 @@ private struct WaitlistListEntryView: View {
var body: some View {
HStack(alignment: .center, spacing: 16) {
Image(viewData.imageName)
.frame(maxWidth: 16, maxHeight: 16)

VStack(alignment: .leading, spacing: 2) {
Text(viewData.title)
Expand Down
2 changes: 1 addition & 1 deletion DuckDuckGo/VPNWaitlistViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ final class VPNWaitlistViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()

title = UserText.networkProtectionWaitlistJoinTitle
title = UserText.netPNavTitle

addHostingControllerToViewHierarchy()

Expand Down
12 changes: 3 additions & 9 deletions DuckDuckGo/en.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -1495,9 +1495,6 @@ https://duckduckgo.com/mac";
/* Second subtitle for Network Protection join waitlist screen */
"network-protection.waitlist.join.subtitle.2" = "Join the waitlist, and we’ll notify you when it’s your turn.";

/* Title for Network Protection join waitlist screen */
"network-protection.waitlist.join.title" = "Network Protection Early Access";

/* Title for Network Protection joined waitlist screen */
"network-protection.waitlist.joined.title" = "You’re on the list!";

Expand Down Expand Up @@ -1540,9 +1537,6 @@ https://duckduckgo.com/mac";
/* Prompt for the network protection invite code text field */
"network.protection.invite.field.prompt" = "Invite Code";

/* Message explaining that netP is invite only */
"network.protection.invite.only.message" = "DuckDuckGo Network Protection is currently invite-only.";

/* Message for the network protection invite success view */
"network.protection.invite.success.message" = "Hide your location from websites and conceal your online activity from Internet providers and others on your network.";

Expand Down Expand Up @@ -1573,7 +1567,7 @@ https://duckduckgo.com/mac";
/* Header title label text for the status view when netP is connected */
"network.protection.status.header.title.on" = "Network Protection is On";

/* The status view 'Share Feedback' button which is shown inline on the status view after the \(netPInviteOnlyMessage) text */
/* The status view 'Share Feedback' button which is shown inline on the status view after the temporary free use footer text */
"network.protection.status.menu.share.feedback" = "Share Feedback";

/* Connection details label shown in NetworkProtection's status view. */
Expand All @@ -1598,7 +1592,7 @@ https://duckduckgo.com/mac";
"network.protection.status.view.title" = "Network Protection";

/* Title for the button to link to the iOS app settings and enable notifications app-wide. */
"network.protection.turn.on.notifications.button.title" = "Turn on Notifications";
"network.protection.turn.on.notifications.button.title" = "Turn On Notifications";

/* Footer text under the button to link to the iOS app settings and enable notifications app-wide. */
"network.protection.turn.on.notifications.section.footer" = "Allow DuckDuckGo to notify you if your connection drops or VPN status changes.";
Expand All @@ -1610,7 +1604,7 @@ https://duckduckgo.com/mac";
"network.protection.vpn.alerts.toggle.title" = "VPN Alerts";

/* Footer text for the Exclude Local Networks setting item. */
"network.protection.vpn.exclude.local.networks.setting.footer" = "Bypass the VPN for local network connections, like to a printer.";
"network.protection.vpn.exclude.local.networks.setting.footer" = "Let local traffic bypass the VPN and connect to devices on your local network, like a printer.";

/* Title for the Exclude Local Networks setting item. */
"network.protection.vpn.exclude.local.networks.setting.title" = "Exclude Local Networks";
Expand Down

0 comments on commit 630a07f

Please sign in to comment.