diff --git a/Kiwix-iOS/Controller/ControllerRetainer.swift b/Kiwix-iOS/Controller/ControllerRetainer.swift index f08201fc..acd5aeca 100644 --- a/Kiwix-iOS/Controller/ControllerRetainer.swift +++ b/Kiwix-iOS/Controller/ControllerRetainer.swift @@ -1,5 +1,5 @@ // -// ControllerRetainer.swift +// Controllers.swift // Kiwix // // Created by Chris Li on 8/31/16. @@ -8,10 +8,10 @@ import UIKit -class ControllerRetainer { - static let shared = ControllerRetainer() +class Controllers { + static let shared = Controllers() private init() { - NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ControllerRetainer.removeStrongReference), name: UIApplicationDidReceiveMemoryWarningNotification, object: nil) + NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(Controllers.removeStrongReference), name: UIApplicationDidReceiveMemoryWarningNotification, object: nil) } deinit { @@ -27,21 +27,27 @@ class ControllerRetainer { welcome = nil } + // MARK: - Main + + var main: MainController { + return (UIApplication.appDelegate.window?.rootViewController as! UINavigationController).topViewController as! MainController + } + // MARK: - Bookmark private var bookmark: UINavigationController? class var bookmark: UINavigationController { - let controller = ControllerRetainer.shared.bookmark ?? UIStoryboard(name: "Bookmark", bundle: nil).instantiateInitialViewController() as! UINavigationController - ControllerRetainer.shared.bookmark = controller + let controller = Controllers.shared.bookmark ?? UIStoryboard(name: "Bookmark", bundle: nil).instantiateInitialViewController() as! UINavigationController + Controllers.shared.bookmark = controller return controller } private var bookmarkStar: BookmarkHUD? class var bookmarkStar: BookmarkHUD { - let controller = ControllerRetainer.shared.bookmarkStar ?? UIStoryboard(name: "Bookmark", bundle: nil).instantiateViewControllerWithIdentifier("BookmarkHUD") as! BookmarkHUD - ControllerRetainer.shared.bookmarkStar = controller + let controller = Controllers.shared.bookmarkStar ?? UIStoryboard(name: "Bookmark", bundle: nil).instantiateViewControllerWithIdentifier("BookmarkHUD") as! BookmarkHUD + Controllers.shared.bookmarkStar = controller return controller } @@ -50,8 +56,8 @@ class ControllerRetainer { private var library: UIViewController? class var library: UIViewController { - let controller = ControllerRetainer.shared.library ?? UIStoryboard(name: "Library", bundle: nil).instantiateInitialViewController()! - ControllerRetainer.shared.library = controller + let controller = Controllers.shared.library ?? UIStoryboard(name: "Library", bundle: nil).instantiateInitialViewController()! + Controllers.shared.library = controller return controller } @@ -60,8 +66,8 @@ class ControllerRetainer { private var search: SearchController? class var search: SearchController { - let controller = ControllerRetainer.shared.search ?? UIStoryboard(name: "Search", bundle: nil).instantiateInitialViewController() as! SearchController - ControllerRetainer.shared.search = controller + let controller = Controllers.shared.search ?? UIStoryboard(name: "Search", bundle: nil).instantiateInitialViewController() as! SearchController + Controllers.shared.search = controller return controller } @@ -70,8 +76,8 @@ class ControllerRetainer { private var setting: UIViewController? class var setting: UIViewController { - let controller = ControllerRetainer.shared.setting ?? UIStoryboard(name: "Setting", bundle: nil).instantiateInitialViewController()! - ControllerRetainer.shared.setting = controller + let controller = Controllers.shared.setting ?? UIStoryboard(name: "Setting", bundle: nil).instantiateInitialViewController()! + Controllers.shared.setting = controller return controller } @@ -80,8 +86,8 @@ class ControllerRetainer { private var welcome: WelcomeController? class var welcome: WelcomeController { - let controller = ControllerRetainer.shared.welcome ?? UIStoryboard(name: "Welcome", bundle: nil).instantiateInitialViewController() as! WelcomeController - ControllerRetainer.shared.welcome = controller + let controller = Controllers.shared.welcome ?? UIStoryboard(name: "Welcome", bundle: nil).instantiateInitialViewController() as! WelcomeController + Controllers.shared.welcome = controller return controller } diff --git a/Kiwix-iOS/Controller/Main/MainController.swift b/Kiwix-iOS/Controller/Main/MainController.swift index 75c4022e..89841f9b 100644 --- a/Kiwix-iOS/Controller/Main/MainController.swift +++ b/Kiwix-iOS/Controller/Main/MainController.swift @@ -49,7 +49,6 @@ class MainController: UIViewController { super.viewDidLoad() webView.delegate = self - searchBar.delegate = self ZimMultiReader.shared.delegate = self navigationItem.titleView = searchBar @@ -241,13 +240,13 @@ class MainController: UIViewController { } func showLibraryButtonTapped() { - let controller = ControllerRetainer.library + let controller = Controllers.library controller.modalPresentationStyle = .FullScreen presentViewController(controller, animated: true, completion: nil) } func showSettingButtonTapped() { - let controller = ControllerRetainer.setting + let controller = Controllers.setting controller.modalPresentationStyle = .FormSheet presentViewController(controller, animated: true, completion: nil) } diff --git a/Kiwix-iOS/Controller/Main/MainControllerDelegates.swift b/Kiwix-iOS/Controller/Main/MainControllerDelegates.swift index d1573f9e..00252793 100644 --- a/Kiwix-iOS/Controller/Main/MainControllerDelegates.swift +++ b/Kiwix-iOS/Controller/Main/MainControllerDelegates.swift @@ -85,7 +85,7 @@ extension MainController: UIWebViewDelegate, SFSafariViewControllerDelegate, LPT let operation = UpdateWidgetDataSourceOperation() GlobalQueue.shared.addOperation(operation) - let controller = ControllerRetainer.bookmarkStar + let controller = Controllers.bookmarkStar controller.bookmarkAdded = article.isBookmarked controller.transitioningDelegate = self controller.modalPresentationStyle = .OverFullScreen @@ -120,24 +120,7 @@ extension MainController: UIWebViewDelegate, SFSafariViewControllerDelegate, LPT GlobalQueue.shared.add(load: operation) } - // MARK: - UISearchBarDelegate - func searchBarTextDidBeginEditing(searchBar: UISearchBar) { - showSearch(animated: true) - } - - func searchBarCancelButtonClicked(searchBar: UISearchBar) { - hideSearch(animated: true) - configureSearchBarPlaceHolder() - } - - func searchBar(searchBar: UISearchBar, textDidChange searchText: String) { - ControllerRetainer.search.startSearch(searchText, delayed: true) - } - - func searchBarSearchButtonClicked(searchBar: UISearchBar) { - ControllerRetainer.search.searchResultController?.selectFirstResultIfPossible() - } // MARK: - UIPopoverPresentationControllerDelegate diff --git a/Kiwix-iOS/Controller/Main/MainControllerShowHide.swift b/Kiwix-iOS/Controller/Main/MainControllerShowHide.swift index 6a6f5c2c..e3255851 100644 --- a/Kiwix-iOS/Controller/Main/MainControllerShowHide.swift +++ b/Kiwix-iOS/Controller/Main/MainControllerShowHide.swift @@ -60,7 +60,7 @@ extension MainController { } private func showSearchResultController(animated animated: Bool) { - let controller = ControllerRetainer.search + let controller = Controllers.search guard !childViewControllers.contains(controller) else {return} addChildViewController(controller) controller.view.translatesAutoresizingMaskIntoConstraints = false @@ -161,7 +161,7 @@ extension MainController { // MARK: - Show Bookmark func showBookmarkTBVC() { - let controller = ControllerRetainer.bookmark + let controller = Controllers.bookmark controller.modalPresentationStyle = .FormSheet presentViewController(controller, animated: true, completion: nil) } @@ -169,7 +169,7 @@ extension MainController { // MARK: - Show/Hide Welcome func showWelcome() { - let controller = ControllerRetainer.welcome + let controller = Controllers.welcome controller.view.translatesAutoresizingMaskIntoConstraints = false addChildViewController(controller) view.addSubview(controller.view) diff --git a/Kiwix-iOS/Controller/Search/SearchController.swift b/Kiwix-iOS/Controller/Search/SearchController.swift index f498a1fb..cbf7ba16 100644 --- a/Kiwix-iOS/Controller/Search/SearchController.swift +++ b/Kiwix-iOS/Controller/Search/SearchController.swift @@ -16,11 +16,7 @@ class SearchController: UIViewController, UISearchBarDelegate, UIGestureRecogniz @IBOutlet var tapGestureRecognizer: UITapGestureRecognizer! var searchResultController: SearchResultController? - private var searchText = "" { - didSet { - configureViewVisibility() - } - } + private var searchTerm = "" // last searchTerm override func viewDidLoad() { super.viewDidLoad() @@ -30,14 +26,7 @@ class SearchController: UIViewController, UISearchBarDelegate, UIGestureRecogniz override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) - configureViewVisibility() - } - - override func viewWillDisappear(animated: Bool) { - super.viewWillDisappear(animated) - guard searchText != "" else {return} - Preference.recentSearchTerms.insert(searchText, atIndex: 0) - searchText = "" + configureViewVisibility(searchTerm) } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { @@ -47,8 +36,8 @@ class SearchController: UIViewController, UISearchBarDelegate, UIGestureRecogniz } } - func configureViewVisibility() { - if searchText == "" { + func configureViewVisibility(searchTerm: String) { + if searchTerm == "" { searchResultTBVCContainer.hidden = true tabControllerContainer.hidden = false } else { @@ -59,16 +48,17 @@ class SearchController: UIViewController, UISearchBarDelegate, UIGestureRecogniz // MARK: - Search - func startSearch(searchText: String, delayed: Bool) { - self.searchText = searchText + func startSearch(searchTerm: String, delayed: Bool) { + guard self.searchTerm != searchTerm else {return} + self.searchTerm = searchTerm + configureViewVisibility(searchTerm) if delayed { - let previousSearchText = searchText dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(275 * USEC_PER_SEC)), dispatch_get_main_queue()) { - guard previousSearchText == self.searchText else {return} - self.searchResultController?.startSearch(self.searchText) + guard searchTerm == self.searchTerm else {return} + self.searchResultController?.startSearch(self.searchTerm) } } else { - searchResultController?.startSearch(searchText) + searchResultController?.startSearch(searchTerm) } } diff --git a/Kiwix-iOS/Info.plist b/Kiwix-iOS/Info.plist index 202df9c3..09eed1d0 100644 --- a/Kiwix-iOS/Info.plist +++ b/Kiwix-iOS/Info.plist @@ -49,7 +49,7 @@ CFBundleVersion - 1.8.1343 + 1.8.1363 ITSAppUsesNonExemptEncryption LSRequiresIPhoneOS diff --git a/Kiwix-iOS/View/SearchBar.swift b/Kiwix-iOS/View/SearchBar.swift index 3ffedc6e..c9fd55e5 100644 --- a/Kiwix-iOS/View/SearchBar.swift +++ b/Kiwix-iOS/View/SearchBar.swift @@ -7,7 +7,7 @@ // import UIKit - +// not used class CustomSearchBar: UISearchBar, UITextFieldDelegate { override init(frame: CGRect) { @@ -91,7 +91,13 @@ class CustomSearchBar: UISearchBar, UITextFieldDelegate { // Used in v1.4 -class SearchBar: UISearchBar { +class SearchBar: UISearchBar, UISearchBarDelegate { + var searchTerm: String? + + private var textField: UITextField { + return valueForKey("searchField") as! UITextField + } + override init(frame: CGRect) { super.init(frame: frame) } @@ -106,5 +112,30 @@ class SearchBar: UISearchBar { self.autocapitalizationType = .None self.placeholder = LocalizedStrings.search self.returnKeyType = .Go + self.delegate = self } -} \ No newline at end of file + + // MARK: - UISearchBarDelegate + + func searchBarTextDidBeginEditing(searchBar: UISearchBar) { + text = searchTerm + Controllers.shared.main.showSearch(animated: true) + let dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0.05 * Double(NSEC_PER_SEC))) + dispatch_after(dispatchTime, dispatch_get_main_queue(), { [unowned self] in + self.textField.selectAll(nil) + }) + } + + func searchBarCancelButtonClicked(searchBar: UISearchBar) { + Controllers.shared.main.hideSearch(animated: true) + } + + func searchBar(searchBar: UISearchBar, textDidChange searchText: String) { + searchTerm = searchText + Controllers.search.startSearch(searchText, delayed: true) + } + + func searchBarSearchButtonClicked(searchBar: UISearchBar) { + Controllers.search.searchResultController?.selectFirstResultIfPossible() + } +} diff --git a/Kiwix-iOSWidgets/Bookmarks/Info.plist b/Kiwix-iOSWidgets/Bookmarks/Info.plist index 59ed41e7..f1d1e4ad 100644 --- a/Kiwix-iOSWidgets/Bookmarks/Info.plist +++ b/Kiwix-iOSWidgets/Bookmarks/Info.plist @@ -21,7 +21,7 @@ CFBundleSignature ???? CFBundleVersion - 1.8.1347 + 1.8.1367 NSExtension NSExtensionMainStoryboard diff --git a/Kiwix.xcworkspace/xcuserdata/chrisli.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Kiwix.xcworkspace/xcuserdata/chrisli.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index 0b50c5a2..0db328a9 100644 --- a/Kiwix.xcworkspace/xcuserdata/chrisli.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/Kiwix.xcworkspace/xcuserdata/chrisli.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -56,7 +56,7 @@ moduleName = "Kiwix" usesParentBreakpointCondition = "Yes" urlString = "file:///Volumes/Data/Developer/Kiwix/Kiwix/Operations/BookmarkMigrationOperation.swift" - timestampString = "496789129.532637" + timestampString = "496791025.863771" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "27" @@ -71,7 +71,7 @@ moduleName = "Kiwix" usesParentBreakpointCondition = "Yes" urlString = "file:///Volumes/Data/Developer/Kiwix/Kiwix/Operations/BookmarkMigrationOperation.swift" - timestampString = "496789129.534098" + timestampString = "496791025.865063" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "27"