From 0bd320b461cb9e33cab9bc2de3fbf599289de931 Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 15 Mar 2016 12:18:29 -0700 Subject: [PATCH 1/2] Handling situation where the user is logged in but has no blogs. Clearing out application shortcutItems when this happens --- .../System/3DTouch/WP3DTouchShortcutCreator.swift | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/WordPress/Classes/System/3DTouch/WP3DTouchShortcutCreator.swift b/WordPress/Classes/System/3DTouch/WP3DTouchShortcutCreator.swift index 80b036560d08..d44096685516 100644 --- a/WordPress/Classes/System/3DTouch/WP3DTouchShortcutCreator.swift +++ b/WordPress/Classes/System/3DTouch/WP3DTouchShortcutCreator.swift @@ -28,7 +28,11 @@ public class WP3DTouchShortcutCreator: NSObject public func createShortcuts(loggedIn: Bool) { if loggedIn { - createLoggedInShortcuts() + if hasBlog() { + createLoggedInShortcuts() + } else { + clearShortcuts() + } } else { createLoggedOutShortcuts() } @@ -95,6 +99,10 @@ public class WP3DTouchShortcutCreator: NSObject application.shortcutItems = visibleShortcutArray } + private func clearShortcuts() { + application.shortcutItems = nil + } + private func createLoggedOutShortcuts() { application.shortcutItems = loggedOutShortcutArray() } @@ -112,4 +120,8 @@ public class WP3DTouchShortcutCreator: NSObject return hasWordPressComAccount() && currentBlog.supports(BlogFeature.Stats) } + + private func hasBlog() -> Bool { + return blogService.blogCountForAllAccounts() > 0 + } } From b6416c6fa8a40272a9c9f88a46637e3734a439bb Mon Sep 17 00:00:00 2001 From: Will Kwon Date: Tue, 9 Feb 2016 15:41:36 -0800 Subject: [PATCH 2/2] Cherry-picking 65da077bf27ad4ee68ad162025ef779035602930 --- WordPress/Classes/Services/BlogService.m | 2 +- WordPress/Classes/Services/BlogSyncFacade.m | 2 +- .../3DTouch/WP3DTouchShortcutCreator.swift | 18 ++++++++++++++---- .../Classes/System/WordPressAppDelegate.m | 2 +- .../ViewRelated/NUX/LoginViewController.m | 2 +- .../WP3DTouchShortcutCreatorTests.swift | 10 ++++++---- 6 files changed, 24 insertions(+), 12 deletions(-) diff --git a/WordPress/Classes/Services/BlogService.m b/WordPress/Classes/Services/BlogService.m index 0a8897ccb227..063a08275475 100644 --- a/WordPress/Classes/Services/BlogService.m +++ b/WordPress/Classes/Services/BlogService.m @@ -48,7 +48,7 @@ - (void)flagBlogAsLastUsed:(Blog *)blog [defaults synchronize]; WP3DTouchShortcutCreator *shortcutCreator = [WP3DTouchShortcutCreator new]; - [shortcutCreator createShortcuts:YES]; + [shortcutCreator createShortcutsIf3DTouchAvailable:YES]; } - (Blog *)lastUsedOrFirstBlog diff --git a/WordPress/Classes/Services/BlogSyncFacade.m b/WordPress/Classes/Services/BlogSyncFacade.m index 1c4c2a2ba8a6..eea628b2c11c 100644 --- a/WordPress/Classes/Services/BlogSyncFacade.m +++ b/WordPress/Classes/Services/BlogSyncFacade.m @@ -80,7 +80,7 @@ - (void)syncBlogWithUsername:(NSString *)username } WP3DTouchShortcutCreator *shortcutCreator = [WP3DTouchShortcutCreator new]; - [shortcutCreator createShortcuts:YES]; + [shortcutCreator createShortcutsIf3DTouchAvailable:YES]; [WPAnalytics track:WPAnalyticsStatAddedSelfHostedSite]; [WPAnalytics track:WPAnalyticsStatSignedIn withProperties:@{ @"dotcom_user" : @(NO) }]; diff --git a/WordPress/Classes/System/3DTouch/WP3DTouchShortcutCreator.swift b/WordPress/Classes/System/3DTouch/WP3DTouchShortcutCreator.swift index d44096685516..da76524502f4 100644 --- a/WordPress/Classes/System/3DTouch/WP3DTouchShortcutCreator.swift +++ b/WordPress/Classes/System/3DTouch/WP3DTouchShortcutCreator.swift @@ -26,7 +26,11 @@ public class WP3DTouchShortcutCreator: NSObject blogService = BlogService(managedObjectContext: mainContext) } - public func createShortcuts(loggedIn: Bool) { + public func createShortcutsIf3DTouchAvailable(loggedIn: Bool) { + if !is3DTouchAvailable() { + return + } + if loggedIn { if hasBlog() { createLoggedInShortcuts() @@ -38,7 +42,7 @@ public class WP3DTouchShortcutCreator: NSObject } } - public func loggedOutShortcutArray() -> [UIApplicationShortcutItem] { + private func loggedOutShortcutArray() -> [UIApplicationShortcutItem] { let logInShortcut = UIMutableApplicationShortcutItem(type: WP3DTouchShortcutHandler.ShortcutIdentifier.LogIn.type, localizedTitle: NSLocalizedString("Sign In", comment: "Sign In 3D Touch Shortcut"), localizedSubtitle: nil, @@ -48,10 +52,10 @@ public class WP3DTouchShortcutCreator: NSObject return [logInShortcut] } - public func loggedInShortcutArray() -> [UIApplicationShortcutItem] { + private func loggedInShortcutArray() -> [UIApplicationShortcutItem] { var defaultBlogName: String? if blogService.blogCountForAllAccounts() > 1 { - defaultBlogName = blogService.lastUsedOrFirstBlog().settings.name + defaultBlogName = blogService.lastUsedOrFirstBlog()?.settings?.name } let notificationsShortcut = UIMutableApplicationShortcutItem(type: WP3DTouchShortcutHandler.ShortcutIdentifier.Notifications.type, @@ -107,6 +111,12 @@ public class WP3DTouchShortcutCreator: NSObject application.shortcutItems = loggedOutShortcutArray() } + private func is3DTouchAvailable() -> Bool { + let window = UIApplication.sharedApplication().keyWindow + + return window?.traitCollection.forceTouchCapability == .Available + } + private func hasWordPressComAccount() -> Bool { let accountService = AccountService(managedObjectContext: mainContext) diff --git a/WordPress/Classes/System/WordPressAppDelegate.m b/WordPress/Classes/System/WordPressAppDelegate.m index 9c72436e0e92..c4c6e4999be0 100644 --- a/WordPress/Classes/System/WordPressAppDelegate.m +++ b/WordPress/Classes/System/WordPressAppDelegate.m @@ -618,7 +618,7 @@ - (void)customizeAppearance - (void)create3DTouchShortcutItems { WP3DTouchShortcutCreator *shortcutCreator = [WP3DTouchShortcutCreator new]; - [shortcutCreator createShortcuts:[self isLoggedIn]]; + [shortcutCreator createShortcutsIf3DTouchAvailable:[self isLoggedIn]]; } #pragma mark - Analytics diff --git a/WordPress/Classes/ViewRelated/NUX/LoginViewController.m b/WordPress/Classes/ViewRelated/NUX/LoginViewController.m index 1ae0850ad115..5aa381788cb2 100644 --- a/WordPress/Classes/ViewRelated/NUX/LoginViewController.m +++ b/WordPress/Classes/ViewRelated/NUX/LoginViewController.m @@ -160,7 +160,7 @@ - (void)bindToViewModel - (void)update3DTouchForLogIn { WP3DTouchShortcutCreator *shortcutCreator = [WP3DTouchShortcutCreator new]; - [shortcutCreator createShortcuts:self.cancellable]; + [shortcutCreator createShortcutsIf3DTouchAvailable:self.cancellable]; } - (void)viewWillAppear:(BOOL)animated diff --git a/WordPress/WordPressTest/System/3DTouch/WP3DTouchShortcutCreatorTests.swift b/WordPress/WordPressTest/System/3DTouch/WP3DTouchShortcutCreatorTests.swift index b096569bda95..86ffe38708f3 100644 --- a/WordPress/WordPressTest/System/3DTouch/WP3DTouchShortcutCreatorTests.swift +++ b/WordPress/WordPressTest/System/3DTouch/WP3DTouchShortcutCreatorTests.swift @@ -1,12 +1,14 @@ import XCTest import WordPress -class WP3DTouchShortcutCreatorTests: XCTestCase { +class WP3DTouchShortcutCreatorTests: XCTestCase +{ var testShortcutCreator: WP3DTouchShortcutCreator! override func setUp() { super.setUp() testShortcutCreator = WP3DTouchShortcutCreator() + UIApplication.sharedApplication().shortcutItems = nil } override func tearDown() { @@ -14,8 +16,8 @@ class WP3DTouchShortcutCreatorTests: XCTestCase { super.tearDown() } - func testCreateShortcutLoggedOutCreatesLoggedOutShortcuts() { - testShortcutCreator.createShortcuts(false) - XCTAssertEqual(UIApplication.sharedApplication().shortcutItems!, testShortcutCreator.loggedOutShortcutArray()) + func testCreateShortcutLoggedOutDoesNotCreatesLoggedOutShortcutsWith3DTouchNotAvailable() { + testShortcutCreator.createShortcutsIf3DTouchAvailable(false) + XCTAssertEqual(UIApplication.sharedApplication().shortcutItems!.capacity, 0) } }