diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj index dcaaca48f..a25414c57 100644 --- a/NetNewsWire.xcodeproj/project.pbxproj +++ b/NetNewsWire.xcodeproj/project.pbxproj @@ -42,11 +42,8 @@ 513146C5235A8FDB00387FDC /* SyncDatabase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51554C01228B6EB50055115A /* SyncDatabase.framework */; }; 51314704235C41FC00387FDC /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 51314707235C41FC00387FDC /* Intents.intentdefinition */; }; 51314705235C41FC00387FDC /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 51314707235C41FC00387FDC /* Intents.intentdefinition */; }; - 51322855232EED360033D4ED /* VibrantSelectAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51322854232EED360033D4ED /* VibrantSelectAction.swift */; }; - 51322859232FDDB80033D4ED /* VibrantButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51322858232FDDB80033D4ED /* VibrantButtonStyle.swift */; }; 513228FB233037630033D4ED /* Reachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 513228F2233037620033D4ED /* Reachability.swift */; }; 513228FC233037630033D4ED /* Reachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 513228F2233037620033D4ED /* Reachability.swift */; }; - 513229312330523F0033D4ED /* AttributedStringView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 513229302330523F0033D4ED /* AttributedStringView.swift */; }; 513C5CE9232571C2003D4054 /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 513C5CE8232571C2003D4054 /* ShareViewController.swift */; }; 513C5CEC232571C2003D4054 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 513C5CEA232571C2003D4054 /* MainInterface.storyboard */; }; 513C5CF0232571C2003D4054 /* NetNewsWire iOS Share Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 513C5CE6232571C2003D4054 /* NetNewsWire iOS Share Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; @@ -196,9 +193,6 @@ 51D5948722668EFA00DFC836 /* MarkStatusCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84702AA31FA27AC0006B8943 /* MarkStatusCommand.swift */; }; 51D6A5BC23199C85001C27D8 /* MasterTimelineDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51D6A5BB23199C85001C27D8 /* MasterTimelineDataSource.swift */; }; 51D87EE12311D34700E63F03 /* ActivityType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51D87EE02311D34700E63F03 /* ActivityType.swift */; }; - 51E149B3234D82E40004F7A5 /* PasswordField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E149B2234D82E40004F7A5 /* PasswordField.swift */; }; - 51E149C0234D839E0004F7A5 /* ShowHidePasswordView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 51E149BF234D839E0004F7A5 /* ShowHidePasswordView.xib */; }; - 51E149C2234D852F0004F7A5 /* ShowHidePasswordView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E149C1234D852F0004F7A5 /* ShowHidePasswordView.swift */; }; 51E3EB33229AB02C00645299 /* ErrorHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E3EB32229AB02C00645299 /* ErrorHandler.swift */; }; 51E3EB3D229AB08300645299 /* ErrorHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E3EB3C229AB08300645299 /* ErrorHandler.swift */; }; 51E595A5228CC36500FCC42B /* ArticleStatusSyncTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E595A4228CC36500FCC42B /* ArticleStatusSyncTimer.swift */; }; @@ -417,7 +411,6 @@ D5F4EDB720074D6500B9E363 /* Feed+Scriptability.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5F4EDB620074D6500B9E363 /* Feed+Scriptability.swift */; }; D5F4EDB920074D7C00B9E363 /* Folder+Scriptability.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5F4EDB820074D7C00B9E363 /* Folder+Scriptability.swift */; }; DD82AB0A231003F6002269DF /* SharingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD82AB09231003F6002269DF /* SharingTests.swift */; }; - DF999FF722B5AEFA0064B687 /* SafariView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF999FF622B5AEFA0064B687 /* SafariView.swift */; }; FF3ABF13232599810074C542 /* ArticleSorterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF3ABF09232599450074C542 /* ArticleSorterTests.swift */; }; FF3ABF1523259DDB0074C542 /* ArticleSorter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF3ABF1423259DDB0074C542 /* ArticleSorter.swift */; }; FF3ABF162325AF5D0074C542 /* ArticleSorter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF3ABF1423259DDB0074C542 /* ArticleSorter.swift */; }; @@ -747,10 +740,7 @@ 513146B1235A81A400387FDC /* AddFeedIntentHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddFeedIntentHandler.swift; sourceTree = ""; }; 51314706235C41FC00387FDC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.intentdefinition; name = Base; path = Base.lproj/Intents.intentdefinition; sourceTree = ""; }; 51314714235C420900387FDC /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Intents.strings; sourceTree = ""; }; - 51322854232EED360033D4ED /* VibrantSelectAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VibrantSelectAction.swift; sourceTree = ""; }; - 51322858232FDDB80033D4ED /* VibrantButtonStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VibrantButtonStyle.swift; sourceTree = ""; }; 513228F2233037620033D4ED /* Reachability.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Reachability.swift; sourceTree = ""; }; - 513229302330523F0033D4ED /* AttributedStringView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttributedStringView.swift; sourceTree = ""; }; 513C5CE6232571C2003D4054 /* NetNewsWire iOS Share Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "NetNewsWire iOS Share Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; 513C5CE8232571C2003D4054 /* ShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareViewController.swift; sourceTree = ""; }; 513C5CEB232571C2003D4054 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; @@ -833,9 +823,6 @@ 51CC9B3D231720B2000E842F /* MasterFeedDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterFeedDataSource.swift; sourceTree = ""; }; 51D6A5BB23199C85001C27D8 /* MasterTimelineDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterTimelineDataSource.swift; sourceTree = ""; }; 51D87EE02311D34700E63F03 /* ActivityType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityType.swift; sourceTree = ""; }; - 51E149B2234D82E40004F7A5 /* PasswordField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordField.swift; sourceTree = ""; }; - 51E149BF234D839E0004F7A5 /* ShowHidePasswordView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ShowHidePasswordView.xib; sourceTree = ""; }; - 51E149C1234D852F0004F7A5 /* ShowHidePasswordView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShowHidePasswordView.swift; sourceTree = ""; }; 51E3EB32229AB02C00645299 /* ErrorHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorHandler.swift; sourceTree = ""; }; 51E3EB3C229AB08300645299 /* ErrorHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorHandler.swift; sourceTree = ""; }; 51E595A4228CC36500FCC42B /* ArticleStatusSyncTimer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticleStatusSyncTimer.swift; sourceTree = ""; }; @@ -1066,7 +1053,6 @@ D5F4EDB620074D6500B9E363 /* Feed+Scriptability.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Feed+Scriptability.swift"; sourceTree = ""; }; D5F4EDB820074D7C00B9E363 /* Folder+Scriptability.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Folder+Scriptability.swift"; sourceTree = ""; }; DD82AB09231003F6002269DF /* SharingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SharingTests.swift; sourceTree = ""; }; - DF999FF622B5AEFA0064B687 /* SafariView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SafariView.swift; sourceTree = ""; }; FF3ABF09232599450074C542 /* ArticleSorterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticleSorterTests.swift; sourceTree = ""; }; FF3ABF1423259DDB0074C542 /* ArticleSorter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticleSorter.swift; sourceTree = ""; }; FFD43E372340F320009E5CA3 /* UndoAvailableAlertController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UndoAvailableAlertController.swift; sourceTree = ""; }; @@ -1315,20 +1301,6 @@ path = Activity; sourceTree = ""; }; - 5194B5E222B693EC00144881 /* SwiftUI Extensions */ = { - isa = PBXGroup; - children = ( - 513229302330523F0033D4ED /* AttributedStringView.swift */, - DF999FF622B5AEFA0064B687 /* SafariView.swift */, - 51322858232FDDB80033D4ED /* VibrantButtonStyle.swift */, - 51322854232EED360033D4ED /* VibrantSelectAction.swift */, - 51E149B2234D82E40004F7A5 /* PasswordField.swift */, - 51E149C1234D852F0004F7A5 /* ShowHidePasswordView.swift */, - 51E149BF234D839E0004F7A5 /* ShowHidePasswordView.xib */, - ); - path = "SwiftUI Extensions"; - sourceTree = ""; - }; 519D740423243C68008BB345 /* Model Extensions */ = { isa = PBXGroup; children = ( @@ -2021,7 +1993,6 @@ 5183CCDB226F1EEB0010922C /* Progress */, 5183CCEB227117C70010922C /* Settings */, 519D740423243C68008BB345 /* Model Extensions */, - 5194B5E222B693EC00144881 /* SwiftUI Extensions */, 51C45245226506C800C03939 /* UIKit Extensions */, 513C5CE7232571C2003D4054 /* ShareExtension */, 51314643235A7C2300387FDC /* IntentsExtension */, @@ -2640,7 +2611,6 @@ 51F85BED227251DF00C787DC /* Acknowledgments.rtf in Resources */, 511D43D1231FA62800FB1562 /* SidebarKeyboardShortcuts.plist in Resources */, 51C452AB22650DC600C03939 /* template.html in Resources */, - 51E149C0234D839E0004F7A5 /* ShowHidePasswordView.xib in Resources */, 51F85BF12272524100C787DC /* Credits.rtf in Resources */, 84A3EE61223B667F00557320 /* DefaultFeeds.opml in Resources */, 511D43CF231FA62200FB1562 /* DetailKeyboardShortcuts.plist in Resources */, @@ -2891,7 +2861,6 @@ buildActionMask = 2147483647; files = ( 840D617F2029031C009BC708 /* AppDelegate.swift in Sources */, - 51E149B3234D82E40004F7A5 /* PasswordField.swift in Sources */, 512E08E72268801200BDCFDD /* FeedTreeControllerDelegate.swift in Sources */, 51C452A422650A2D00C03939 /* ArticleUtilities.swift in Sources */, 51EF0F79227716380050506E /* ColorHash.swift in Sources */, @@ -2915,7 +2884,6 @@ 51C452772265091600C03939 /* MultilineUILabelSizer.swift in Sources */, 51C452A522650A2D00C03939 /* SmallIconProvider.swift in Sources */, 51D5948722668EFA00DFC836 /* MarkStatusCommand.swift in Sources */, - 51322859232FDDB80033D4ED /* VibrantButtonStyle.swift in Sources */, 51A1699C235E10D700EB091F /* AddAccountViewController.swift in Sources */, 51A16999235E10D700EB091F /* AddLocalAccountViewController.swift in Sources */, 514B7C8323205EFB00BAC947 /* RootSplitViewController.swift in Sources */, @@ -2956,7 +2924,6 @@ 51C4529A22650A0400C03939 /* ArticleStyle.swift in Sources */, 51C4527F2265092C00C03939 /* ArticleViewController.swift in Sources */, 51C4526A226508F600C03939 /* MasterFeedTableViewCellLayout.swift in Sources */, - 51E149C2234D852F0004F7A5 /* ShowHidePasswordView.swift in Sources */, 51C452AE2265104D00C03939 /* ArticleStringFormatter.swift in Sources */, 512E08E62268800D00BDCFDD /* FolderTreeControllerDelegate.swift in Sources */, 51C4529922650A0000C03939 /* ArticleStylesManager.swift in Sources */, @@ -2987,12 +2954,10 @@ 518651DA235621840078E021 /* ImageTransition.swift in Sources */, 514219372352510100E07E2C /* ImageScrollView.swift in Sources */, 51A16997235E10D700EB091F /* RefreshIntervalViewController.swift in Sources */, - DF999FF722B5AEFA0064B687 /* SafariView.swift in Sources */, 51C4529B22650A1000C03939 /* FaviconDownloader.swift in Sources */, 84DEE56622C32CA4005FC42C /* SmartFeedDelegate.swift in Sources */, 512E09012268907400BDCFDD /* MasterFeedTableViewSectionHeader.swift in Sources */, 519D740623243CC0008BB345 /* RefreshInterval-Extensions.swift in Sources */, - 51322855232EED360033D4ED /* VibrantSelectAction.swift in Sources */, 51C45268226508F600C03939 /* MasterFeedUnreadCountView.swift in Sources */, 5183CCD0226E1E880010922C /* NonIntrinsicLabel.swift in Sources */, 51C4529F22650A1900C03939 /* AuthorAvatarDownloader.swift in Sources */, @@ -3009,7 +2974,6 @@ 51A1699D235E10D700EB091F /* SettingsViewController.swift in Sources */, 51A1699E235E10D700EB091F /* TimelineNumberOfLinesViewController.swift in Sources */, 51C45293226509C800C03939 /* StarredFeedDelegate.swift in Sources */, - 513229312330523F0033D4ED /* AttributedStringView.swift in Sources */, 51D6A5BC23199C85001C27D8 /* MasterTimelineDataSource.swift in Sources */, 51934CCB230F599B006127BE /* ThemedNavigationController.swift in Sources */, ); diff --git a/iOS/Settings/FeedbinAccountViewController.swift b/iOS/Settings/FeedbinAccountViewController.swift index 6a8ba2129..e7218bfe1 100644 --- a/iOS/Settings/FeedbinAccountViewController.swift +++ b/iOS/Settings/FeedbinAccountViewController.swift @@ -1,5 +1,5 @@ // -// AddFeedbinAccountViewController.swift +// FeedbinAccountViewController.swift // NetNewsWire-iOS // // Created by Maurice Parker on 5/19/19. @@ -16,6 +16,7 @@ class FeedbinAccountViewController: UIViewController { @IBOutlet weak var cancelBarButtonItem: UIBarButtonItem! @IBOutlet weak var emailTextField: UITextField! @IBOutlet weak var passwordTextField: UITextField! + @IBOutlet weak var showHideButton: UIButton! @IBOutlet weak var actionButton: UIButton! @IBOutlet weak var errorMessageLabel: UILabel! @@ -44,10 +45,20 @@ class FeedbinAccountViewController: UIViewController { delegate?.dismiss() } + @IBAction func showHidePassword(_ sender: Any) { + if passwordTextField.isSecureTextEntry { + passwordTextField.isSecureTextEntry = false + showHideButton.setTitle("Hide", for: .normal) + } else { + passwordTextField.isSecureTextEntry = true + showHideButton.setTitle("Show", for: .normal) + } + } + @IBAction func action(_ sender: Any) { self.errorMessageLabel.text = nil - guard emailTextField.text != nil && passwordTextField.text != nil else { + guard let email = emailTextField.text, let password = passwordTextField.text else { self.errorMessageLabel.text = NSLocalizedString("Username & password required.", comment: "Credentials Error") return } @@ -56,8 +67,8 @@ class FeedbinAccountViewController: UIViewController { disableNavigation() // When you fill in the email address via auto-complete it adds extra whitespace - let emailAddress = emailTextField.text?.trimmingCharacters(in: .whitespaces) - let credentials = Credentials(type: .basic, username: emailAddress ?? "", secret: passwordTextField.text ?? "") + let trimmedEmail = email.trimmingCharacters(in: .whitespaces) + let credentials = Credentials(type: .basic, username: trimmedEmail, secret: password) Account.validateCredentials(type: .feedbin, credentials: credentials) { result in self.stopAnimtatingActivityIndicator() diff --git a/iOS/Settings/Settings.storyboard b/iOS/Settings/Settings.storyboard index 3dfa1b16a..9b7b19ed1 100644 --- a/iOS/Settings/Settings.storyboard +++ b/iOS/Settings/Settings.storyboard @@ -437,7 +437,7 @@ - + @@ -457,11 +457,10 @@ + - - @@ -471,7 +470,7 @@ - + @@ -492,10 +491,9 @@ - + - @@ -660,14 +658,12 @@ - - - - - + + + + - + + + + + - - - + - + - + + @@ -733,12 +740,13 @@ - + + - + diff --git a/iOS/SwiftUI Extensions/AttributedStringView.swift b/iOS/SwiftUI Extensions/AttributedStringView.swift deleted file mode 100644 index 1cfe55719..000000000 --- a/iOS/SwiftUI Extensions/AttributedStringView.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// AttributedStringView.swift -// NetNewsWire-iOS -// -// Created by Maurice Parker on 9/16/19. -// Copyright © 2019 Ranchero Software. All rights reserved. -// - -import SwiftUI - -struct AttributedStringView: UIViewRepresentable { - - let string: NSAttributedString - let preferredMaxLayoutWidth: CGFloat - - func makeUIView(context: Context) -> HackedTextView { - return HackedTextView() - } - - func updateUIView(_ view: HackedTextView, context: Context) { - view.attributedText = string - - view.preferredMaxLayoutWidth = preferredMaxLayoutWidth - view.isScrollEnabled = false - view.textContainer.lineBreakMode = .byWordWrapping - - view.isUserInteractionEnabled = true - view.adjustsFontForContentSizeCategory = true - view.font = .preferredFont(forTextStyle: .body) - view.textColor = UIColor.label - view.tintColor = AppAssets.secondaryAccentColor - view.backgroundColor = UIColor.secondarySystemGroupedBackground - - view.setContentCompressionResistancePriority(.defaultLow, for: .horizontal) - view.setContentCompressionResistancePriority(.required, for: .vertical) - } - -} - -class HackedTextView: UITextView { - var preferredMaxLayoutWidth = CGFloat.zero - override var intrinsicContentSize: CGSize { - return sizeThatFits(CGSize(width: preferredMaxLayoutWidth, height: .infinity)) - } -} diff --git a/iOS/SwiftUI Extensions/PasswordField.swift b/iOS/SwiftUI Extensions/PasswordField.swift deleted file mode 100644 index 8875837ae..000000000 --- a/iOS/SwiftUI Extensions/PasswordField.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// PasswordField.swift -// NetNewsWire-iOS -// -// Created by Maurice Parker on 10/8/19. -// Copyright © 2019 Ranchero Software. All rights reserved. -// - -import SwiftUI - -struct PasswordField: UIViewRepresentable { - - let password: Binding - - func makeUIView(context: Context) -> ShowHidePasswordView { - let showHideView = Bundle.main.loadNibNamed("ShowHidePasswordView", owner: Self.self, options: nil)?[0] as! ShowHidePasswordView - showHideView.passwordTextField.bindingString = password - return showHideView - } - - func updateUIView(_ showHideView: ShowHidePasswordView, context: Context) { - showHideView.passwordTextField.bindingString = password - } - -} diff --git a/iOS/SwiftUI Extensions/SafariView.swift b/iOS/SwiftUI Extensions/SafariView.swift deleted file mode 100644 index 6b5d78334..000000000 --- a/iOS/SwiftUI Extensions/SafariView.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// SafariView.swift -// NetNewsWire-iOS -// -// Created by Stuart Breckenridge on 16/6/19. -// Copyright © 2019 Ranchero Software. All rights reserved. -// - -import SwiftUI -import SafariServices - -struct SafariView : UIViewControllerRepresentable { - - let url: URL - - func makeUIViewController(context: UIViewControllerRepresentableContext) -> SFSafariViewController { - let safari = SFSafariViewController(url: url) - safari.delegate = context.coordinator - return safari - } - - func updateUIViewController(_ uiViewController: SFSafariViewController, context: UIViewControllerRepresentableContext) { - // - } - - func makeCoordinator() -> Coordinator { - return Coordinator(self) - } - - class Coordinator : NSObject, SFSafariViewControllerDelegate { - var parent: SafariView - - init(_ safariView: SafariView) { - self.parent = safariView - } - - // MARK: SFSafariViewControllerDelegate - func safariViewControllerDidFinish(_ controller: SFSafariViewController) { - - } - - func safariViewController(_ controller: SFSafariViewController, initialLoadDidRedirectTo URL: URL) { - - } - - func safariViewController(_ controller: SFSafariViewController, didCompleteInitialLoad didLoadSuccessfully: Bool) { - - } - } -} - - diff --git a/iOS/SwiftUI Extensions/ShowHidePasswordView.swift b/iOS/SwiftUI Extensions/ShowHidePasswordView.swift deleted file mode 100644 index fe6b10d02..000000000 --- a/iOS/SwiftUI Extensions/ShowHidePasswordView.swift +++ /dev/null @@ -1,51 +0,0 @@ -// -// ShowHidePasswordView.swift -// NetNewsWire-iOS -// -// Created by Maurice Parker on 10/8/19. -// Copyright © 2019 Ranchero Software. All rights reserved. -// - -import UIKit -import SwiftUI - -class ShowHidePasswordView: UIView { - - @IBOutlet weak var passwordTextField: BindingTextField! - @IBOutlet weak var showHideButton: UIButton! - - @IBAction func toggleShowHideButton(_ sender: Any) { - if passwordTextField.isSecureTextEntry { - passwordTextField.isSecureTextEntry = false - showHideButton.setTitle(NSLocalizedString("Hide", comment: "Hide"), for: .normal) - } else { - passwordTextField.isSecureTextEntry = true - showHideButton.setTitle(NSLocalizedString("Show", comment: "Show"), for: .normal) - } - } - -} - -class BindingTextField: UITextField, UITextFieldDelegate { - - var bindingString: Binding? = nil - - override init(frame: CGRect) { - super.init(frame: frame) - delegate = self - } - - required init?(coder: NSCoder) { - super.init(coder: coder) - delegate = self - } - - func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { - if let currentValue = textField.text as NSString? { - let proposedValue = currentValue.replacingCharacters(in: range, with: string) - bindingString?.wrappedValue = proposedValue - } - return true - } - -} diff --git a/iOS/SwiftUI Extensions/ShowHidePasswordView.xib b/iOS/SwiftUI Extensions/ShowHidePasswordView.xib deleted file mode 100644 index d68686200..000000000 --- a/iOS/SwiftUI Extensions/ShowHidePasswordView.xib +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/iOS/SwiftUI Extensions/VibrantButtonStyle.swift b/iOS/SwiftUI Extensions/VibrantButtonStyle.swift deleted file mode 100644 index 61ffd9517..000000000 --- a/iOS/SwiftUI Extensions/VibrantButtonStyle.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// VibrantButtonStyle.swift -// NetNewsWire-iOS -// -// Created by Maurice Parker on 9/16/19. -// Copyright © 2019 Ranchero Software. All rights reserved. -// - -import SwiftUI - -struct VibrantButtonStyle: ButtonStyle { - - let alignment: Alignment - - func makeBody(configuration: Configuration) -> some View { - GeometryReader { geometry in - configuration.label - .frame(width: geometry.size.width, height: geometry.size.height, alignment: self.alignment) - } - .foregroundColor(configuration.isPressed ? Color(AppAssets.tableViewCellHighlightedTextColor) : .primary) - .listRowBackground(configuration.isPressed ? Color(AppAssets.primaryAccentColor) : Color(.secondarySystemGroupedBackground)) - .background(configuration.isPressed ? Color(AppAssets.primaryAccentColor) : Color(.secondarySystemGroupedBackground)) - } - -} diff --git a/iOS/SwiftUI Extensions/VibrantSelectAction.swift b/iOS/SwiftUI Extensions/VibrantSelectAction.swift deleted file mode 100644 index 45471d5e1..000000000 --- a/iOS/SwiftUI Extensions/VibrantSelectAction.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// VibrantSelectAction.swift -// NetNewsWire-iOS -// -// Created by Maurice Parker on 9/15/19. -// Copyright © 2019 Ranchero Software. All rights reserved. -// - -import SwiftUI - -struct VibrantSelectAction: ViewModifier { - - let action: () -> Void - @State var isTapped = false - @GestureState var isLongPressed = false - - func body(content: Content) -> some View { - GeometryReader { geometry in - content - .frame(width: geometry.size.width, height: geometry.size.height, alignment: .leading) - .background(self.isLongPressed || self.isTapped ? Color(AppAssets.primaryAccentColor) : Color(.secondarySystemGroupedBackground)) - } - .foregroundColor(isLongPressed || isTapped ? Color(AppAssets.tableViewCellHighlightedTextColor) : .primary) - .listRowBackground(isLongPressed || isTapped ? Color(AppAssets.primaryAccentColor) : nil) - .gesture( - LongPressGesture().onEnded( { _ in self.action() }) - .updating($isLongPressed) { value, state, transcation in state = value } - .simultaneously(with: - TapGesture().onEnded( { - self.isTapped = true - self.action() - DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) { - self.isTapped = false - } - } - )) - ) - } - -}