From 432aeea1b54768f73efa8f3d2ad3e7fc7f8bc6b4 Mon Sep 17 00:00:00 2001 From: Stuart Breckenridge Date: Tue, 20 Dec 2022 17:26:19 +0800 Subject: [PATCH] Localises IconImage descriptions - Deletes UIKit Timeline customizer --- NetNewsWire.xcodeproj/project.pbxproj | 14 +-- Shared/Extensions/IconImage.swift | 6 +- .../Localizations}/Account.strings | 0 .../Localizations}/Inspector.strings | 0 .../Localizations}/Settings.strings | 3 + .../TimelineCustomizerViewController.swift | 106 ------------------ .../TimelinePreviewTableViewController.swift | 94 ---------------- 7 files changed, 9 insertions(+), 214 deletions(-) rename {iOS/Account => Shared/Localizations}/Account.strings (100%) rename {iOS/Inspector => Shared/Localizations}/Inspector.strings (100%) rename {iOS/Settings => Shared/Localizations}/Settings.strings (97%) delete mode 100644 iOS/Settings/TimelineCustomizerViewController.swift delete mode 100644 iOS/Settings/TimelinePreviewTableViewController.swift diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj index 17fdf5687..a33b9a761 100644 --- a/NetNewsWire.xcodeproj/project.pbxproj +++ b/NetNewsWire.xcodeproj/project.pbxproj @@ -78,8 +78,6 @@ 51077C5A27A86D16000C71DB /* Hyperlegible.nnwtheme in Resources */ = {isa = PBXBuildFile; fileRef = 51077C5727A86D16000C71DB /* Hyperlegible.nnwtheme */; }; 5108F6B62375E612001ABC45 /* CacheCleaner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5108F6B52375E612001ABC45 /* CacheCleaner.swift */; }; 5108F6B72375E612001ABC45 /* CacheCleaner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5108F6B52375E612001ABC45 /* CacheCleaner.swift */; }; - 5108F6D22375EED2001ABC45 /* TimelineCustomizerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5108F6D12375EED2001ABC45 /* TimelineCustomizerViewController.swift */; }; - 5108F6D42375EEEF001ABC45 /* TimelinePreviewTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5108F6D32375EEEF001ABC45 /* TimelinePreviewTableViewController.swift */; }; 5108F6D823763094001ABC45 /* TickMarkSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5108F6D723763094001ABC45 /* TickMarkSlider.swift */; }; 510C416124E5CDE3008226FD /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 510C416024E5CDE3008226FD /* ShareViewController.swift */; }; 510C416424E5CDE3008226FD /* ShareViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 510C416224E5CDE3008226FD /* ShareViewController.xib */; }; @@ -1200,8 +1198,6 @@ 5103A9F624225E4C00410853 /* AccountsAddCloudKitWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountsAddCloudKitWindowController.swift; sourceTree = ""; }; 51077C5727A86D16000C71DB /* Hyperlegible.nnwtheme */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = Hyperlegible.nnwtheme; sourceTree = ""; }; 5108F6B52375E612001ABC45 /* CacheCleaner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CacheCleaner.swift; sourceTree = ""; }; - 5108F6D12375EED2001ABC45 /* TimelineCustomizerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineCustomizerViewController.swift; sourceTree = ""; }; - 5108F6D32375EEEF001ABC45 /* TimelinePreviewTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelinePreviewTableViewController.swift; sourceTree = ""; }; 5108F6D723763094001ABC45 /* TickMarkSlider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TickMarkSlider.swift; sourceTree = ""; }; 510C415C24E5CDE3008226FD /* NetNewsWire Share Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "NetNewsWire Share Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; 510C416024E5CDE3008226FD /* ShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareViewController.swift; sourceTree = ""; }; @@ -1927,7 +1923,6 @@ 5123DB95233EC69300282CC9 /* Inspector */ = { isa = PBXGroup; children = ( - DFB34981294B0B9B00BC81AD /* Inspector.strings */, DFB3497D294B076C00BC81AD /* Views */, ); path = Inspector; @@ -1998,7 +1993,6 @@ 516A093E236123A800EAE89B /* Account */ = { isa = PBXGroup; children = ( - DFB34992294C0B7400BC81AD /* Account.strings */, DFB3498F294C0B0D00BC81AD /* Views */, ); path = Account; @@ -2029,7 +2023,6 @@ 5183CCEB227117C70010922C /* Settings */ = { isa = PBXGroup; children = ( - DF32ABEA29494CF0008E3A12 /* Settings.strings */, DFD406F8291FB5D500C02962 /* Views */, 5137C2E926F63AE6009EFEDB /* ArticleThemeImporter.swift */, 510FFAB226EEA22C00F32265 /* ArticleThemesTableViewController.swift */, @@ -2037,8 +2030,6 @@ DF32ABE629493192008E3A12 /* SettingsComboTableViewCell.swift */, DF32ABE729493193008E3A12 /* SettingsComboTableViewCell.xib */, 516A093A2360A4A000EAE89B /* SettingsTableViewCell.xib */, - 5108F6D12375EED2001ABC45 /* TimelineCustomizerViewController.swift */, - 5108F6D32375EEEF001ABC45 /* TimelinePreviewTableViewController.swift */, ); path = Settings; sourceTree = ""; @@ -2986,8 +2977,11 @@ DFB34985294B3B0800BC81AD /* Localizations */ = { isa = PBXGroup; children = ( + DFB34992294C0B7400BC81AD /* Account.strings */, DFB34983294B3AFF00BC81AD /* Buttons.strings */, DFB34998294C4F1D00BC81AD /* Errors.strings */, + DFB34981294B0B9B00BC81AD /* Inspector.strings */, + DF32ABEA29494CF0008E3A12 /* Settings.strings */, DFB34995294C4DCB00BC81AD /* LocalizedNetNewsWireError.swift */, ); path = Localizations; @@ -4316,7 +4310,6 @@ 51B5C87D23F2346200032075 /* ExtensionContainersFile.swift in Sources */, 51102165233A7D6C0007A5F7 /* ArticleExtractorButton.swift in Sources */, C5A6ED6D23C9B0C800AB6BE2 /* UIActivityViewController-Extensions.swift in Sources */, - 5108F6D42375EEEF001ABC45 /* TimelinePreviewTableViewController.swift in Sources */, 84CAFCA522BC8C08007694F0 /* FetchRequestQueue.swift in Sources */, 512392BE24E33A3C00F11704 /* RedditSelectAccountTableViewController.swift in Sources */, 515A517B243E90260089E588 /* ExtensionPoint.swift in Sources */, @@ -4381,7 +4374,6 @@ 5183CCD0226E1E880010922C /* NonIntrinsicLabel.swift in Sources */, 5137C2EA26F63AE6009EFEDB /* ArticleThemeImporter.swift in Sources */, 51C4529F22650A1900C03939 /* AuthorAvatarDownloader.swift in Sources */, - 5108F6D22375EED2001ABC45 /* TimelineCustomizerViewController.swift in Sources */, 519E743D22C663F900A78E47 /* SceneDelegate.swift in Sources */, FFD43E412340F488009E5CA3 /* MarkAsReadAlertController.swift in Sources */, 51C452A322650A1E00C03939 /* HTMLMetadataDownloader.swift in Sources */, diff --git a/Shared/Extensions/IconImage.swift b/Shared/Extensions/IconImage.swift index 341a4de7a..b8eef9555 100644 --- a/Shared/Extensions/IconImage.swift +++ b/Shared/Extensions/IconImage.swift @@ -185,11 +185,11 @@ enum IconSize: Int, CaseIterable, CustomStringConvertible { var description: String { switch self { case .small: - return "Small" + return Bundle.main.localizedString(forKey: "SMALL_ICON_SIZE", value: nil, table: "Settings") case .medium: - return "Medium" + return Bundle.main.localizedString(forKey: "MEDIUM_ICON_SIZE", value: nil, table: "Settings") case .large: - return "Large" + return Bundle.main.localizedString(forKey: "LARGE_ICON_SIZE", value: nil, table: "Settings") } } diff --git a/iOS/Account/Account.strings b/Shared/Localizations/Account.strings similarity index 100% rename from iOS/Account/Account.strings rename to Shared/Localizations/Account.strings diff --git a/iOS/Inspector/Inspector.strings b/Shared/Localizations/Inspector.strings similarity index 100% rename from iOS/Inspector/Inspector.strings rename to Shared/Localizations/Inspector.strings diff --git a/iOS/Settings/Settings.strings b/Shared/Localizations/Settings.strings similarity index 97% rename from iOS/Settings/Settings.strings rename to Shared/Localizations/Settings.strings index ba1cc744e..38435801a 100644 --- a/iOS/Settings/Settings.strings +++ b/Shared/Localizations/Settings.strings @@ -46,6 +46,9 @@ "ARTICLE_THEME" = "Article Theme"; "CONFIRM_MARK_ALL_AS_READ" = "Confirm Mark All as Read"; "OPEN_LINKS_IN_APP" = "Open Links in NetNewsWire"; +"SMALL_ICON_SIZE" = "Small"; +"MEDIUM_ICON_SIZE" = "Medium"; +"LARGE_ICON_SIZE" = "Large"; /* Account Management */ "ADD_ACCOUNT" = "Add Account"; diff --git a/iOS/Settings/TimelineCustomizerViewController.swift b/iOS/Settings/TimelineCustomizerViewController.swift deleted file mode 100644 index 8b0f796de..000000000 --- a/iOS/Settings/TimelineCustomizerViewController.swift +++ /dev/null @@ -1,106 +0,0 @@ -// -// TimelineCustomizerViewController.swift -// NetNewsWire-iOS -// -// Created by Maurice Parker on 11/8/19. -// Copyright © 2019 Ranchero Software. All rights reserved. -// - -import UIKit -import SwiftUI -import RSCore - -struct TimelineCustomizerWrapper: UIViewControllerRepresentable { - public func makeUIViewController(context: Context) -> TimelineCustomizerViewController { - let controller = UIStoryboard.settings.instantiateController(ofType: TimelineCustomizerViewController.self) - return controller - } - - public func updateUIViewController(_ uiViewController: TimelineCustomizerViewController, context: Context) { - // - } - - public typealias UIViewControllerType = TimelineCustomizerViewController -} - - -class TimelineCustomizerViewController: UIViewController { - - @IBOutlet weak var iconSizeSliderContainerView: UIView! - @IBOutlet weak var iconSizeSlider: TickMarkSlider! - @IBOutlet weak var numberOfLinesSliderContainerView: UIView! - @IBOutlet weak var numberOfLinesSlider: TickMarkSlider! - - @IBOutlet weak var previewWidthConstraint: NSLayoutConstraint! - @IBOutlet weak var previewHeightConstraint: NSLayoutConstraint! - - @IBOutlet weak var previewContainerView: UIView! - var previewController: TimelinePreviewTableViewController { - return children.first as! TimelinePreviewTableViewController - } - - override func viewDidLoad() { - super.viewDidLoad() - - iconSizeSliderContainerView.layer.cornerRadius = 10 - iconSizeSlider.value = Float(AppDefaults.shared.timelineIconSize.rawValue) - iconSizeSlider.addTickMarks() - - numberOfLinesSliderContainerView.layer.cornerRadius = 10 - numberOfLinesSlider.value = Float(AppDefaults.shared.timelineNumberOfLines) - numberOfLinesSlider.addTickMarks() - } - - override func viewWillAppear(_ animated: Bool) { - super.viewDidAppear(animated) - updatePreviewBorder() - updatePreview() - } - - override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { - updatePreviewBorder() - updatePreview() - } - - @IBAction func iconSizeChanged(_ sender: Any) { - guard let iconSize = IconSize(rawValue: Int(iconSizeSlider.value.rounded())) else { return } - AppDefaults.shared.timelineIconSize = iconSize - updatePreview() - } - - @IBAction func numberOfLinesChanged(_ sender: Any) { - AppDefaults.shared.timelineNumberOfLines = Int(numberOfLinesSlider.value.rounded()) - updatePreview() - } - -} - -// MARK: Private - -private extension TimelineCustomizerViewController { - - func updatePreview() { - let previewWidth: CGFloat = { - if traitCollection.userInterfaceIdiom == .phone { - return view.bounds.width - } else { - return view.bounds.width / 1.5 - } - }() - - previewWidthConstraint.constant = previewWidth - previewHeightConstraint.constant = previewController.heightFor(width: previewWidth) - - previewController.reload() - } - - func updatePreviewBorder() { - if traitCollection.userInterfaceStyle == .dark { - previewContainerView.layer.borderColor = UIColor.black.cgColor - previewContainerView.layer.borderWidth = 1 - } else { - previewContainerView.layer.borderWidth = 0 - } - } - -} diff --git a/iOS/Settings/TimelinePreviewTableViewController.swift b/iOS/Settings/TimelinePreviewTableViewController.swift deleted file mode 100644 index 919c4b0e6..000000000 --- a/iOS/Settings/TimelinePreviewTableViewController.swift +++ /dev/null @@ -1,94 +0,0 @@ -// -// TimelinePreviewTableViewController.swift -// NetNewsWire-iOS -// -// Created by Maurice Parker on 11/8/19. -// Copyright © 2019 Ranchero Software. All rights reserved. -// - -import UIKit -import Articles -import SwiftUI - -struct TimelinePreviewWrapper: UIViewControllerRepresentable { - - func makeUIViewController(context: Context) -> TimelinePreviewTableViewController { - let controller = UIStoryboard.settings.instantiateViewController(withIdentifier: "TimelinePreviewTableViewController") as! TimelinePreviewTableViewController - return controller - } - - func updateUIViewController(_ uiViewController: TimelinePreviewTableViewController, context: Context) { - // - } - - typealias UIViewControllerType = TimelinePreviewTableViewController - -} - - -class TimelinePreviewTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { - - @IBOutlet weak var tableView: UITableView! - - override func viewDidLoad() { - super.viewDidLoad() - - tableView.delegate = self - tableView.dataSource = self - - } - - func heightFor(width: CGFloat) -> CGFloat { - if UIApplication.shared.preferredContentSizeCategory.isAccessibilityCategory { - let layout = MasterTimelineAccessibilityCellLayout(width: width, insets: tableView.safeAreaInsets, cellData: prototypeCellData) - return layout.height - } else { - let layout = MasterTimelineDefaultCellLayout(width: width, insets: tableView.safeAreaInsets, cellData: prototypeCellData) - return layout.height - } - } - - // MARK: - Table view data source - - func numberOfSections(in tableView: UITableView) -> Int { - return 1 - } - - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return 1 - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! MasterTimelineTableViewCell - cell.cellData = prototypeCellData - return cell - } - - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - tableView.selectRow(at: nil, animated: true, scrollPosition: .none) - } - // MARK: API - - func reload() { - tableView.reloadData() - } - -} - -// MARK: Private - -private extension TimelinePreviewTableViewController { - - var prototypeCellData: MasterTimelineCellData { - let longTitle = "Enim ut tellus elementum sagittis vitae et. Nibh praesent tristique magna sit amet purus gravida quis blandit. Neque volutpat ac tincidunt vitae semper quis lectus nulla. Massa id neque aliquam vestibulum morbi blandit. Ultrices vitae auctor eu augue. Enim eu turpis egestas pretium aenean pharetra magna. Eget gravida cum sociis natoque. Sit amet consectetur adipiscing elit. Auctor eu augue ut lectus arcu bibendum. Maecenas volutpat blandit aliquam etiam erat velit. Ut pharetra sit amet aliquam id diam maecenas ultricies. In hac habitasse platea dictumst quisque sagittis purus sit amet." - - let prototypeID = "prototype" - let status = ArticleStatus(articleID: prototypeID, read: false, starred: false, dateArrived: Date()) - let prototypeArticle = Article(accountID: prototypeID, articleID: prototypeID, webFeedID: prototypeID, uniqueID: prototypeID, title: longTitle, contentHTML: nil, contentText: nil, url: nil, externalURL: nil, summary: nil, imageURL: nil, datePublished: nil, dateModified: nil, authors: nil, status: status) - - let iconImage = IconImage(AppAssets.faviconTemplateImage.withTintColor(AppAssets.secondaryAccentColor)) - - return MasterTimelineCellData(article: prototypeArticle, showFeedName: .feed, feedName: "Feed Name", byline: nil, iconImage: iconImage, showIcon: true, featuredImage: nil, numberOfLines: AppDefaults.shared.timelineNumberOfLines, iconSize: AppDefaults.shared.timelineIconSize, hideSeparator: false) - } - -}