-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #8281 from hansemannn/TIMOB-23828-5_5_X
[TIMOB-23828] (5_5_X) iOS 10: Expose the CSSearchQuery API
- Loading branch information
Showing
12 changed files
with
353 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,153 @@ | ||
--- | ||
name: Titanium.App.iOS.SearchQuery | ||
summary: | | ||
A search query object manages the criteria to apply when searching app content that you have previously | ||
indexed by using the Core Spotlight APIs. | ||
description: | | ||
You can use this API to search multiple <Titanium.App.iOS.SearchableItem> objects at the same time. You can do that | ||
by using the `queryString` parameter that has a special syntax to filter and index several items. Please refer | ||
to the official [Apple documentation](https://developer.apple.com/reference/corespotlight/cssearchquery) for detailed information on how to structure your search-query to get the | ||
best possible results. | ||
To use this feature make sure you have a compatible device running iOS 10 or later. | ||
To create a SearchableItem object, use the Titanium.App.iOS.createSearchableItem method. | ||
Pass a dictionary of properties to the method that will help identify the item. | ||
At minimum, you must set the [attributeSet](Titanium.App.iOS.SearchableItem.attributeSet) property, which associates | ||
the metadata with the SearchableItem object. | ||
extends: Titanium.Proxy | ||
platforms: [iphone,ipad] | ||
osver: {ios: {min: "10.0"}} | ||
since: "5.5.0" | ||
createable: true | ||
|
||
properties: | ||
- name: queryString | ||
summary: A formatted string that defines the matching criteria to apply to indexed items. | ||
description: This parameter cannot be null. | ||
type: String | ||
availability: creation | ||
osver: {ios: {min: "10.0"}} | ||
accessors: false | ||
|
||
- name: attributes | ||
summary: An array of strings that represent the attributes of indexed items. | ||
description: | | ||
Each string corresponds to a property name that can be set for an item. For a list of possible properties, see | ||
the <Titanium.App.iOS.SearchableItemAttributeSet> API. Passing null for this parameter means that the query does not use | ||
attributes to find matching items. | ||
type: Array<String> | ||
osver: {ios: {min: "10.0"}} | ||
accessors: false | ||
|
||
methods: | ||
- name: start | ||
summary: Asynchronously queries the index for items that match the query object's specifications. | ||
|
||
- name: cancel | ||
summary: Cancels a query operation. | ||
|
||
- name: isCancelled | ||
summary: A Boolean value that indicates if the query has been cancelled (`true`) or not (`false`). | ||
returns: | ||
type: Boolean | ||
summary: Returns `true` if the query was cancelled. | ||
|
||
events: | ||
- name: founditems | ||
summary: Fired when the query finds a new batch of matching items. | ||
properties: | ||
- name: items | ||
summary: An array of indexed items that match the specified query. | ||
type: Array<Titanium.App.iOS.SearchableItem> | ||
- name: foundItemsCount | ||
summary: The number of items that are currently fetched. | ||
type: Number | ||
|
||
- name: completed | ||
summary: | | ||
Fired when the query completes to inform you about it's success. | ||
To receive items, use the `founditems` event. | ||
properties: | ||
- name: success | ||
summary: Indicates if the operation succeeded. Returns true if download succeeded, false otherwise. | ||
type: Boolean | ||
- name: error | ||
summary: Error message, if any returned. Undefined otherwise. | ||
type: String | ||
|
||
examples: | ||
- title: Perform a simple search-query for all items that start with "Searchable" in it. | ||
example: | | ||
var win = Ti.UI.createWindow({ | ||
backgroundColor: "#fff" | ||
}); | ||
var btn = Ti.UI.createButton({ | ||
title: "Start search-query" | ||
}); | ||
var searchItems = []; | ||
var itemAttr = Ti.App.iOS.createSearchableItemAttributeSet({ | ||
itemContentType: Ti.App.iOS.UTTYPE_IMAGE, | ||
title: "Titanium Core Spotlight Tutorial" | ||
}); | ||
itemAttr.contentDescription = "Tech Example \nOn: " + String.formatDate(new Date(), "short"); | ||
itemAttr.keywords = ["Mobile", "Appcelerator", "Titanium"]; | ||
itemAttr.displayName = "Hello world"; | ||
var item = Ti.App.iOS.createSearchableItem({ | ||
uniqueIdentifier: "my-id", | ||
domainIdentifier: "com.mydomain", | ||
attributeSet: itemAttr | ||
}); | ||
searchItems.push(item); | ||
var indexer = Ti.App.iOS.createSearchableIndex(); | ||
indexer.addToDefaultSearchableIndex(searchItems, function(e) { | ||
if (e.success) { | ||
Ti.API.info("Press the home button and now search for your keywords"); | ||
} else { | ||
alert("Searchable index could not be created: " + JSON.stringify(e.error)); | ||
} | ||
}); | ||
btn.addEventListener("click", function() { | ||
// An array of found Ti.App.iOS.SearchableItem's | ||
var allItems = []; | ||
// The search-query | ||
var searchQuery = Ti.App.iOS.createSearchQuery({ | ||
queryString: 'title == "Titanium*"', | ||
attributes: ["title", "displayName", "keywords", "contentType"] | ||
}); | ||
// The event to be called when a new batch of items is found | ||
searchQuery.addEventListener("founditems", function(e) { | ||
for (var i = 0; i < e.items.length; i++) { | ||
allItems.push(e.items[i]); | ||
} | ||
}); | ||
// The event to be called when the search-query completes | ||
searchQuery.addEventListener("completed", function(e) { | ||
if (!e.success) { | ||
alert(e.error); | ||
} | ||
for (var i = 0; i < allItems.length; i++) { | ||
var attributeSet = allItems[i].attributeSet | ||
var foundTitle = attributeSet.title | ||
var foundDisplayName = attributeSet.displayName | ||
Ti.API.info("title: " + foundTitle + ", displayName: " + foundDisplayName); | ||
} | ||
}); | ||
// Start the search-query (or use searchQuery.cancel()) to abort it | ||
searchQuery.start(); | ||
}); | ||
win.add(btn); | ||
win.open(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
/** | ||
* Appcelerator Titanium Mobile | ||
* Copyright (c) 2009-2016 by Appcelerator, Inc. All Rights Reserved. | ||
* Licensed under the terms of the Apache Public License | ||
* Please see the LICENSE included with this distribution for details. | ||
*/ | ||
#if IS_XCODE_8 | ||
#ifdef USE_TI_APPIOSSEARCHQUERY | ||
#import "TiProxy.h" | ||
#import <CoreSpotlight/CoreSpotlight.h> | ||
|
||
@interface TiAppiOSSearchQueryProxy : TiProxy { | ||
CSSearchQuery *query; | ||
NSString *queryString; | ||
NSArray<NSString*> *attributes; | ||
} | ||
|
||
- (id)_initWithPageContext:(id<TiEvaluator>)context andArguments:(NSDictionary*)args; | ||
|
||
- (CSSearchQuery*)query; | ||
|
||
- (void)start:(id)unused; | ||
|
||
- (void)cancel:(id)unused; | ||
|
||
- (NSNumber*)isCancelled:(id)unused; | ||
|
||
@end | ||
#endif | ||
#endif |
Oops, something went wrong.