diff --git a/iOS/AppDefaults.swift b/iOS/AppDefaults.swift
index 1d29bbc41..4c6ec9d75 100644
--- a/iOS/AppDefaults.swift
+++ b/iOS/AppDefaults.swift
@@ -51,6 +51,7 @@ final class AppDefaults {
static let timelineSortDirection = "timelineSortDirection"
static let articleFullscreenAvailable = "articleFullscreenAvailable"
static let articleFullscreenEnabled = "articleFullscreenEnabled"
+ static let hasUsedFullScreenPreviously = "hasUsedFullScreenPreviously"
static let confirmMarkAllAsRead = "confirmMarkAllAsRead"
static let lastRefresh = "lastRefresh"
static let addWebFeedAccountID = "addWebFeedAccountID"
@@ -123,6 +124,15 @@ final class AppDefaults {
}
}
+ var hasUsedFullScreenPreviously: Bool {
+ get {
+ return UserDefaults.standard.bool(forKey: Key.hasUsedFullScreenPreviously)
+ }
+ set {
+ UserDefaults.standard.set(newValue, forKey: Key.hasUsedFullScreenPreviously)
+ }
+ }
+
var useSystemBrowser: Bool {
get {
return UserDefaults.standard.bool(forKey: Key.useSystemBrowser)
diff --git a/iOS/Article/ArticleViewController.swift b/iOS/Article/ArticleViewController.swift
index 08aee3429..1da544502 100644
--- a/iOS/Article/ArticleViewController.swift
+++ b/iOS/Article/ArticleViewController.swift
@@ -265,9 +265,8 @@ class ArticleViewController: UIViewController, MainControllerIdentifiable {
let customThemeMenu = UIMenu(title: "", image: nil, identifier: nil, options: .displayInline, children: themeActions)
let themeMenu = UIMenu(title: "Theme", image: AppAssets.themeImage, identifier: nil, options: .singleSelection, children: [ defaultThemeMenu, customThemeMenu])
- themeMenu.subtitle = NSLocalizedString("Change the look of articles.", comment: "Change theme")
- var children: [UIMenuElement] = [themeMenu]
+ var appearanceChildren: [UIMenuElement] = [themeMenu]
if let currentWebViewController = currentWebViewController {
if currentWebViewController.isFullScreenAvailable {
@@ -278,18 +277,66 @@ class ArticleViewController: UIViewController, MainControllerIdentifiable {
attributes: [],
state: .off) { [weak self] _ in
self?.currentWebViewController?.hideBars()
+ if AppDefaults.shared.hasUsedFullScreenPreviously == false {
+ let alert = UIAlertController(title: NSLocalizedString("Exit Full Screen", comment: "Full Screen"),
+ message: NSLocalizedString("To exit Full Screen mode tap the top of the screen.\n\nYou'll only see this message once.", comment: "Full screen explainer."),
+ preferredStyle: .alert)
+ alert.addAction(UIAlertAction(title: NSLocalizedString("Dismiss", comment: "Dismiss"), style: .default, handler: { _ in
+ AppDefaults.shared.hasUsedFullScreenPreviously = true
+ }))
+ self?.present(alert, animated: true, completion: nil)
+ }
}
- fullScreenAction.subtitle = NSLocalizedString("Tap the top of the screen to exit Full Screen.", comment: "Exit criteria.")
- children.append(fullScreenAction)
+ appearanceChildren.append(fullScreenAction)
}
}
- let appearanceMenu = UIMenu(title: NSLocalizedString("Article Appearance", comment: "Appearance"), image: UIImage(systemName: "textformat.size") , identifier: nil, options: .displayInline, children: children)
+ var feedManagementChildren = [UIMenuElement]()
- appearanceBarButtonItem.menu = appearanceMenu
+ if let feed = article?.webFeed {
+ let extractorOn = feed.isArticleExtractorAlwaysOn ?? false
+ let readerAction = UIAction(title: NSLocalizedString("Always Use Reader View", comment: "Always Use Reader View"),
+ image: AppAssets.articleExtractorOffSF,
+ identifier: nil,
+ discoverabilityTitle: nil,
+ attributes: [],
+ state: extractorOn ? .on : .off) { [weak self] _ in
+ if feed.isArticleExtractorAlwaysOn == nil {
+ feed.isArticleExtractorAlwaysOn = true
+ } else {
+ feed.isArticleExtractorAlwaysOn?.toggle()
+ }
+ self?.configureAppearanceMenu()
+ }
+ feedManagementChildren.append(readerAction)
+
+ let notifyOn = feed.isNotifyAboutNewArticles ?? false
+ let notifyAction = UIAction(title: NSLocalizedString("Notify About New Articles", comment: "Notify About New Articles"),
+ image: AppAssets.appBadgeImage,
+ identifier: nil,
+ discoverabilityTitle: nil,
+ attributes: [],
+ state: notifyOn ? .on : .off) { [weak self] _ in
+ if feed.isNotifyAboutNewArticles == nil {
+ feed.isNotifyAboutNewArticles = true
+ } else {
+ feed.isNotifyAboutNewArticles?.toggle()
+ }
+ self?.configureAppearanceMenu()
+ }
+ feedManagementChildren.append(notifyAction)
+ }
+
+ let appearanceMenu = UIMenu(title: NSLocalizedString("Article Appearance", comment: "Appearance"), image: nil, identifier: nil, options: .displayInline, children: appearanceChildren)
+ let feedMgmtMenu = UIMenu(title: NSLocalizedString("Feed Management", comment: "Feed Management"), image: nil , identifier: nil, options: .displayInline, children: feedManagementChildren)
+
+ let menu = UIMenu(title: "", image: nil, identifier: nil, options: .displayInline, children: [appearanceMenu, feedMgmtMenu])
+
+ appearanceBarButtonItem.menu = menu
}
+
@objc
func reloadDueToThemeChange(_ notification: Notification) {
currentWebViewController?.fullReload()
diff --git a/iOS/Base.lproj/Main.storyboard b/iOS/Base.lproj/Main.storyboard
index 268758478..1aaef03a2 100644
--- a/iOS/Base.lproj/Main.storyboard
+++ b/iOS/Base.lproj/Main.storyboard
@@ -17,7 +17,7 @@
-
+
@@ -90,7 +90,7 @@
-
+
@@ -420,6 +420,7 @@
+
@@ -427,7 +428,6 @@
-