From 62d1c2d882a9acf224f6dac49af0e09acd094f95 Mon Sep 17 00:00:00 2001 From: Davide De Rosa Date: Thu, 18 Oct 2018 09:52:23 +0200 Subject: [PATCH] Add promoting alert for subreddit --- Passepartout-iOS/Global/Macros.swift | 7 +++++ .../Organizer/OrganizerViewController.swift | 27 ++++++++++++++++++- .../Resources/en.lproj/Localizable.strings | 5 ++++ .../Sources/Model/TransientStore.swift | 13 +++++++++ Passepartout/Sources/SwiftGen+Strings.swift | 14 ++++++++++ 5 files changed, 65 insertions(+), 1 deletion(-) diff --git a/Passepartout-iOS/Global/Macros.swift b/Passepartout-iOS/Global/Macros.swift index 4b3cc95f..c28a1e24 100644 --- a/Passepartout-iOS/Global/Macros.swift +++ b/Passepartout-iOS/Global/Macros.swift @@ -58,6 +58,13 @@ extension UIAlertController { } } + func addAction(_ title: String, handler: @escaping () -> Void) { + let action = UIAlertAction(title: title, style: .default) { (action) in + handler() + } + addAction(action) + } + func addDestructiveAction(_ title: String, handler: @escaping () -> Void) { let action = UIAlertAction(title: title, style: .destructive) { (action) in handler() diff --git a/Passepartout-iOS/Scenes/Organizer/OrganizerViewController.swift b/Passepartout-iOS/Scenes/Organizer/OrganizerViewController.swift index b6b703a2..2a3cd84c 100644 --- a/Passepartout-iOS/Scenes/Organizer/OrganizerViewController.swift +++ b/Passepartout-iOS/Scenes/Organizer/OrganizerViewController.swift @@ -35,7 +35,9 @@ class OrganizerViewController: UITableViewController, TableModelHost { private var hostProfiles: [HostConnectionProfile] = [] private var availableProviderNames: [Infrastructure.Name]? - + + private var didShowSubreddit = false + // MARK: TableModelHost let model: TableModel = { @@ -103,6 +105,25 @@ class OrganizerViewController: UITableViewController, TableModelHost { service.delegate = self } + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + + if !didShowSubreddit && !TransientStore.shared.didHandleSubreddit { + didShowSubreddit = true + + let alert = Macros.alert(L10n.About.Cells.DiscussReddit.caption, L10n.Reddit.message) + alert.addDefaultAction(L10n.Reddit.Buttons.subscribe) { + TransientStore.shared.didHandleSubreddit = true + self.subscribeSubreddit() + } + alert.addAction(L10n.Reddit.Buttons.never) { + TransientStore.shared.didHandleSubreddit = true + } + alert.addCancelAction(L10n.Reddit.Buttons.remind) + present(alert, animated: true, completion: nil) + } + } + override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool { if let cell = sender as? UITableViewCell, let indexPath = tableView.indexPath(for: cell) { return model.row(at: indexPath) == .profile @@ -227,6 +248,10 @@ class OrganizerViewController: UITableViewController, TableModelHost { alert.addCancelAction(L10n.Global.cancel) present(alert, animated: true, completion: nil) } + + private func subscribeSubreddit() { + UIApplication.shared.open(AppConstants.URLs.subreddit, options: [:], completionHandler: nil) + } } // MARK: - diff --git a/Passepartout/Resources/en.lproj/Localizable.strings b/Passepartout/Resources/en.lproj/Localizable.strings index 5f348034..b2b1b152 100644 --- a/Passepartout/Resources/en.lproj/Localizable.strings +++ b/Passepartout/Resources/en.lproj/Localizable.strings @@ -27,6 +27,11 @@ "global.cancel" = "Cancel"; "global.next" = "Next"; +"reddit.message" = "Did you know that Passepartout has a subreddit? Subscribe for updates or to discuss issues, features, new platforms or whatever you like.\n\nIt's also a great way to show you care about this project."; +"reddit.buttons.subscribe" = "Subscribe now!"; +"reddit.buttons.remind" = "Remind me later"; +"reddit.buttons.never" = "Don't ask again"; + "organizer.sections.providers.header" = "Networks"; "organizer.sections.providers.footer" = "Here you find a few public infrastructures offering preset configuration profiles."; "organizer.sections.hosts.header" = "Hosts"; diff --git a/Passepartout/Sources/Model/TransientStore.swift b/Passepartout/Sources/Model/TransientStore.swift index 8125e194..58ee4846 100644 --- a/Passepartout/Sources/Model/TransientStore.swift +++ b/Passepartout/Sources/Model/TransientStore.swift @@ -29,12 +29,25 @@ import SwiftyBeaver private let log = SwiftyBeaver.self class TransientStore { + private struct Keys { + static let didHandleSubreddit = "DidHandleSubreddit" + } + static let shared = TransientStore() private let servicePath: URL let service: ConnectionService + var didHandleSubreddit: Bool { + get { + return UserDefaults.standard.bool(forKey: Keys.didHandleSubreddit) + } + set { + UserDefaults.standard.set(newValue, forKey: Keys.didHandleSubreddit) + } + } + private init() { servicePath = FileManager.default.userURL( for: .documentDirectory, diff --git a/Passepartout/Sources/SwiftGen+Strings.swift b/Passepartout/Sources/SwiftGen+Strings.swift index 4e3eedea..4e37c50a 100644 --- a/Passepartout/Sources/SwiftGen+Strings.swift +++ b/Passepartout/Sources/SwiftGen+Strings.swift @@ -395,6 +395,20 @@ internal enum L10n { } } + internal enum Reddit { + /// Did you know that Passepartout has a subreddit? Subscribe for updates or to discuss issues, features, new platforms or whatever you like.\n\nIt's also a great way to show you care about this project. + internal static let message = L10n.tr("Localizable", "reddit.message") + + internal enum Buttons { + /// Don't ask again + internal static let never = L10n.tr("Localizable", "reddit.buttons.never") + /// Remind me later + internal static let remind = L10n.tr("Localizable", "reddit.buttons.remind") + /// Subscribe now! + internal static let subscribe = L10n.tr("Localizable", "reddit.buttons.subscribe") + } + } + internal enum Service { internal enum Alerts {