From cca1929837caf6ab0125511ba12eac28c65c5b99 Mon Sep 17 00:00:00 2001 From: Stuart Breckenridge Date: Mon, 28 Feb 2022 07:56:58 +0800 Subject: [PATCH 1/4] Changes when appearance menu is configured Fixes #3483 --- iOS/Article/ArticleViewController.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/iOS/Article/ArticleViewController.swift b/iOS/Article/ArticleViewController.swift index 1da544502..4fae590ae 100644 --- a/iOS/Article/ArticleViewController.swift +++ b/iOS/Article/ArticleViewController.swift @@ -162,7 +162,6 @@ class ArticleViewController: UIViewController, MainControllerIdentifiable { searchBar.delegate = self view.bringSubviewToFront(searchBar) - configureAppearanceMenu() updateUI() } @@ -234,6 +233,8 @@ class ArticleViewController: UIViewController, MainControllerIdentifiable { starBarButtonItem.accLabelText = NSLocalizedString("Star Article", comment: "Star Article") } + configureAppearanceMenu() + } override func contentScrollView(for edge: NSDirectionalRectEdge) -> UIScrollView? { From e2242a79281831df14251aa0f0d1ff2268054a05 Mon Sep 17 00:00:00 2001 From: Stuart Breckenridge Date: Thu, 3 Mar 2022 08:33:53 +0800 Subject: [PATCH 2/4] Appearance menu changes: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - On iPad—theme selector only, with theme selector image. - On iPhone—theme selector and full size toggle; Aa is the image used. Reader view and notifications options have been removed. --- iOS/AppAssets.swift | 4 ++ iOS/Article/ArticleViewController.swift | 52 +++++++------------------ 2 files changed, 17 insertions(+), 39 deletions(-) diff --git a/iOS/AppAssets.swift b/iOS/AppAssets.swift index d5808dcc5..4cf2dca03 100644 --- a/iOS/AppAssets.swift +++ b/iOS/AppAssets.swift @@ -58,6 +58,10 @@ struct AppAssets { static var appBadgeImage: UIImage = { return UIImage(systemName: "app.badge")! }() + + static var articleAppearanceImage: UIImage = { + return UIImage(systemName: "textformat.size")! + }() static var articleExtractorError: UIImage = { return UIImage(named: "articleExtractorError")! diff --git a/iOS/Article/ArticleViewController.swift b/iOS/Article/ArticleViewController.swift index 4fae590ae..df9db6f21 100644 --- a/iOS/Article/ArticleViewController.swift +++ b/iOS/Article/ArticleViewController.swift @@ -241,6 +241,11 @@ class ArticleViewController: UIViewController, MainControllerIdentifiable { return currentWebViewController?.webView?.scrollView } + + /// The appearance menu is different on iPhone and iPad. + /// On iPad, it's only the theme selector. On iPhone, the appearance menu + /// contains the the theme selector and full screen options. + /// - Parameter sender: `Any?` @objc func configureAppearanceMenu(_ sender: Any? = nil) { @@ -267,6 +272,12 @@ class ArticleViewController: UIViewController, MainControllerIdentifiable { let themeMenu = UIMenu(title: "Theme", image: AppAssets.themeImage, identifier: nil, options: .singleSelection, children: [ defaultThemeMenu, customThemeMenu]) + if UIDevice.current.userInterfaceIdiom == .pad { + appearanceBarButtonItem.image = AppAssets.themeImage + appearanceBarButtonItem.menu = themeMenu + return + } + var appearanceChildren: [UIMenuElement] = [themeMenu] if let currentWebViewController = currentWebViewController { @@ -292,49 +303,12 @@ class ArticleViewController: UIViewController, MainControllerIdentifiable { } } - var feedManagementChildren = [UIMenuElement]() - - 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]) + let menu = UIMenu(title: "", image: nil, identifier: nil, options: .displayInline, children: [appearanceMenu]) + appearanceBarButtonItem.image = AppAssets.articleAppearanceImage appearanceBarButtonItem.menu = menu - } From fc323c40722535114c561d39415978bcfd22db17 Mon Sep 17 00:00:00 2001 From: Stuart Breckenridge Date: Thu, 3 Mar 2022 08:50:55 +0800 Subject: [PATCH 3/4] Adds long press menu to article extractor button --- iOS/Article/ArticleViewController.swift | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/iOS/Article/ArticleViewController.swift b/iOS/Article/ArticleViewController.swift index df9db6f21..dd89e9006 100644 --- a/iOS/Article/ArticleViewController.swift +++ b/iOS/Article/ArticleViewController.swift @@ -234,6 +234,7 @@ class ArticleViewController: UIViewController, MainControllerIdentifiable { } configureAppearanceMenu() + configureArticleExtractorMenu() } @@ -311,6 +312,29 @@ class ArticleViewController: UIViewController, MainControllerIdentifiable { appearanceBarButtonItem.menu = menu } + private func configureArticleExtractorMenu() { + 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 + self?.currentWebViewController?.toggleArticleExtractor() + } else { + feed.isArticleExtractorAlwaysOn?.toggle() + } + self?.configureArticleExtractorMenu() + } + let menu = UIMenu(title: feed.nameForDisplay, image: AppAssets.articleExtractorOffSF, identifier: nil, options: .displayInline, children: [readerAction]) + articleExtractorButton.menu = menu + articleExtractorButton.showsMenuAsPrimaryAction = false + } + } + @objc func reloadDueToThemeChange(_ notification: Notification) { From 115fa702caa8aa57152d8f39c9334cce5d55393e Mon Sep 17 00:00:00 2001 From: Stuart Breckenridge Date: Thu, 3 Mar 2022 09:01:51 +0800 Subject: [PATCH 4/4] rebuild menu after toggle --- iOS/Article/ArticleViewController.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/iOS/Article/ArticleViewController.swift b/iOS/Article/ArticleViewController.swift index dd89e9006..9a989cb14 100644 --- a/iOS/Article/ArticleViewController.swift +++ b/iOS/Article/ArticleViewController.swift @@ -415,6 +415,7 @@ class ArticleViewController: UIViewController, MainControllerIdentifiable { @IBAction func toggleArticleExtractor(_ sender: Any) { currentWebViewController?.toggleArticleExtractor() + configureArticleExtractorMenu() } @IBAction func nextUnread(_ sender: Any) {