From b3b2b4f2def1719852cdffd8a190ee066b81b598 Mon Sep 17 00:00:00 2001 From: Scott Main Date: Fri, 12 Feb 2010 17:19:02 -0800 Subject: [PATCH] docs: add Search dev guide new docs: Search (topic home page) Using the Android Search Box Adding Recent Query Suggestions Adding Custom Suggestions Searchable Configuration Also adds screenshots and a ZIP file with search icons Change-Id: I44ae31b23d4878b052e91d368e95d50192776c80 --- docs/html/guide/guide_toc.cs | 14 +- .../search/adding-custom-suggestions.jd | 699 ++++++++++++++++++ .../search/adding-recent-query-suggestions.jd | 225 ++++++ docs/html/guide/topics/search/index.jd | 111 +++ .../html/guide/topics/search/search-dialog.jd | 542 ++++++++++++++ .../guide/topics/search/searchable-config.jd | 356 +++++++++ .../images/search/search-suggest-custom.png | Bin 0 -> 46670 bytes .../search/search-suggest-recent-queries.png | Bin 0 -> 47170 bytes docs/html/images/search/search-ui.png | Bin 0 -> 51727 bytes docs/html/shareables/search_icons.zip | Bin 0 -> 9753 bytes 10 files changed, 1946 insertions(+), 1 deletion(-) create mode 100644 docs/html/guide/topics/search/adding-custom-suggestions.jd create mode 100644 docs/html/guide/topics/search/adding-recent-query-suggestions.jd create mode 100644 docs/html/guide/topics/search/index.jd create mode 100644 docs/html/guide/topics/search/search-dialog.jd create mode 100644 docs/html/guide/topics/search/searchable-config.jd create mode 100644 docs/html/images/search/search-suggest-custom.png create mode 100644 docs/html/images/search/search-suggest-recent-queries.png create mode 100644 docs/html/images/search/search-ui.png create mode 100644 docs/html/shareables/search_icons.zip diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs index 13d752a369223..dce78c4b3ecbc 100644 --- a/docs/html/guide/guide_toc.cs +++ b/docs/html/guide/guide_toc.cs @@ -143,6 +143,7 @@
  • <intent-filter>
  • <manifest>
  • <meta-data>
  • +
  • <path-permission>
  • <permission>
  • <permission-group>
  • <permission-tree>
  • @@ -198,7 +199,18 @@
  • Bluetooth - new!
  • + +
  • +
    + Search + new!
    + +
  • diff --git a/docs/html/guide/topics/search/adding-custom-suggestions.jd b/docs/html/guide/topics/search/adding-custom-suggestions.jd new file mode 100644 index 0000000000000..9ea4c8be48ea2 --- /dev/null +++ b/docs/html/guide/topics/search/adding-custom-suggestions.jd @@ -0,0 +1,699 @@ +page.title=Adding Custom Suggestions +parent.title=Search +parent.link=index.html +@jd:body + +
    + +
    + +

    The Android search framework provides the ability for your application to +provide suggestions while the user types into the Android search dialog. In this guide, you'll learn +how to create custom suggestions. These are suggestions based on custom data provided by your +application. For example, if your application is a word dictionary, you can suggest words from the +dictionary that match the text entered so far. These are the most valuable suggestions because you +can effectively predict what the user wants and provide instant access to it. Once you provide +custom suggestions, you then make them available to the system-wide Quick Search Box, providing +access to your content from outside your application.

    + +

    Before you begin, you need to have implemented the Android search dialog for searches in your +application. If you haven't done this, see Using the Android Search +Dialog.

    + + +

    The Basics

    + + + +

    When the user selects a custom suggestions, the Search Manager will send a customized Intent to +your searchable Activity. Whereas a normal search query will send an Intent with the {@link +android.content.Intent#ACTION_SEARCH} action, you can instead define your custom suggestions to use +{@link android.content.Intent#ACTION_VIEW} (or any other action), and also include additional data +that's relevant to the selected suggestion. Continuing +the dictionary example, when the user selects a suggestion, your application can immediately +open the definition for that word, instead of searching the dictionary for matches.

    + +

    To provide custom suggestions, you need to do the following:

    + + + +

    Just like the Search Manager handles the rendering of the search dialog, it will also do the work +to display all search suggestions below the search dialog. All you need to do is provide a source +from which the suggestions can be retrieved.

    + +

    Note: If you're not familiar with creating Content +Providers, please read the Content +Providers developer guide before you continue.

    + +

    When the Search Manager identifies that your Activity is searchable and also provides search +suggestions, the following procedure will take place as soon as the user types into the Android +search box:

    + + + +

    At this point, the following may happen:

    + + + + + +

    Modifying the searchable configuration

    + +

    To add support for custom suggestions, add the {@code android:searchSuggestAuthority} attribute +to the {@code <searchable>} element in your searchable configuration file. For example:

    + +
    +<?xml version="1.0" encoding="utf-8"?>
    +<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    +    android:label="@string/app_label"
    +    android:hint="@string/search_hint"
    +    android:searchSuggestAuthority="my.package.MyCustomSuggestionProvider" >
    +</searchable>
    +
    + +

    You may require some additional attributes, depending on the type of Intent you attach +to each suggestion and how you want to format queries to your content provider. The other optional +attributes are discussed in the relevant sections below.

    + + +

    Creating a Content Provider

    + +

    Creating a content provider for custom suggestions requires previous knowledge about Content +Providers that's covered in the Content Provider developer +guide. For the most part, a content provider for custom suggestions is the +same as any other content provider. However, for each suggestion you provide, the respective row in +the {@link android.database.Cursor} must include specific columns that the Search Manager +understands.

    + +

    When the user starts typing into the search dialog, the Search Manager will query your Content +Provider for suggestions by calling {@link +android.content.ContentProvider#query(Uri,String[],String,String[],String) query()} each time +a letter is typed. In your implementation of {@link +android.content.ContentProvider#query(Uri,String[],String,String[],String) query()}, your +content provider must search your suggestion data and return a {@link +android.database.Cursor} that points to the rows you determine to be good suggestions.

    + +

    The following two sections describe how the Search Manager will send requests to your Content +Provider and how you can handle them, and define the columns that the Search Manager understands and +expects to be provided in the {@link android.database.Cursor} returned with each query.

    + + +

    Handling the suggestion query

    + +

    When the Search Manager makes a request for suggestions from your content provider, it will call +{@link android.content.ContentProvider#query(Uri,String[],String,String[],String)}. You must +implement this method in your content provider so that it will search your suggestions and return a +Cursor that contains the suggestions you deem relevant.

    + +

    Here's a summary of the parameters that the Search Manager will pass to your {@link +android.content.ContentProvider#query(Uri,String[],String,String[],String) query()} method +(listed in order):

    + +
    +
    uri
    +
    This will always be a content {@link android.net.Uri}, formatted as: +
    +content://your.authority/optional.suggest.path/{@link
    +android.app.SearchManager#SUGGEST_URI_PATH_QUERY}
    +
    +

    The default behavior is for Search Manager to pass this URI and append it with the query text. +For example:

    +
    +content://your.authority/optional.suggest.path/{@link
    +android.app.SearchManager#SUGGEST_URI_PATH_QUERY}/puppies
    +
    +

    The query text on the end will be encoded using URI encoding rules, so you may need to decode +it.

    +

    The {@code optional.suggest.path} portion is only included in the URI if you have set +such a path in your searchable configuration file with the {@code android:searchSuggestPath} +attribute. This is only needed if you use the same content provider for multiple searchable +activities, in which case you need to disambiguate the source of the suggestion query.

    +

    Note that {@link android.app.SearchManager#SUGGEST_URI_PATH_QUERY} is not the literal +string provided in the URI, but a constant that you should use if you need to refer to this +path.

    +
    + +
    projection
    +
    This is always null
    + +
    selection
    +
    This is the value provided in the {@code android:searchSuggestSelection} attribute of +your searchable configuration file, or null if you have not declared the {@code +android:searchSuggestSelection} attribute. More about this below.
    + +
    selectionArgs
    +
    This contains the search query as the first (and only) element of the array if you have +declared the {@code android:searchSuggestSelection} attribute in your searchable configuration. If +you have not declared {@code android:searchSuggestSelection}, then this parameter is null. More +about this below.
    + +
    sortOrder
    +
    This is always null
    +
    + +

    As you may have realized, there are two ways by which the Search Manager can send you the search +query text. The default manner is for the query text to be included as the last path of the content +URI that is passed in the {@code uri} parameter. However, if you include a selection value in your +searchable configuration's {@code +android:searchSuggestSelection} attribute, then the query text will instead be passed as the first +element of the {@code selectionArgs} string array. Both options are summarized below.

    + + +

    Get the query in the Uri

    + +

    By default, the query will be appended as the last segment of the {@code uri} +parameter (a {@link android.net.Uri} object). To retrieve the query text in this case, simply use +{@link android.net.Uri#getLastPathSegment()}. For example:

    + +
    +String query = uri.getLastPathSegment().toLowerCase();
    +
    + +

    This will return the last segment of the Uri, which is the query text entered in the search +dialog.

    + + + +

    Get the query in the selection arguments

    + +

    Instead of using the URI, you may decide it makes more sense for your {@link +android.content.ContentProvider#query(Uri,String[],String,String[],String) query()} method to +receive everything it needs to perform the look-up and you want the +{@code selection} and {@code selectionArgs} parameters to carry values. In this case, you can +add the {@code android:searchSuggestSelection} attribute to your searchable configuration with your +SQLite selection string. In this selection string, you can include a question mark ("?") as +a placeholder for the actual search query. This selection string will be delivered as the +{@code selection} string parameter, and the query entered into the search dialog will be delivered +as the first element in the {@code selectionArgs} string array parameter.

    + +

    For example, here's how you might form the {@code android:searchSuggestSelection} attribute to +create a full-text search statement:

    + +
    +<?xml version="1.0" encoding="utf-8"?>
    +<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    +    android:label="@string/app_label"
    +    android:hint="@string/search_hint"
    +    android:searchSuggestAuthority="my.package.MyCustomSuggestionProvider"
    +    android:searchSuggestIntentAction="android.Intent.action.VIEW"
    +    android:searchSuggestSelection="word MATCH ?">
    +</searchable>
    +
    + +

    When you then receive the {@code selection} and {@code selectionArgs} parameters in your {@link +android.content.ContentProvider#query(Uri,String[],String,String[],String) ContentProvider.query()} +method, they will carry the selection ("word MATCH ?") and the query text, respectively. When +these are passed to an SQLite {@link +android.database.sqlite.SQLiteDatabase#query(String,String[],String,String[],String,String, +String) query} method, they will be synthesized together (replacing the question mark with the query +text, wrapped in single-quotes). Note that if you chose this method and need to add any wildcards to +your query text, you must do so by appending (and/or prefixing) them to the {@code selectionArgs} +parameter, because this is the value that will be wrapped in quotes and inserted in place of the +question mark.

    + +

    Tip: If you don't want to define a selection clause in +the {@code android:searchSuggestSelection} attribute, but would still like to receive the query +text in the {@code selectionArgs} parameter, simply provide a non-null value for the {@code +android:searchSuggestSelection} attribute. This will trigger the query to be passed in {@code +selectionArgs} and you can ignore the {@code selection} parameter. In this way, you can instead +define the actual selection clause at a lower level so that your content provider doesn't have to +handle it.

    + + + +

    Building a suggestion table

    + + + +

    When you return suggestions to the Search Manager with a {@link android.database.Cursor}, the +Search Manager expects there to be specific columns in each row. So, regardless of whether you +decide to store +your suggestion data in an SQLite database on the device, a database on a web server, or another +format on the device or web, you must format the suggestions as rows in a table and +present them with a {@link android.database.Cursor}. There are several columns that the Search +Manager will understand, but only two are required:

    + +
    +
    {@link android.provider.BaseColumns#_ID}
    +
    This is the unique row ID for each suggestion. The search dialog requires this in order +to present the suggestions in a ListView.
    +
    {@link android.app.SearchManager#SUGGEST_COLUMN_TEXT_1}
    +
    This is the line of text that will be presented to the user as a suggestion.
    +
    + +

    The following columns are all optional (and most will be discussed further in the following +sections, so you may want to skip this list for now):

    + +
    +
    {@link android.app.SearchManager#SUGGEST_COLUMN_TEXT_2}
    +
    If your Cursor includes this column, then all suggestions will be provided in a two-line +format. The data in this column will be displayed as a second, smaller line of text below the +primary suggestion text. It can be null or empty to indicate no secondary text.
    +
    {@link android.app.SearchManager#SUGGEST_COLUMN_ICON_1}
    +
    If your Cursor includes this column, then all suggestions will be provided in an +icon-plus-text format with the icon on the left side. This value should be a reference to the +icon. It can be null or zero to indicate no icon in this row.
    +
    {@link android.app.SearchManager#SUGGEST_COLUMN_ICON_2}
    +
    If your Cursor includes this column, then all suggestions will be provided in an +icon-plus-text format with the icon on the right side. This value should be a reference to the +icon. It can be null or zero to indicate no icon in this row.
    +
    {@link android.app.SearchManager#SUGGEST_COLUMN_INTENT_ACTION}
    +
    If this column exists and this element exists at the given row, this is the action that will +be used when forming the suggestion's Intent . If the element is not provided, the action will be +taken from the {@code android:searchSuggestIntentAction} field in your searchable configuration. At +least one of these +must be present for the suggestion to generate an Intent. Note: If your action is the same for all +suggestions, it is more efficient to specify the action using {@code +android:searchSuggestIntentAction} and omit this column from the Cursor .
    +
    {@link android.app.SearchManager#SUGGEST_COLUMN_INTENT_DATA}
    +
    If this column exists and this element exists at the given row, this is the data that will be +used when forming the suggestion's Intent. If the element is not provided, the data will be taken +from the {@code android:searchSuggestIntentData} field in your searchable configuration. If neither +source is provided, +the Intent's data field will be null. Note: If your data is the same for all suggestions, or can be +described using a constant part and a specific ID, it is more efficient to specify it using {@code +android:searchSuggestIntentData} and omit this column from the Cursor . +
    +
    {@link android.app.SearchManager#SUGGEST_COLUMN_INTENT_DATA_ID}
    +
    If this column exists and this element exists at the given row, then "/" and this value will +be appended to the data field in the Intent. This should only be used if the data field specified +by the {@code android:searchSuggestIntentData} attribute in the searchable configuration has already +been set to an appropriate base string.
    +
    {@link android.app.SearchManager#SUGGEST_COLUMN_INTENT_EXTRA_DATA}
    +
    If this column exists and this element exists at a given row, this is the extra data +that will be used when forming the suggestion's Intent. If not provided, the Intent's extra data +field will be +null. This column allows suggestions to provide additional arbitrary data which will be +included as an extra in the Intent's {@link android.app.SearchManager#EXTRA_DATA_KEY} key.
    +
    {@link android.app.SearchManager#SUGGEST_COLUMN_QUERY}
    +
    If this column exists and this element exists at the given row, this is the data that will be +used when forming the suggestion's query, included as an extra in the Intent's {@link +android.app.SearchManager#QUERY} key. Required if suggestion's action is {@link +android.content.Intent#ACTION_SEARCH}, optional otherwise.
    +
    {@link android.app.SearchManager#SUGGEST_COLUMN_SHORTCUT_ID}
    +
    Only used when providing suggestions for Quick Search Box. This column is used to indicate +whether a search suggestion should be stored as a +shortcut, and whether it should be validated. Shortcuts are usually formed when the user clicks a +suggestion from Quick Search Box. If missing, the result will be stored as a shortcut and never +refreshed. If set to {@link android.app.SearchManager#SUGGEST_NEVER_MAKE_SHORTCUT}, the result will +not be stored as a shortcut. +Otherwise, the shortcut id will be used to check back for for an up to date suggestion using +{@link android.app.SearchManager#SUGGEST_URI_PATH_SHORTCUT}.
    +
    {@link android.app.SearchManager#SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING}
    +
    Only used when providing suggestions for Quick Search Box. This column is used to specify that +a spinner should be shown instead of an icon from {@link +android.app.SearchManager#SUGGEST_COLUMN_ICON_2} +while the shortcut of this suggestion is being refreshed in Quick Search Box.
    +
    + +

    Again, most of these columns will be discussed in the relevant sections below, so don't worry if +they don't make sense to you now.

    + + + +

    Declaring an Intent for suggestions

    + +

    When the user selects a suggestion from the list that appears below the search +dialog (instead of performing a search), the Search Manager will send +a custom {@link android.content.Intent} to your searchable Activity. You must define both the +action and data for the Intent.

    + + +

    Declaring the Intent action

    + +

    The most common Intent action for a custom suggestion is {@link +android.content.Intent#ACTION_VIEW}, which is appropriate when +you want to open something, like the definition for a word, a person's contact information, or a web +page. However, the Intent action can be whatever you want and can even be different for each +suggestion.

    + +

    To declare an Intent action that will be the same for all suggestions, define the action in +the {@code android:searchSuggestIntentAction} attribute of your searchable configuration file. For +example:

    + +
    +<?xml version="1.0" encoding="utf-8"?>
    +<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    +    android:label="@string/app_label"
    +    android:hint="@string/search_hint"
    +    android:searchSuggestAuthority="my.package.MySuggestionProvider"
    +    android:searchSuggestIntentAction="android.Intent.action.VIEW" >
    +</searchable>
    +
    + +

    If you want to declare an Intent action that's unique for each suggestion, add the {@link +android.app.SearchManager#SUGGEST_COLUMN_INTENT_ACTION} column to +your suggestions table and, for each suggestion, place in it the action to use (such as +{@code "android.Intent.action.VIEW"}).

    + +

    You can also combine these two techniques. For instance, you can include the {@code +android:searchSuggestIntentAction} attribute with an action to be used with all suggestions by +default, then override this action for some suggestions by declaring a different action in the +{@link android.app.SearchManager#SUGGEST_COLUMN_INTENT_ACTION} column. If you do not include +a value in the {@link android.app.SearchManager#SUGGEST_COLUMN_INTENT_ACTION} column, then the +Intent provided in the {@code android:searchSuggestIntentAction} attribute will be used.

    + +

    Note: If you do not include the +{@code android:searchSuggestIntentAction} attribute in your searchable configuration, then you +must include a value in the {@link android.app.SearchManager#SUGGEST_COLUMN_INTENT_ACTION} +column for every suggestion, or the Intent will fail.

    + + +

    Declaring Intent data

    + +

    When the user selects a suggestion, your searchable Activity will receive the Intent with the +action you've defined (as discussed in the previous section), but the Intent must also carry +data in order for your Activity to identify which suggestions was selected. Specifically, +the data should be something unique for each suggestion, such as the row ID for the suggestion in +your suggestions table. When the Intent is received, +you can retrieve the attached data with {@link android.content.Intent#getData()} or {@link +android.content.Intent#getDataString()}.

    + +

    There are two ways to define the data that is included with the Intent:

    + +
      +
    1. Define the data for each suggestion inside the {@link +android.app.SearchManager#SUGGEST_COLUMN_INTENT_DATA} column of your suggestions table.
    2. +
    3. Fragment a data URI into two pieces: the portion common to all suggestions and the portion +unique to each suggestion. Place these parts into the {@code android:searchSuggestIntentData} +attribute of the searchable configuration and the {@link +android.app.SearchManager#SUGGEST_COLUMN_INTENT_DATA_ID} column of your +suggestions table, respectively.
    4. +
    + +

    The first option is straight-forward. Simply provide all necessary data information for each +Intent in the suggestions table by including the {@link +android.app.SearchManager#SUGGEST_COLUMN_INTENT_DATA} column and then populating it with unique +data for each row. The data from this column will be attached to the Intent exactly as it +is found in this column. You can then retrieve it with with {@link android.content.Intent#getData()} +or {@link android.content.Intent#getDataString()}.

    + +

    Tip: It's usually easiest to use the table's row ID as the +Intent data because it's always unique. And the easiest way to do that is by using the +{@link android.app.SearchManager#SUGGEST_COLUMN_INTENT_DATA} column name as an alias for the row ID +column. See the Searchable Dictionary sample +app for an example in which {@link android.database.sqlite.SQLiteQueryBuilder} is used to +create a projection map of column names to aliases.

    + +

    The second option is to fragment your data URI into the common piece and the unique piece. +Declare the piece of the URI that is common to all suggestions in the {@code +android:searchSuggestIntentData} attribute of your searchable configuration. For example:

    + +
    +<?xml version="1.0" encoding="utf-8"?>
    +<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    +    android:label="@string/app_label"
    +    android:hint="@string/search_hint"
    +    android:searchSuggestAuthority="my.package.MySuggestionProvider"
    +    android:searchSuggestIntentAction="android.Intent.action.VIEW"
    +    android:searchSuggestIntentData="content://my.package/datatable" >
    +</searchable>
    +
    + +

    Now include the final path for each suggestion (the unique part) in the {@link +android.app.SearchManager#SUGGEST_COLUMN_INTENT_DATA_ID} +column of your suggestions table. When the user selects a suggestion, the Search Manager will take +the string from {@code android:searchSuggestIntentData}, append a slash ("/") and then add the +respective value from the {@link android.app.SearchManager#SUGGEST_COLUMN_INTENT_DATA_ID} column to +form a complete content URI. You can then retrieve the {@link android.net.Uri} with with {@link +android.content.Intent#getData()}.

    + +

    Add more data

    + +

    If you need to express even more information with your Intent, you can add another table column, +{@link android.app.SearchManager#SUGGEST_COLUMN_INTENT_EXTRA_DATA}, which can store additional +information about the suggestion. The data saved in this column will be placed in {@link +android.app.SearchManager#EXTRA_DATA_KEY} of the Intent's extra Bundle.

    + + +

    Handling the Intent

    + +

    Now that your search dialog provides custom search suggestions with custom formatted Intents, you +need your searchable Activity to handle these Intents as they are delivered once the user selects a +suggestion. (This is, of course, in addition to handling the {@link +android.content.Intent#ACTION_SEARCH} Intent, which your searchable Activity already does.) +Accepting the new Intent is rather self-explanatory, so we'll skip straight to an example:

    + +
    +Intent intent = getIntent();
    +if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
    +    // Handle the normal search query case
    +    String query = intent.getStringExtra(SearchManager.QUERY);
    +    doSearch(query);
    +} else if (Intent.ACTION_VIEW.equals(intent.getAction())) {
    +    // Handle a suggestions click (because my suggestions all use ACTION_VIEW)
    +    Uri data = intent.getData());
    +    showResult(rowId);
    +}
    +
    + +

    In this example, the Intent action is {@link +android.content.Intent#ACTION_VIEW} and the data carries a complete URI pointing to the suggested +item, as synthesized by the {@code android:searchSuggestIntentData} string and {@link +android.app.SearchManager#SUGGEST_COLUMN_INTENT_DATA_ID} column. The URI is then passed to a local +method that will query the content provider for the item specified by the URI and show it.

    + + + +

    Rewriting the query text

    + +

    If the user navigates through the suggestions list using the device directional controls, the +text in the search dialog won't change, by default. However, you can temporarily rewrite the +user's query text as it appears in the text box with +a query that matches the currently selected suggestion. This enables the user to see what query is +being suggested (if appropriate) and then select the search box and edit the query before +dispatching it as a search.

    + +

    You can rewrite the query text in the following ways:

    + +
      +
    1. Add the {@code android:searchMode} attribute to your searchable configuration with the +"queryRewriteFromText" value. In this case, the content from the suggestion's {@link +android.app.SearchManager#SUGGEST_COLUMN_TEXT_1} +column will be used to rewrite the query text.
    2. +
    3. Add the {@code android:searchMode} attribute to your searchable configuration with the +"queryRewriteFromData" value. In this case, the content from the suggestion's +{@link android.app.SearchManager#SUGGEST_COLUMN_INTENT_DATA} column will be used to rewrite the +query text. Note that this should only +be used with Uri's or other data formats that are intended to be user-visible, such as HTTP URLs. +Internal Uri schemes should not be used to rewrite the query in this way.
    4. +
    5. Provide a unique query text string in the {@link +android.app.SearchManager#SUGGEST_COLUMN_QUERY} column of your suggestions table. If this column is +present and contains a value for the current suggestion, it will be used to rewrite the query text +(and override either of the previous implementations).
    6. +
    + + +

    Exposing search suggestions to Quick Search Box

    + +

    Once your application is configured to provide custom search suggestions, making them available +to the globally-accessible Quick Search Box is as easy as modifying your searchable configuration to +include {@code android:includeInGlobalSearch} as "true".

    + +

    The only scenario in which additional work will be required is if your content provider for +custom suggestions requires a permission for read access. In which case, you need to add a special +{@code <path-permission>} element for the provider to grant Quick Search Box read access to your +content provider. For example:

    + +
    +<provider android:name="MySuggestionProvider"
    +          android:authorities="my.package.authority"
    +          android:readPermission="com.example.provider.READ_MY_DATA"
    +          android:writePermission="com.example.provider.WRITE_MY_DATA">
    +  <path-permission android:pathPrefix="/search_suggest_query"
    +                   android:readPermission="android.permission.GLOBAL_SEARCH" />
    +</provider>
    +
    + +

    In this example, the provider restricts read and write access to the content. The +{@code <path-permission>} element amends the restriction by granting read access to content +inside the {@code "/search_suggest_query"} path prefix when the {@code +"android.permission.GLOBAL_SEARCH"} permission exists. This grants access to Quick Search Box +so that it may query your content provider for suggestions.

    + +

    Content providers that enforce no permissions are already available to the search +infrastructure.

    + + +

    Enabling suggestions on a device

    + +

    When your application is configured to provide suggestions in Quick Search Box, it is not +actually enabled to provide suggestions in Quick Search Box, by default. It is the user's choice +whether to include suggestions from your application in the Quick Search Box. To enable search +suggestions from your application, the user must open "Searchable items" (in Settings > Search) and +enable your application as a searchable item.

    + +

    Each application that is available to Quick Search Box has an entry in the Searchable items +settings page. The entry includes the name of the application and a short description of what +content can be searched from the application and made available for suggestions in Quick Search Box. +To define the description text for your searchable application, add the {@code +android:searchSettingsDescription} attribute to your searchable configuration. For example:

    + +
    +<?xml version="1.0" encoding="utf-8"?>
    +<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    +    android:label="@string/app_label"
    +    android:hint="@string/search_hint"
    +    android:searchSuggestAuthority="my.package.MySuggestionProvider"
    +    android:searchSuggestIntentAction="android.Intent.action.VIEW"
    +    android:includeInGlobalSearch="true"
    +    android:searchSettingsDescription="@string/search_description" >
    +</searchable>
    +
    + +

    The string for {@code android:searchSettingsDescription} should be as concise as possible and +state the content that is searchable. For example, "Artists, albums, and tracks" for a music +application, or "Saved notes" for a notepad application. Providing this description is important so +the user knows what kind of suggestions will be provided. This attribute should always be included +when {@code android:includeInGlobalSearch} is "true".

    + +

    Remember that the user must visit this settings menu to enable search suggestions for your +application before your search suggestions will appear in Quick Search Box. As such, if search is an +important aspect of your application, then you may want to consider a way to message this to your +users — perhaps with a note the first time they launch the app about how to enable search +suggestions for Quick Search Box.

    + + +

    Managing Quick Search Box suggestion shortcuts

    + +

    Suggestions that the user selects from Quick Search Box may be automatically made into shortcuts. +These are suggestions that the Search Manager has copied from your content provider so it can +quickly access the suggestion without the need to re-query your content provider.

    + +

    By default, this is enabled for all suggestions retrieved by Quick Search Box, but if your +suggestion data may change over time, then you can request that the shortcuts be refreshed. For +instance, if your suggestions refer to dynamic data, such as a contact's presence status, then you +should request that the suggestion shortcuts be refreshed when shown to the user. To do so, +include the {@link android.app.SearchManager#SUGGEST_COLUMN_SHORTCUT_ID} in your suggestions table. +Using this column, you can +configure the shortcut behavior for each suggestion in the following ways:

    + +
      +
    1. Have Quick Search Box re-query your content provider for a fresh version of the shortcutted +suggestion. +

      Provide a value in the {@link android.app.SearchManager#SUGGEST_COLUMN_SHORTCUT_ID} column +and the suggestion will be +re-queried for a fresh version of the suggestion each time the shortcut is displayed. The shortcut +will be quickly displayed with whatever data was most recently available until the refresh query +returns, after which the suggestion will be dynamically refreshed with the new information. The +refresh query will be sent to your content provider with a URI path of {@link +android.app.SearchManager#SUGGEST_URI_PATH_SHORTCUT} +(instead of {@link android.app.SearchManager#SUGGEST_URI_PATH_QUERY}). The Cursor you return should +contain one suggestion using the +same columns as the original suggestion, or be empty, indicating that the shortcut is no +longer valid (in which case, the suggestion will disappear and the shortcut will be removed).

      +

      If a suggestion refers to data that could take longer to refresh, such as a network based +refresh, you may also add the {@link +android.app.SearchManager#SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING} column to your suggestions +table with a value +of "true" in order to show a progress spinner for the right hand icon until the refresh is complete. +(Any value other than "true" will not show the progress spinner.)

    2. +
    3. Prevent the suggestion from being copied into a shortcut at all. +

      Provide a value of {@link android.app.SearchManager#SUGGEST_NEVER_MAKE_SHORTCUT} in the +{@link android.app.SearchManager#SUGGEST_COLUMN_SHORTCUT_ID} column. In +this case, the suggestion will never be copied into a shortcut. This should only be necessary if you +absolutely do not want the previously copied suggestion to appear at all. (Recall that if you +provide a normal value for the column then the suggestion shortcut will appear only until the +refresh query returns.)

    4. +
    5. Allow the default shortcut behavior to apply. +

      Simply leave the {@link android.app.SearchManager#SUGGEST_COLUMN_SHORTCUT_ID} empty for each +suggestion that will not change and can be saved as a shortcut.

    6. +
    + +

    Of course, if none of your suggestions will ever change, then you do not need the +{@link android.app.SearchManager#SUGGEST_COLUMN_SHORTCUT_ID} column at all.

    + +

    Note: Quick Search Box will ultimately decide whether to shortcut +your app's suggestions, considering these values as a strong request from your application.

    + + +

    About Quick Search Box suggestion ranking

    + +

    Once your application's search results are made available to Quick Search Box, how they surface +to the user for a particular query will be determined as appropriate by Quick Search Box ranking. +This may depend on how many other apps have results for that query, and how often the user has +selected on your results compared to those of the other apps. There is no guarantee about how +ranking will occur, or whether your app's suggestions will show at all for a given query. In +general, you can expect that providing quality results will increase the likelihood that your app's +suggestions are provided in a prominent position, and apps that provide lower quality suggestions +will be more likely to be ranked lower and/or not displayed.

    + +
    +

    See the Searchable +Dictionary sample app for a complete demonstration of custom search suggestions.

    +
    + diff --git a/docs/html/guide/topics/search/adding-recent-query-suggestions.jd b/docs/html/guide/topics/search/adding-recent-query-suggestions.jd new file mode 100644 index 0000000000000..37e0e8275edff --- /dev/null +++ b/docs/html/guide/topics/search/adding-recent-query-suggestions.jd @@ -0,0 +1,225 @@ +page.title=Adding Recent Query Suggestions +parent.title=Search +parent.link=index.html +@jd:body + +
    +
    +

    Key classes

    +
      +
    1. {@link android.provider.SearchRecentSuggestions}
    2. +
    3. {@link android.content.SearchRecentSuggestionsProvider}
    4. +
    +

    In this document

    +
      +
    1. The Basics
    2. +
    3. Modifying the searchable +configuration
    4. +
    5. Creating a Content Provider
    6. +
    7. Saving queries
    8. +
    9. Clearing the suggestion data
    10. +
    +

    See also

    +
      +
    1. Searchable Configuration
    2. +
    +
    +
    + +

    The Android search framework provides the ability for your application to +provide suggestions while the user types into the Android search dialog. In this guide, you'll learn +how to create recent query suggestions. These are suggestions based +on queries previously entered by the user. So, if the user previously searched for "puppies" then it +will appear as a suggestion as they begin typing the same string of text. The screenshot below +shows an example of recent query suggestions.

    + +

    Before you begin, you need to have implemented the Android search dialog for searches in your +application. If you haven't done this, see Using the Android Search +Dialog.

    + + +

    The Basics

    + + + +

    Recent query suggestions are simply saved searches. When the user selects one of +the suggestions, your searchable Activity will receive a normal {@link +android.content.Intent#ACTION_SEARCH} Intent with the suggestion as the search query, which your +searchable Activity will already handle.

    + +

    To provide recent queries suggestions, you need to:

    + + + +

    Just like the Search Manager handles the rendering of the search dialog, it will also do the work +to display all search suggestions below the search dialog. All you need to do is provide a source +from which the suggestions can be retrieved.

    + +

    When the Search Manager identifies that your Activity is searchable and also provides search +suggestions, the following procedure will take place as soon as the user types into the Android +search box:

    + + + +

    At this point, the following may happen:

    + + + +

    As you'll soon discover, the {@link android.content.SearchRecentSuggestionsProvider} class that +you'll extend for your content provider will automatically do the work described above, so there's +actually very little code to write.

    + + +

    Modifying the searchable configuration

    + +

    First, you need to add the {@code android:searchSuggestAuthority} and +{@code android:searchSuggestSelection} attributes to the {@code <searchable>} element in your +searchable configuration file. For example:

    + +
    +<?xml version="1.0" encoding="utf-8"?>
    +<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    +    android:label="@string/app_label"
    +    android:hint="@string/search_hint"
    +    android:searchSuggestAuthority="my.package.MySuggestionProvider"
    +    android:searchSuggestSelection=" ?" >
    +</searchable>
    +
    + +

    The value for {@code android:searchSuggestAuthority} should be a fully-qualified name for +your content provider: your application package name followed by the name of your content provider. +This string must match the authority used in the content provider (discussed in the next section). +

    + +

    The value for {@code android:searchSuggestSelection} must be a single question-mark, preceded by +a space (" ?"), which is simply a placeholder for the SQLite selection argument (which will be +automatically replaced by the query text entered by the user).

    + + +

    Creating a Content Provider

    + +

    The content provider that you need for recent query suggestions must be an implementation +of {@link android.content.SearchRecentSuggestionsProvider}. This class does practically everything +for you. All you have to do is write a class constructor that executes one line of code.

    + +

    For example, here's a complete implementation of a content provider for recent query +suggestions:

    + +
    +public class MySuggestionProvider extends SearchRecentSuggestionsProvider {
    +    public final static String AUTHORITY = "my.package.MySuggestionProvider";
    +    public final static int MODE = DATABASE_MODE_QUERIES;
    +
    +    public MySuggestionProvider() {
    +        setupSuggestions(AUTHORITY, MODE);
    +    }
    +}
    +
    + +

    The call to {@link android.content.SearchRecentSuggestionsProvider#setupSuggestions(String,int)} +passes the name of the search authority (matching the one in the searchable configuration) and a +database mode. The database mode must include {@link +android.content.SearchRecentSuggestionsProvider#DATABASE_MODE_QUERIES} and can optionally include +{@link +android.content.SearchRecentSuggestionsProvider#DATABASE_MODE_2LINES}, which will add another column +to the suggestions table that allows you to provide a second line of text with each suggestion. For +example:

    +
    +public final static int MODE = DATABASE_MODE_QUERIES | DATABASE_MODE_2LINES;
    +
    + +

    In the following section, you'll see how to save both lines of text.

    + +

    Now simply declare the content provider in your application manifest with the same authority +string used in the class (and in the searchable configuration). For example:

    + +
    +<application>
    +    <provider android:name=".MySuggestionProvider"
    +              android:authorities="my.package.authority" />
    +    ...
    +</application>
    +
    + + +

    Saving queries

    + +

    In order to populate your collection of recent queries, you need to add each query +received by your searchable Activity to the content provider you've just built. To do this, create +an instance of {@link +android.provider.SearchRecentSuggestions} and call {@link +android.provider.SearchRecentSuggestions#saveRecentQuery(String,String)} each time your searchable +Activity receives a query. For example, here's how you can save the query during your +Activity's {@link android.app.Activity#onCreate(Bundle) onCreate()} method:

    + +
    +@Override
    +public void onCreate(Bundle savedInstanceState) {
    +    super.onCreate(savedInstanceState);
    +    setContentView(R.layout.main);
    +
    +    Intent Intent  = getIntent();
    +
    +    if (Intent.ACTION_SEARCH.equals(Intent .getAction())) {
    +        String query = Intent .getStringExtra(SearchManager.QUERY);
    +        SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,
    +                MySuggestionProvider.AUTHORITY, MySuggestionProvider.MODE);
    +        suggestions.saveRecentQuery(query, null);
    +    }
    +}
    +
    + +

    Notice that the {@link android.content.SearchRecentSuggestionsProvider} constructor requires the +same authority and database mode declared by your content provider.

    + +

    The {@link android.provider.SearchRecentSuggestions#saveRecentQuery(String,String)} method takes +the search query string as the first parameter and, optionally, a second string to include as the +second line of the suggestion. The second parameter is only used if you've enabled two-line mode +for the search suggestions with {@link +android.content.SearchRecentSuggestionsProvider#DATABASE_MODE_2LINES}. If you have enabled +two-line mode, then the query text will be matched against this second line as well.

    + +

    That's all that's needed to build a recent queries suggestion provider. However, there's one +other important thing to do: provide the ability for the user to clear this search history.

    + + +

    Clearing the suggestion data

    + +

    To protect the user's privacy, you should always provide a way for the user to clear the recent +query suggestions. To clear the recent queries, simply call {@link +android.provider.SearchRecentSuggestions#clearHistory()}. For example:

    + +
    +SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,
    +        HelloSuggestionProvider.AUTHORITY, HelloSuggestionProvider.MODE);
    +suggestions.clearHistory();
    +
    + +

    Simply execute this from your choice of a "Clear Search History" menu item, +preference item, or button. You should also provide a confirmation dialog when this is pressed, to +verify that the user wants to delete their search history.

    + diff --git a/docs/html/guide/topics/search/index.jd b/docs/html/guide/topics/search/index.jd new file mode 100644 index 0000000000000..b2252bbf855eb --- /dev/null +++ b/docs/html/guide/topics/search/index.jd @@ -0,0 +1,111 @@ +page.title=Search +@jd:body + +
    + +
    + + +

    The ability to search is considered to be a core user feature on Android. The user should be able +to search any data that is available to them, whether the content is located on the device or the +Internet. This experience should be seamless and consistent across the entire +system, which is why Android provides a simple search framework to help you provide users with +a familiar search dialog and a great search experience.

    + + + +

    Android's search framework provides a user interface in which the user can perform a search and +an interaction layer that communicates with your application. This way, you don't have to build +a search box that the user must find in order to begin a search. Instead, +a custom search dialog will appear at the top of the screen at the user's command. +The search framework will manage the search dialog and when the user executes their search, the +search framework will pass the query text to your application so that your application can begin a +search. The screenshot to the right shows an example of the search dialog (using +search suggestions).

    + +

    Once your application is set up to use the search dialog, you can:

    + + + +

    The following documents will teach you how to use the search dialog in +your application:

    + +
    +
    Using the Android Search Dialog
    +
    How to set up your application to use the search dialog for searches.
    +
    Adding Recent Query +Suggestions
    +
    How to show suggestions based on queries previously used in the search dialog.
    +
    Adding Custom Suggestions
    +
    How to show suggestions based on custom data from your application and offer your suggestions +in the system-wide Quick Search Box.
    +
    + +

    Also, the Searchable Configuration document +provides a reference for the searchable configuration file (though the above +documents also discuss the configuration file in terms of specific behaviors).

    + +

    Note: The search framework does not provide APIs to +perform searches on your data. Performing actual searches is a task that you must accomplish +using APIs appropriate for your data, such as those in {@link android.database.sqlite} +if your data is in an SQLite database.

    + + +

    Protecting User Privacy

    + +

    When you implement search in your application, you should take steps to protect the user's +privacy whenever possible. Many users consider their activities on the phone, including searches, to +be private information. To protect the user's privacy, you should abide by the following +principles:

    + + + + diff --git a/docs/html/guide/topics/search/search-dialog.jd b/docs/html/guide/topics/search/search-dialog.jd new file mode 100644 index 0000000000000..718668cd08d70 --- /dev/null +++ b/docs/html/guide/topics/search/search-dialog.jd @@ -0,0 +1,542 @@ +page.title=Using the Android Search Dialog +parent.title=Search +parent.link=index.html +@jd:body + +
    + +
    + +

    When you want to provide search in your application, the last thing you should have to worry +about is where to put your search box. By using the Android search framework, your application will +reveal a custom search dialog whenever the user requests it. At the +press of a dedicated search key or an API call from your application, the search dialog will +appear at the top of the screen and will automatically show your application icon. An example is +shown in the screenshot below.

    + +

    This guide will teach you how to set up your application to provide search in a custom search +dialog. In doing so, you will provide a standardized search experience and be able to add +features like voice search and search suggestions.

    + + +

    The Basics

    + + + +

    The Android search framework will manage the search dialog on your behalf; you never need +to draw it or worry about where it is, and your current Activity will not be +interrupted. The {@link android.app.SearchManager} is the component that does this work for +you (hereafter, referred to as "the Search Manager"). It manages the life of the Android search +dialog and will send your application the search query when executed by the user.

    + +

    When the user executes a search, the Search Manager will use a specially-formed Intent to pass +the search query to the Activity that you've declared to handle searches. Essentially, all you +need is an Activity that receives this Intent, performs the search, and presents the results. +Specifically, what you need is the following:

    + +
    +
    A searchable configuration
    +
    This is an XML file that configures the search dialog and includes settings for +features such as the hint text shown in text box and settings voice search and search +suggestion.
    +
    A searchable Activity
    +
    This is the {@link android.app.Activity} that receives the search query then +searches your data and displays the search results.
    +
    A mechanism by which the user can invoke search
    +
    By default, the device search key (if available) will invoke the search dialog once +you've configured a searchable Activity. However, you should always provide another means by +which the user can invoke a search, such as with a search button in the Options Menu or elsewhere in +the Activity UI, because not all devices provide a dedicated search key.
    +
    + + +

    Creating a Searchable Configuration

    + +

    The searchable configuration is an XML file that defines several settings for the Android search +dialog in your application. This file is traditionally named {@code searchable.xml} and must be +saved in the {@code res/xml/} project directory.

    + +

    The file must consist of the {@code <searchable>} element as the root node and specify one +or more attributes that configure your search dialog. For example:

    + +
    +<?xml version="1.0" encoding="utf-8"?>
    +<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    +    android:label="@string/app_label" >
    +</searchable>
    +
    + +

    This is the minimum configuration required in order to provide the search dialog. The {@code +android:label} attribute is the only required attribute and points to a string resource, which +should normally be the same as the application. (Although it's required, this +label isn't actually shown to the user until you enable suggestions for Quick Search Box.)

    + +

    There are several other attributes accepted by the {@code <searchable>} element. Most of +which apply only when configuring features such as search suggestions and voice +search. However, we recommend that you always include the {@code android:hint} attribute, which +specifies a string resource for the text to display in the search dialog's text box before the user +enters their query—it provides important clues to the user about what they can search.

    + +

    Tip: For consistency among other +Android applications, you should format the string for {@code android:hint} as "Search +<content-or-product>". For example, "Search songs and artists" or "Search +YouTube".

    + +

    Next, you'll hook this configuration into your application.

    + + +

    Creating a Searchable Activity

    + +

    When the user executes a search from the search dialog, the Search Manager will send +your searchable {@link android.app.Activity} the search query with the {@link +android.content.Intent#ACTION_SEARCH} {@link android.content.Intent}. Your searchable Activity will +then search your data and present the results.

    + + +

    Declaring a searchable Activity

    + +

    If you don't have one already, create an {@link android.app.Activity} that will be used to +perform searches, then declare it to +accept the {@link android.content.Intent#ACTION_SEARCH} {@link android.content.Intent} and apply the +searchable configuration. To do so, you need to add an {@code +<intent-filter>} element and a {@code <meta-data>} element to the +appropriate {@code <activity>} element in your manifest file. For example:

    + +
    +<application ... >
    +    <activity android:name=".MySearchableActivity" >
    +        <intent-filter>
    +            <action android:name="android.intent.action.SEARCH" />
    +        </intent-filter>
    +        <meta-data android:name="android.app.searchable"
    +                   android:resource="@xml/searchable"/>
    +    </activity>
    +    ...
    +</application>
    +
    + +

    The {@code android:name} attribute in the {@code <meta-data>} element must be defined with +{@code "android.app.searchable"} and the {@code android:resource} attribute value must be a +reference to the searchable configuration file saved in {@code res/xml} (in this example, it +refers to the {@code res/xml/searchable.xml} file).

    + +

    If you're wondering why the {@code +<intent-filter>} does not include a {@code <category>} with the {@code DEFAULT} +value, it's because the Intent that is delivered to this Activity when a search is executed will +explicitly define this Activity as the component for the Intent (which the Search Manager knows +from the searcahble meta-data declared for the Activity).

    + +

    Be aware that the search dialog will not be available from within every +Activity of your application, by default. Rather, the search dialog will be presented to +users only when they +invoke search from a searchable context of your application. A searchable context is any Activity +for which you have +declared searchable meta-data in the manifest file. For example, the searchable Activity itself +(declared in the manifest snippet above) is +a searchable context because it contains searchable meta-data that defines the +searchable configuration. Any other Activity in your application is not a searchable context, by +default, and thus, will not reveal the search dialog. You probably do want the +search dialog to be available from every Activity in your application, so this can be easily +fixed.

    + +

    If you want all of your activities to provide the search dialog, add another {@code +<meta-data>} element inside the {@code +<application>} element. Use this element to declare the existing searchable Activity as the +default searchable Activity. For example:

    + +
    +<application ... >
    +    <activity android:name=".MySearchableActivity" >
    +        <intent-filter>
    +            <action android:name="android.intent.action.SEARCH" />
    +        </intent-filter>
    +        <meta-data android:name="android.app.searchable"
    +                   android:resource="@xml/searchable"/>
    +    </activity>
    +    <activity android:name=".AnotherActivity" ... >
    +    </activity>
    +    <!-- this one declares the searchable Activity for the whole app -->
    +    <meta-data android:name="android.app.default_searchable"
    +               android:value=".MySearchableActivity" />
    +    ...
    +</application>
    +
    + +

    The {@code <meta-data>} element with the {@code android:name} attribute value of +{@code "android.app.default_searchable"} specifies a default searchable Activity for the context in +which it is placed (which, in this case, is the entire application). The searchable Activity to +use is specified with the {@code android:value} attribute. All other activities in the +application, such as {@code AnotherActivity}, are now considered a searchable context and can invoke +the search dialog. When a search is executed, {@code MySearchableActivity} will +be launched to handle the search query.

    + +

    Notice that this allows you to control which activities provide search at a more granular level. +To specify only an individual Activity as a searchable context, simply place the {@code +<meta-data>} with the {@code +"android.app.default_searchable"} name inside the respective {@code <activity>} +element (rather than inside the {@code <application>}). And, while it is uncommon, you can +even create more than one searchable Activity and provide each one in different contexts of your +application, either by declaring a different searchable Activity in each {@code <activity>} +element, or declaring a default searchable Activity for the entire application and then overriding +it with a different {@code <meta-data>} element inside certain activities.

    + + +

    Performing a search

    + +

    Once your Activity is declared searchable, performing the actual search involves three steps: +receiving the query, searching your data, and presenting the results.

    + +

    Traditionally, your search results should be presented in a {@link android.widget.ListView} +(assuming that our results are text-based), so +you may want your searchable Activity to extend {@link android.app.ListActivity}, which +provides easy access to {@link android.widget.ListView} APIs. (See the List View Tutorial for a simple +{@link android.app.ListActivity} sample.)

    + + +

    Receiving the query

    + +

    When a search is executed from the search dialog, your searchable Activity will be opened +with the {@link android.content.Intent#ACTION_SEARCH} {@link android.content.Intent}, which carries +the search query in the +{@link android.app.SearchManager#QUERY QUERY} extra. All you need to do is check for +this Intent and extract the string. For example, here's how you can get the query when your +Activity launches:

    + +
    +@Override
    +public void onCreate(Bundle savedInstanceState) {
    +    super.onCreate(savedInstanceState);
    +    setContentView(R.layout.search);
    +
    +    Intent intent = getIntent();
    +
    +    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
    +      String query = intent.getStringExtra(SearchManager.QUERY);
    +      doMySearch(query);
    +    }
    +}
    +
    + +

    The {@link android.app.SearchManager#QUERY QUERY} string is always included with +the {@link android.content.Intent#ACTION_SEARCH} Intent. In this example, the query is +retrieved and passed to a local {@code doMySearch()} method where the actual search operation +is done.

    + + +

    Searching your data

    + +

    The process of storing and searching your data is a process that's unique to your application. +There are many ways that you might do this and discussing all options is beyond the scope of +this document. This guide will not teach you how to store your data and search it; this +is something you must carefully consider in terms of your needs and your data. However, here are +some tips you may be able to apply:

    + + + + + + +

    Regardless of where your data lives and how you search it, we recommend that you return search +results to your searchable Activity with an {@link android.widget.Adapter}. This way, you can easily +present all the search results in a {@link android.widget.ListView}. If your data comes from a +SQLite database query, then you can easily apply your results to a {@link android.widget.ListView} +using a {@link android.widget.CursorAdapter}. If your data comes in some other type of format, then +you can create an extension of the {@link android.widget.BaseAdapter}.

    + +

    Presenting the results

    + +

    Presenting your search results is mostly a UI detail and not something covered by the search +framework APIs. However, a simple solution is to create your searchable Activity to extend {@link +android.app.ListActivity} and then call {@link +android.app.ListActivity#setListAdapter(ListAdapter)}, passing it an {@link +android.widget.Adapter} that is bound to your data. This will automatically project all the +results into the Activity {@link android.widget.ListView}.

    + +

    For more help presenting your results, see the {@link android.app.ListActivity} +documentation.

    + +

    Also see the Searchable Dictionary sample +application for an a complete demonstration of how to search an SQLite database and use an +{@link android.widget.Adapter} to provide resuls in a {@link android.widget.ListView}.

    + + +

    Invoking the Search Dialog

    + +

    Once you have a searchable Activity in place, invoking the search dialog so the user can +submit a +query is easy. Many Android devices provide a dedicated search key and when it is pressed while the +user is within a searchable context of your application, the search dialog will be revealed. +However, +you should never assume that a search key is available on the user's device and should always +provide a search button in your UI that will invoke search.

    + +

    To invoke search from your Activity, simply call {@link +android.app.Activity#onSearchRequested()}.

    + +

    For example, you should provide a menu item in your Options Menu or a button in your UI to +invoke search with this method. For your convenience, this search_icons.zip file includes icons for +medium and high density screens, which you can use for your menu item or button (low density +screens will automatically scale-down the hdpi image by one half).

    + + + +

    You can also enable "type-to-search" functionality in your Activity by calling {@link +android.app.Activity#setDefaultKeyMode(int) setDefaultKeyMode}({@link +android.app.Activity#DEFAULT_KEYS_SEARCH_LOCAL}). When this is enabled and the user begins typing on +the keyboard, search will automatically be +invoked and the keystrokes will be inserted in the search dialog. Be sure to enable this mode +during your Activity {@link android.app.Activity#onCreate(Bundle) onCreate()} method.

    + + +

    The impact of the search dialog on your Activity life-cycle

    + +

    The search dialog behaves like a {@link android.app.Dialog} that floats at the top of the +screen. It +does not cause any change in the Activity stack, so no life-cycle methods (such as {@link +android.app.Activity#onPause()}) will +be called. All that happens is your Activity loses input focus as it is given to the search dialog. +

    + +

    If you want to be notified when search is invoked, simply override the {@link +android.app.Activity#onSearchRequested()} method. When this is called, you can do any work you may +want to do when your Activity looses input focus (such as pause animations). But unless you are +Passing Search Context Data (discussed above), you should always +call the super class implementation. For example:

    + +
    +@Override
    +public boolean onSearchRequested() {
    +    pauseSomeStuff();
    +    return super.onSearchRequested();
    +}
    +
    + +

    If the user cancels search by pressing the device Back key, the Activity in which search was +invoked will re-gain input focus. You can register to be notified when the search dialog is +closed with {@link android.app.SearchManager#setOnDismissListener(SearchManager.OnDismissListener)} +and/or {@link android.app.SearchManager#setOnCancelListener(SearchManager.OnCancelListener)}. You +should normally only need to register the {@link android.app.SearchManager.OnDismissListener +OnDismissListener}, because this is called every time that the search dialog is closed. The {@link +android.app.SearchManager.OnCancelListener OnCancelListener} only pertains to events in which the +user explicitly left the search dialog, so it is not called when a search is executed (in which +case, the search dialog naturally disappears).

    + +

    If the current Activity is not the searchable Activity, then the normal Activity life-cycle +events will be triggered once the user executes a search (the current Activity will receive {@link +android.app.Activity#onPause()} and so forth, as +described in Application +Fundamentals). If, however, the current Activity is the searchable Activity, then one of two +things will happen:

    + + + +

    This second scenario is normally ideal, because the chances are good that once a search is +completed, the user will perform additional searches and it's a bad experience if your application +piles multiple instances of the searchable Activity on the stack. So we recommend that you set your +searchable Activity to "singleTop" launch mode in the application manifest. For example:

    + +
    +<activity android:name=".MySearchableActivity"
    +              android:launchMode="singleTop" >
    +    <intent-filter>
    +        <action android:name="android.intent.action.SEARCH" />
    +    </intent-filter>
    +    <meta-data android:name="android.app.searchable"
    +                      android:resource="@xml/searchable"/>
    +  </activity>
    +
    + + +

    Passing Search Context Data

    + +

    In order to refine your search criteria, you may want to provide some additional +data to your searchable Activity when a search is executed. For instance, when you search your data, +you may want to filter results based on more than just the search query text. In a simple +case, you could just make your refinements inside the searchable Activity, for every search made. +If, however, your +search criteria may vary from one searchable context to another, then you can pass whatever data is +necessary to refine your search in the {@link android.app.SearchManager#APP_DATA} Bundle, which is +included in the {@link android.content.Intent#ACTION_SEARCH} Intent.

    + +

    To pass this kind of data to your searchable Activity, you need to override {@link +android.app.Activity#onSearchRequested()} method for the Activity in which search will be invoked. +For example:

    + +
    +@Override
    +public boolean onSearchRequested() {
    +     Bundle appData = new Bundle();
    +     appData.putBoolean(MySearchableActivity.JARGON, true);
    +     startSearch(null, false, appData, false);
    +     return true;
    + }
    +
    + +

    Returning "true" indicates that you have successfully handled this callback event. Then in your +searchable Activity, you can extract this data from the {@link +android.app.SearchManager#APP_DATA} {@link android.os.Bundle} to refine the search. For example:

    + +
    + Bundle appData = getIntent().getBundleExtra(SearchManager.APP_DATA);
    + if (appData != null) {
    +     boolean jargon = appData.getBoolean(MySearchableActivity.JARGON);
    + }
    +
    + +

    Note: You should never call the {@link +android.app.Activity#startSearch(String,boolean,Bundle,boolean) startSearch()} method from outside +the {@link android.app.Activity#onSearchRequested()} callback method. When you want to invoke the +search dialog, always call {@link android.app.Activity#onSearchRequested()} so that custom +implementations (such as the addition of {@code appData}, in the above example) can be accounted +for.

    + + +

    Adding Voice Search

    + +

    You can easily add voice search functionality to your search dialog by adding the {@code +android:voiceSearchMode} attribute to your searchable configuration. This will add a voice search +button in the search dialog that, when clicked, will launch a voice prompt. When the user +has finished speaking, the transcribed search query will be sent to your searchable +Activity.

    + +

    To enable voice search for your activity, add the {@code android:voiceSearchMode} +attribute to your searchable configuration. For example:

    + +
    +<?xml version="1.0" encoding="utf-8"?>
    +<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    +    android:label="@string/search_label"
    +    android:hint="@string/search_hint"
    +    android:voiceSearchMode="showVoiceSearchButton|launchRecognizer" >
    +</searchable>
    +
    + +

    The value {@code showVoiceSearchButton} is required to enable voice +search, while the second value, {@code launchRecognizer}, specifies that the voice search button +should launch a recognizer that returns the transcribed text to the searchable Activity. This is +how most applications should declare this attribute.

    + +

    There are some additional attributes you can provide to specify the voice search behavior, such +as the language to be expected and the maximum number of results to return. See the Searchable Configuration for more information about the +available attributes.

    + +

    Note: Carefully consider whether voice search is appropriate for +your application. All searches performed with the voice search button will be immediately sent to +your searchable Activity without a chance for the user to review the transcribed query. Be sure to +sufficiently test the voice recognition and ensure that it understands the types of queries that +the user will submit inside your application.

    diff --git a/docs/html/guide/topics/search/searchable-config.jd b/docs/html/guide/topics/search/searchable-config.jd new file mode 100644 index 0000000000000..f3a5bb1b6721c --- /dev/null +++ b/docs/html/guide/topics/search/searchable-config.jd @@ -0,0 +1,356 @@ +page.title=Searchable Configuration +parent.title=Search +parent.link=index.html +@jd:body + +
    + +
    + +

    In order to utilize the Android search framework and provide a custom search dialog, your +application must provide a search +configuration in the form of an XML resource. This document describes the search configuration XML +in terms of its syntax and usage. For a more complete discussion about how to implement search +features for your application, see the companion documents about Search.

    + +
    + +
    file location:
    +
    res/xml/filename.xml
    +The filename will be used as the resource ID.
    + +
    syntax:
    +
    +
    +<?xml version="1.0" encoding="utf-8"?>
    +<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    +    android:label="string resource"
    +    android:hint="string resource"
    +    android:searchMode=["queryRewriteFromData" | "queryRewriteFromText"]
    +    android:searchButtonText="string resource"
    +    android:inputType="{@link android.R.attr#inputType}"
    +    android:imeOptions="{@link android.R.attr#imeOptions}"
    +    android:searchSuggestAuthority="string"
    +    android:searchSuggestPath="string"
    +    android:searchSuggestSelection="string"
    +    android:searchSuggestIntentAction="string"
    +    android:searchSuggestIntentData="string"
    +    android:searchSuggestThreshold="int"
    +    android:includeInGlobalSearch=["true" | "false"]
    +    android:searchSettingsDescription="string resource"
    +    android:queryAfterZeroResults=["true" | "false"]
    +    android:voiceSearchMode=["showVoiceSearchButton" | "launchWebSearch" | "launchRecognizer"]
    +    android:voiceLanguageModel=["free-form" | "web_search"]
    +    android:voicePromptText="string resource"
    +    android:voiceLanguage="string"
    +    android:voiceMaxResults="int"
    +    >
    +    <actionkey
    +        android:keycode="{@link android.view.KeyEvent KEYCODE}"
    +        android:queryActionMsg="string"
    +        android:suggestActionMsg="string"
    +        android:suggestActionMsgColumn="string" >
    +</searchable>
    +
    +
    + +
    elements:
    +
    +
    +
    <searchable>
    +
    Defines all search configurations used with the search dialog. +

    attributes:

    +
    +
    android:label
    +
    String resource. Required. This is the name of your application. +It should normally be the same as the name applied to the {@code android:label} attribute of your {@code <activity>} or +{@code +<application>} manifest element. This is only visible to the user when you set +android:includeInGlobalSearch "true", in which case, this label is used to identify +your application as a searchable item in the system's search settings.
    +
    android:hint
    +
    String resource. The text to display in the search text field when no text has + been entered. This is recommended in order to provide a hint to the user about what +content is searchable. For consistency among other Android applications, you should format the +string for {@code android:hint} as "Search <content-or-product>". For example, +"Search songs and artists" or "Search YouTube".
    +
    android:searchMode
    +
    Keyword. Sets additional modes that control the search presentation. +Specifically, the available modes define how the query text in the search dialog's text box +should be rewritten when a suggestion is focused. The following mode values are accepted: + + + + + + + + + + +
    ValueDescription
    "queryRewriteFromData"If set, this causes the suggestion column + {@link android.app.SearchManager#SUGGEST_COLUMN_INTENT_DATA} to be considered as the +text for suggestion query + rewriting. This should only be used when the values in + {@link android.app.SearchManager#SUGGEST_COLUMN_INTENT_DATA} are suitable for user +inspection and editing - + typically, HTTP/HTTPS Uri's.
    "queryRewriteFromText"If set, this causes the suggestion + column {@link android.app.SearchManager#SUGGEST_COLUMN_TEXT_1} to be considered as the +text for suggestion query + rewriting. This should be used for suggestions in which no query + text is provided and the {@link android.app.SearchManager#SUGGEST_COLUMN_INTENT_DATA} +values are not suitable + for user inspection and editing.
    +

    For more information, see the discussion about rewriting the query text in Adding Custom Suggestions.

    +
    +
    android:searchButtonText
    +
    String resource. The text to display in the button that executes the search. By +default, the button shows a search icon (a magnifying glass), which is ideal for +internationalization.
    +
    android:inputType
    +
    Keyword. Defines the type of input method (soft-keyboard) to use with the search +dialog. For most searches, in which free form text is expected, this attribute is not needed and +the default input method should be used. See {@link android.R.attr#inputType} for a list of suitable +values for this attribute.
    +
    android:imeOptions
    +
    Keyword. Supplies additional options for the input method. + For most searches, in which free form text is expected, this attribute is not needed, + and will default to "actionSearch" (provides the "search" button instead of a carriage +return). See {@link android.R.attr#imeOptions} for a list of suitable values for this attribute. +
    +
    + +

    If you have defined a content provider to generate search suggestions, you need to + define additional attributes in order to configure communications with the Content + Provider. When providing search suggestions, you'll need some of the following + {@code <searchable>} attributes:


    + +
    +
    android:searchSuggestAuthority
    +
    String. Required to provide search suggestions. + This value must match the authority string provided in the {@code android:authorities} +attribute of the {@code <provider>} element.
    +
    android:searchSuggestPath
    +
    String. This path will be used as a portion of the suggestions + query {@link android.net.Uri}, after the prefix and authority, but before +the standard suggestions path. + This is only required if you have a single content provider issuing different types + of suggestions (e.g. for different data types) and you need + a way to disambiguate the suggestions queries when they are received.
    +
    android:searchSuggestSelection
    +
    String. This value will be passed into your + query function as the {@code selection} parameter. Typically this will be a WHERE clause +for your database, and should contain a single question mark, which is a place-holder for the +actual query string that has been typed by the user. However, you can also use any non-null +value to simply trigger the delivery of the query text via the {@code +selectionArgs} parameter (and then ignore the {@code selection} parameter).
    +
    android:searchSuggestIntentAction
    +
    String. The default Intent action to be used when a user + clicks on a search suggestion (such as {@code "android.intent.action.VIEW"}). + If not overridden by the selected suggestion (via the {@link +android.app.SearchManager#SUGGEST_COLUMN_INTENT_ACTION} column), this value will + be placed in the action field of the {@link android.content.Intent} when the + user clicks a suggestion.
    +
    android:searchSuggestIntentData
    +
    String. The default Intent data to be used when a user + clicks on a search suggestion. + If not overridden by the selected suggestion (via the {@link +android.app.SearchManager#SUGGEST_COLUMN_INTENT_DATA} column), this value will be + placed in the data field of the {@link android.content.Intent} when the user clicks + a suggestion.
    +
    android:searchSuggestThreshold
    +
    Integer. The minimum number of characters needed to + trigger a suggestion look-up. Only guarantees that a source will not be + queried for anything shorter than the threshold. The default value is 0.
    +
    + +

    For more information about the above attributes for search suggestions, see the guides for + Adding Recent Query Suggestions and + Adding Custom Suggestions.

    + +

    Beyond providing search suggestions while using your application's search dialog, you + can also configure your search suggestions to be made available to Quick Search Box, + which will allow users so receive search suggestions from your application content from outside + your application. When providing search suggestions to Quick Search Box, you'll need some of the + following {@code <searchable>} attributes:


    + +
    +
    android:includeInGlobalSearch
    +
    Boolean. Required to provide search suggestions in + Quick Search Box. "true" if you want your suggestions to be + included in the globally accessible Quick Search Box. Note that the user must + still enable your application as a searchable item in the system search settings in order + for your suggestions to appear in Quick Search Box.
    +
    android:searchSettingsDescription
    +
    String. Provides a brief description of the search suggestions that you provide +to Quick Search Box, which will be displayed in the searchable items entry for your application. +Your description should concisely describe the content that is searchable. For example, "Artists, +albums, and tracks" for a music application, or "Saved notes" for a notepad application.
    +
    android:queryAfterZeroResults
    +
    Boolean. "true" if you want your content provider to be invoked for + supersets of queries that have returned zero results for in the past. For example, if a + source returned zero results for "bo", it would be ignored for "bob". If "false", + this source will only be ignored for a single session; the next time the search dialog + is invoked, all sources will be queried. The default value is false.
    +
    + +

    To enable voice search for your search dialog, you'll need some of the + following {@code <searchable>} attributes:


    + +
    +
    android:voiceSearchMode
    +
    Keyword. Required to provide voice search capabilities. + Enables voice search for the search dialog, with a specific mode for voice search. + (Voice search may not be provided by the device, in which case these flags will + have no effect.) The following mode values are accepted: + + + + + + + + + + + + + + +
    ValueDescription
    "showVoiceSearchButton"Display a voice search button. This only + takes effect if voice search is available on the device. If set, then either + {@code "launchWebSearch"} or {@code "launchRecognizer"} must also be set + (separated by the pipe | character).
    "launchWebSearch"The voice search button will take the user directly + to a built-in voice web search activity. Most applications will not use this flag, as + it will take the user away from the Activity in which search was invoked.
    "launchRecognizer"The voice search button will take + the user directly to a built-in voice recording activity. This Activity + will prompt the user to speak, transcribe the spoken text, and forward the resulting + query text to the searchable Activity, just as if the user had typed it into the + search UI and clicked the search button.
    +
    +
    android:voiceLanguageModel
    +
    Keyword. The language model that + should be used by the voice recognition system. The following values are accepted: + + + + + + + + + + +
    ValueDescription
    "free_form"Use a language model based on free-form speech recognition. This is the +default.
    "web_search"Use a language model based on web search terms.
    +

    Also see + {@link android.speech.RecognizerIntent#EXTRA_LANGUAGE_MODEL} for more + information.

    +
    android:voicePromptText
    +
    String. An additional message to display in the voice input dialog.
    +
    android:voiceLanguage
    +
    String. The spoken language to be expected, expressed as the string value of +a constants in {@link java.util.Locale} (for example, {@code "de"} for German or {@code "fr"} for +French). This is only needed if it is different from the current value of {@link +java.util.Locale#getDefault() Locale.getDefault()}.
    +
    android:voiceMaxResults
    +
    Integer. Forces the maximum number of results to return, + including the "best" result which will always be provided as the {@link +android.content.Intent#ACTION_SEARCH} Intent's primary + query. Must be 1 or greater. Use {@link android.speech.RecognizerIntent#EXTRA_RESULTS} to +get the results from the Intent. + If not provided, the recognizer will choose how many results to return.
    +
    +
    + + +
    <actionkey>
    +
    Defines a shortcut key for a search action, in order to provide special behaviors at the touch +of a button, based on the current query or selected suggestion. ​For example, the Contacts +application enables the device call key for suggestions. So, when +the user focuses on a search suggestion using the directional controls and then presses the call +key, the application will immediately initiate a phone call to the suggested contact. See the +{@link android.app.SearchManager} for more information about action keys. +

    attributes:

    +
    +
    android:keycode
    +
    String. Required. A key code from {@link +android.view.KeyEvent} that represents the action key + you wish to respond to (for example {@code "KEYCODE_CALL"}). This will be added to the + {@link android.content.Intent#ACTION_SEARCH ACTION_SEARCH} Intent that is passed to your + searchable Activity. To examine the key code, use + {@link android.content.Intent#getIntExtra getIntExtra(SearchManager.ACTION_KEY)}. + In addition to the key code, you must also provide one or more of + the action specifier attributes below. Not all action keys +are actually supported using this mechanism, as many of them are used for typing, + navigation, or system functions. Note that although each of the action message elements are +optional, at least one must be present for the action key to have any effect.
    +
    android:queryActionMsg
    +
    String. An action message to be sent if the action key is pressed while the +user is simply entering query text. This will be added to the + {@link android.content.Intent#ACTION_SEARCH ACTION_SEARCH} Intent that is + passed to your searchable Activity. To examine the string, use + {@link android.content.Intent#getStringExtra + getStringExtra(SearchManager.ACTION_MSG)}.
    +
    android:suggestActionMsg
    +
    String. An action message to be sent if the action key is pressed while a + suggestion is being displayed and is currently selected. This will be added to the + Intent that is passed to your searchable Activity (using the action you've defined for + suggestions). To examine the string, + use {@link android.content.Intent#getStringExtra + getStringExtra(SearchManager.ACTION_MSG)}. Note that this should only be used if all your +suggestions support this action key. If not all suggestions can handle the same action key, then +you must instead use the following {@code android:suggestActionMsgColumn} attribute.
    +
    android:suggestActionMsgColumn
    +
    String. The name of the column in your content provider that defines the +action message for this action key, which is to be sent if the action key is pressed while a + suggestion is being displayed and is currently selected. This attribute lets you control the +action key on a suggestion-by-suggestion basis, because, instead of using the {@code +android:suggestActionMsg} attribute to define the action message for all suggestions, each entry in +your content provider provides its own action message. First, you must define a column in your +content provider for each suggestion to provide an action message, then provide the name of that +column in this attribute. The search manager will look at your suggestion cursor, + using the string provided here in order to select your action message column, and + then select the action message string from the cursor. That string will be added to the + Intent that is passed to your searchable Activity (using the action you've defined for + suggestions). To examine the string, use {@link +android.content.Intent#getStringExtra getStringExtra(SearchManager.ACTION_MSG)}. If the data +does not exist for the selected suggestion, the action key will be ignored.
    +
    +
    +
    +
    + + +
    example:
    +
    XML file saved at res/xml/searchable.xml: +
    +<?xml version="1.0" encoding="utf-8"?>
    +<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    +    android:label="@string/search_label"
    +    android:hint="@string/search_hint"
    +    android:searchSuggestAuthority="dictionary"
    +    android:searchSuggestIntentAction="android.intent.action.VIEW"
    +    android:includeInGlobalSearch="true"
    +    android:searchSettingsDescription="@string/settings_description" >
    +</searchable>
    +
    + +
    + + +
    + + + + diff --git a/docs/html/images/search/search-suggest-custom.png b/docs/html/images/search/search-suggest-custom.png new file mode 100644 index 0000000000000000000000000000000000000000..be14219d3b8f1e31c4e14ca57b98049688339b9c GIT binary patch literal 46670 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/html/shareables/search_icons.zip b/docs/html/shareables/search_icons.zip new file mode 100644 index 0000000000000000000000000000000000000000..bc984655592dd1e36b2904da10a226e007a1defa GIT binary patch literal 9753 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 AX#fBK literal 0 HcmV?d00001