From d75ec146245b3aad5103b249ccb5ec41d632c6cb Mon Sep 17 00:00:00 2001 From: Chris Li Date: Mon, 12 Sep 2016 14:49:31 -0400 Subject: [PATCH] hand off --- Kiwix-iOS/AppDelegate.swift | 70 +++++++++++-------- .../Controller/Main/MainController.swift | 25 +++++++ .../Main/MainControllerDelegates.swift | 5 +- Kiwix-iOS/Info.plist | 6 +- Kiwix-iOSWidgets/Bookmarks/Info.plist | 2 +- .../xcdebugger/Breakpoints_v2.xcbkptlist | 48 +++++++++++++ Kiwix/CoreData/Classes/Book.swift | 2 +- .../Operations/RefreshLibraryOperation.swift | 2 +- 8 files changed, 125 insertions(+), 35 deletions(-) diff --git a/Kiwix-iOS/AppDelegate.swift b/Kiwix-iOS/AppDelegate.swift index 29d46a83..c4165bbf 100644 --- a/Kiwix-iOS/AppDelegate.swift +++ b/Kiwix-iOS/AppDelegate.swift @@ -39,29 +39,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate { return true } - func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) { - switch shortcutItem.type { - case "org.kiwix.search": - mainController?.hidePresentedController(false, completion: { - self.mainController?.showSearch(animated: false) - completionHandler(true) - }) - case "org.kiwix.bookmarks": - mainController?.hidePresentedController(false, completion: { - self.mainController?.hideSearch(animated: false) - self.mainController?.showBookmarkTBVC() - completionHandler(true) - }) - case recentShortcutTypeString: - guard let urlString = shortcutItem.userInfo?["URL"] as? String else {completionHandler(false); return} - mainController?.load(NSURL(string: urlString)) - completionHandler(true) - default: - completionHandler(false) - return - } - } - func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) { // Here we get what notification permission user currently allows } @@ -78,6 +55,18 @@ class AppDelegate: UIResponder, UIApplicationDelegate { return true } + func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool { + if userActivity.activityType == "org.kiwix.kiwix.article-view" { + guard let navController = window?.rootViewController as? UINavigationController, + let controller = navController.topViewController as? MainController else {return false} + controller.restoreUserActivityState(userActivity) + return true + } else { + return false + } + + } + // MARK: - Active func applicationDidBecomeActive(application: UIApplication) { @@ -103,7 +92,14 @@ class AppDelegate: UIResponder, UIApplicationDelegate { // //UIApplication.sharedApplication().applicationIconBadgeNumber = downloader.taskCount ?? 0 // } - // MARK: - Shotcut Items + // MARK: - Shotcut Items + + func addRecentArticleShortCutItem(article: Article) { + guard let title = article.title else {return} + let icon = UIApplicationShortcutIcon(templateImageName: "Recent") + let item = UIMutableApplicationShortcutItem(type: recentShortcutTypeString, localizedTitle: title, localizedSubtitle: "", icon: icon, userInfo: ["URL": article.url]) + UIApplication.sharedApplication().shortcutItems?.append(item) + } func removeAllDynamicShortcutItems() { guard let items = UIApplication.sharedApplication().shortcutItems?.filter({$0.type == recentShortcutTypeString}) else {return} @@ -113,11 +109,27 @@ class AppDelegate: UIResponder, UIApplicationDelegate { } } - func addRecentArticleShortCutItem(article: Article) { - guard let title = article.title, let url = NSURL(string: article.url) else {return} - let icon = UIApplicationShortcutIcon(templateImageName: "Recent") - let item = UIMutableApplicationShortcutItem(type: recentShortcutTypeString, localizedTitle: title, localizedSubtitle: "", icon: icon, userInfo: ["URL": url]) - UIApplication.sharedApplication().shortcutItems?.append(item) + func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) { + switch shortcutItem.type { + case "org.kiwix.search": + mainController?.hidePresentedController(false, completion: { + self.mainController?.showSearch(animated: false) + completionHandler(true) + }) + case "org.kiwix.bookmarks": + mainController?.hidePresentedController(false, completion: { + self.mainController?.hideSearch(animated: false) + self.mainController?.showBookmarkTBVC() + completionHandler(true) + }) + case recentShortcutTypeString: + guard let urlString = shortcutItem.userInfo?["URL"] as? String else {completionHandler(false); return} + mainController?.load(NSURL(string: urlString)) + completionHandler(true) + default: + completionHandler(false) + return + } } // MARK: - Background diff --git a/Kiwix-iOS/Controller/Main/MainController.swift b/Kiwix-iOS/Controller/Main/MainController.swift index 490abeda..be063b43 100644 --- a/Kiwix-iOS/Controller/Main/MainController.swift +++ b/Kiwix-iOS/Controller/Main/MainController.swift @@ -24,6 +24,7 @@ class MainController: UIViewController { // MARK: - Properties + let activityType = "org.kiwix.kiwix.article-view" private var webViewInitialURL: NSURL? private(set) var context: UnsafeMutablePointer = nil var isShowingTableOfContents = false @@ -38,6 +39,7 @@ class MainController: UIViewController { didSet { configureSearchBarPlaceHolder() configureBookmarkButton() + configureUserActivity() } } @@ -95,6 +97,21 @@ class MainController: UIViewController { } } + override func updateUserActivityState(activity: NSUserActivity) { + defer { super.updateUserActivityState(activity) } + guard let article = article else {return} + activity.title = article.title + activity.addUserInfoEntriesFromDictionary(["ArticleURL": article.url]) + super.updateUserActivityState(activity) + } + + override func restoreUserActivityState(activity: NSUserActivity) { + guard activity.activityType == activityType, + let urlString = activity.userInfo?["ArticleURL"] as? String, + let url = NSURL(string: urlString) else {return} + load(url) + } + // MARK: - Load func load(url: NSURL?) { @@ -209,6 +226,14 @@ class MainController: UIViewController { searchBar.placeholder = LocalizedStrings.search } } + + func configureUserActivity() { + userActivity = userActivity ?? NSUserActivity(activityType: activityType) + guard let article = article else {return} + userActivity?.title = article.title + userActivity?.userInfo = ["ArticleURL": article.url] + userActivity?.becomeCurrent() + } // MARK: - Buttons diff --git a/Kiwix-iOS/Controller/Main/MainControllerDelegates.swift b/Kiwix-iOS/Controller/Main/MainControllerDelegates.swift index 8d1e09ae..b4035044 100644 --- a/Kiwix-iOS/Controller/Main/MainControllerDelegates.swift +++ b/Kiwix-iOS/Controller/Main/MainControllerDelegates.swift @@ -24,12 +24,13 @@ extension MainController: UIWebViewDelegate, SFSafariViewControllerDelegate, } func webViewDidStartLoad(webView: UIWebView) { - URLResponseCache.shared.start() +// URLResponseCache.shared.start() } func webViewDidFinishLoad(webView: UIWebView) { - URLResponseCache.shared.stop() +// URLResponseCache.shared.stop() + // Create article object guard let url = webView.request?.URL, let article = Article.addOrUpdate(url: url, context: NSManagedObjectContext.mainQueueContext) else {return} article.title = JSInjection.getTitle(from: webView) diff --git a/Kiwix-iOS/Info.plist b/Kiwix-iOS/Info.plist index 3659a22a..b4c26ef3 100644 --- a/Kiwix-iOS/Info.plist +++ b/Kiwix-iOS/Info.plist @@ -49,7 +49,7 @@ CFBundleVersion - 1.8.156 + 1.8.223 ITSAppUsesNonExemptEncryption LSRequiresIPhoneOS @@ -69,6 +69,10 @@ + NSUserActivityTypes + + org.kiwix.kiwix.article-view + UIApplicationShortcutItems diff --git a/Kiwix-iOSWidgets/Bookmarks/Info.plist b/Kiwix-iOSWidgets/Bookmarks/Info.plist index d124dd33..7b57c044 100644 --- a/Kiwix-iOSWidgets/Bookmarks/Info.plist +++ b/Kiwix-iOSWidgets/Bookmarks/Info.plist @@ -21,7 +21,7 @@ CFBundleSignature ???? CFBundleVersion - 1.8.158 + 1.8.225 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 dbfe494b..5bd764dd 100644 --- a/Kiwix.xcworkspace/xcuserdata/chrisli.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/Kiwix.xcworkspace/xcuserdata/chrisli.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -19,5 +19,53 @@ landmarkType = "5"> + + + + + + + + + + diff --git a/Kiwix/CoreData/Classes/Book.swift b/Kiwix/CoreData/Classes/Book.swift index 14dd047d..ef3cea9a 100644 --- a/Kiwix/CoreData/Classes/Book.swift +++ b/Kiwix/CoreData/Classes/Book.swift @@ -32,7 +32,7 @@ class Book: NSManagedObject { book.articleCount = Int64((metadata["articleCount"] as? String) ?? "") ?? 0 book.mediaCount = Int64((metadata["mediaCount"] as? String) ?? "") ?? 0 - book.fileSize = Int64((metadata["size"] as? String) ?? "") ?? 0 + book.fileSize = (Int64((metadata["size"] as? String) ?? "") ?? 0) * 1024 book.date = { guard let date = metadata["date"] as? String else {return nil} diff --git a/Kiwix/Operations/RefreshLibraryOperation.swift b/Kiwix/Operations/RefreshLibraryOperation.swift index 008992ea..4435f41d 100644 --- a/Kiwix/Operations/RefreshLibraryOperation.swift +++ b/Kiwix/Operations/RefreshLibraryOperation.swift @@ -29,7 +29,7 @@ class RefreshLibraryOperation: GroupOperation { } private class Retrive: Operation, ResultOperationType { - private static let url = NSURL(string: "http://www.kiwix.org/library.xml")! + private static let url = NSURL(string: "https://download.kiwix.org/library/library.xml")! private var result: NSData? override init() {