| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "ios/chrome/app/spotlight/actions_spotlight_manager.h" | 5 #import "ios/chrome/app/spotlight/actions_spotlight_manager.h" |
| 6 | 6 |
| 7 #import <CoreSpotlight/CoreSpotlight.h> | 7 #import <CoreSpotlight/CoreSpotlight.h> |
| 8 | 8 |
| 9 #include "base/ios/weak_nsobject.h" | |
| 10 #include "base/mac/foundation_util.h" | 9 #include "base/mac/foundation_util.h" |
| 11 #include "base/metrics/histogram_macros.h" | 10 #include "base/metrics/histogram_macros.h" |
| 12 #include "base/strings/sys_string_conversions.h" | 11 #include "base/strings/sys_string_conversions.h" |
| 13 #include "ios/chrome/browser/app_startup_parameters.h" | 12 #include "ios/chrome/browser/app_startup_parameters.h" |
| 14 #include "ios/chrome/browser/experimental_flags.h" | 13 #include "ios/chrome/browser/experimental_flags.h" |
| 15 #include "ios/chrome/common/app_group/app_group_constants.h" | 14 #include "ios/chrome/common/app_group/app_group_constants.h" |
| 16 #include "ios/chrome/grit/ios_strings.h" | 15 #include "ios/chrome/grit/ios_strings.h" |
| 17 #include "net/base/mac/url_conversions.h" | 16 #include "net/base/mac/url_conversions.h" |
| 18 #include "ui/base/l10n/l10n_util.h" | 17 #include "ui/base/l10n/l10n_util.h" |
| 19 #include "url/gurl.h" | 18 #include "url/gurl.h" |
| 20 | 19 |
| 20 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 21 #error "This file requires ARC support." |
| 22 #endif |
| 23 |
| 21 namespace { | 24 namespace { |
| 22 | 25 |
| 23 NSString* SpotlightActionFromString(NSString* query) { | 26 NSString* SpotlightActionFromString(NSString* query) { |
| 24 NSString* domain = | 27 NSString* domain = |
| 25 [NSString stringWithFormat:@"%@.", spotlight::StringFromSpotlightDomain( | 28 [NSString stringWithFormat:@"%@.", spotlight::StringFromSpotlightDomain( |
| 26 spotlight::DOMAIN_ACTIONS)]; | 29 spotlight::DOMAIN_ACTIONS)]; |
| 27 DCHECK([query hasPrefix:domain]); | 30 DCHECK([query hasPrefix:domain]); |
| 28 return | 31 return |
| 29 [query substringWithRange:NSMakeRange([domain length], | 32 [query substringWithRange:NSMakeRange([domain length], |
| 30 [query length] - [domain length])]; | 33 [query length] - [domain length])]; |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 - (CSSearchableItem*)getItemForAction:(NSString*)action title:(NSString*)title; | 104 - (CSSearchableItem*)getItemForAction:(NSString*)action title:(NSString*)title; |
| 102 | 105 |
| 103 // Clears and re-inserts all Spotlight actions. | 106 // Clears and re-inserts all Spotlight actions. |
| 104 - (void)clearAndAddSpotlightActions; | 107 - (void)clearAndAddSpotlightActions; |
| 105 | 108 |
| 106 @end | 109 @end |
| 107 | 110 |
| 108 @implementation ActionsSpotlightManager | 111 @implementation ActionsSpotlightManager |
| 109 | 112 |
| 110 + (ActionsSpotlightManager*)actionsSpotlightManager { | 113 + (ActionsSpotlightManager*)actionsSpotlightManager { |
| 111 return [[[ActionsSpotlightManager alloc] | 114 return [[ActionsSpotlightManager alloc] |
| 112 initWithLargeIconService:nil | 115 initWithLargeIconService:nil |
| 113 domain:spotlight::DOMAIN_ACTIONS] autorelease]; | 116 domain:spotlight::DOMAIN_ACTIONS]; |
| 114 } | 117 } |
| 115 | 118 |
| 116 #pragma mark public methods | 119 #pragma mark public methods |
| 117 | 120 |
| 118 - (void)indexActions { | 121 - (void)indexActions { |
| 119 base::WeakNSObject<ActionsSpotlightManager> weakSelf(self); | 122 __weak ActionsSpotlightManager* weakSelf = self; |
| 120 dispatch_after( | 123 dispatch_after( |
| 121 dispatch_time(DISPATCH_TIME_NOW, static_cast<int64_t>(1 * NSEC_PER_SEC)), | 124 dispatch_time(DISPATCH_TIME_NOW, static_cast<int64_t>(1 * NSEC_PER_SEC)), |
| 122 dispatch_get_main_queue(), ^{ | 125 dispatch_get_main_queue(), ^{ |
| 123 base::scoped_nsobject<ActionsSpotlightManager> strongSelf( | 126 ActionsSpotlightManager* strongSelf = weakSelf; |
| 124 [weakSelf retain]); | |
| 125 [strongSelf clearAndAddSpotlightActions]; | 127 [strongSelf clearAndAddSpotlightActions]; |
| 126 }); | 128 }); |
| 127 } | 129 } |
| 128 | 130 |
| 129 #pragma mark private methods | 131 #pragma mark private methods |
| 130 | 132 |
| 131 - (void)clearAndAddSpotlightActions { | 133 - (void)clearAndAddSpotlightActions { |
| 132 [self clearAllSpotlightItems:^(NSError* error) { | 134 [self clearAllSpotlightItems:^(NSError* error) { |
| 133 if (!experimental_flags::IsSpotlightActionsEnabled()) { | 135 if (!experimental_flags::IsSpotlightActionsEnabled()) { |
| 134 return; | 136 return; |
| 135 } | 137 } |
| 136 base::WeakNSObject<ActionsSpotlightManager> weakSelf(self); | 138 __weak ActionsSpotlightManager* weakSelf = self; |
| 137 dispatch_after( | 139 dispatch_after( |
| 138 dispatch_time(DISPATCH_TIME_NOW, | 140 dispatch_time(DISPATCH_TIME_NOW, |
| 139 static_cast<int64_t>(1 * NSEC_PER_SEC)), | 141 static_cast<int64_t>(1 * NSEC_PER_SEC)), |
| 140 dispatch_get_main_queue(), ^{ | 142 dispatch_get_main_queue(), ^{ |
| 141 base::scoped_nsobject<ActionsSpotlightManager> strongSelf( | 143 ActionsSpotlightManager* strongSelf = weakSelf; |
| 142 [weakSelf retain]); | |
| 143 | 144 |
| 144 if (!strongSelf) { | 145 if (!strongSelf) { |
| 145 return; | 146 return; |
| 146 } | 147 } |
| 147 | 148 |
| 148 NSString* voiceSearchTitle = l10n_util::GetNSString( | 149 NSString* voiceSearchTitle = l10n_util::GetNSString( |
| 149 IDS_IOS_APPLICATION_SHORTCUT_VOICE_SEARCH_TITLE); | 150 IDS_IOS_APPLICATION_SHORTCUT_VOICE_SEARCH_TITLE); |
| 150 NSString* voiceSearchAction = | 151 NSString* voiceSearchAction = |
| 151 base::SysUTF8ToNSString(spotlight::kSpotlightActionVoiceSearch); | 152 base::SysUTF8ToNSString(spotlight::kSpotlightActionVoiceSearch); |
| 152 | 153 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 174 ]; | 175 ]; |
| 175 | 176 |
| 176 [[CSSearchableIndex defaultSearchableIndex] | 177 [[CSSearchableIndex defaultSearchableIndex] |
| 177 indexSearchableItems:spotlightItems | 178 indexSearchableItems:spotlightItems |
| 178 completionHandler:nil]; | 179 completionHandler:nil]; |
| 179 }); | 180 }); |
| 180 }]; | 181 }]; |
| 181 } | 182 } |
| 182 | 183 |
| 183 - (CSSearchableItem*)getItemForAction:(NSString*)action title:(NSString*)title { | 184 - (CSSearchableItem*)getItemForAction:(NSString*)action title:(NSString*)title { |
| 184 base::scoped_nsobject<CSSearchableItemAttributeSet> attributeSet( | 185 CSSearchableItemAttributeSet* attributeSet = |
| 185 [[CSSearchableItemAttributeSet alloc] | 186 [[CSSearchableItemAttributeSet alloc] |
| 186 initWithItemContentType:spotlight::StringFromSpotlightDomain( | 187 initWithItemContentType:spotlight::StringFromSpotlightDomain( |
| 187 spotlight::DOMAIN_ACTIONS)]); | 188 spotlight::DOMAIN_ACTIONS)]; |
| 188 [attributeSet setTitle:title]; | 189 [attributeSet setTitle:title]; |
| 189 [attributeSet setDisplayName:title]; | 190 [attributeSet setDisplayName:title]; |
| 190 | 191 |
| 191 NSString* domainID = | 192 NSString* domainID = |
| 192 spotlight::StringFromSpotlightDomain(spotlight::DOMAIN_ACTIONS); | 193 spotlight::StringFromSpotlightDomain(spotlight::DOMAIN_ACTIONS); |
| 193 NSString* itemID = [NSString stringWithFormat:@"%@.%@", domainID, action]; | 194 NSString* itemID = [NSString stringWithFormat:@"%@.%@", domainID, action]; |
| 194 | 195 |
| 195 return [self spotlightItemWithItemID:itemID attributeSet:attributeSet]; | 196 return [self spotlightItemWithItemID:itemID attributeSet:attributeSet]; |
| 196 } | 197 } |
| 197 | 198 |
| 198 @end | 199 @end |
| OLD | NEW |