Google Mobile

Gesture Search

Search by Gesturing

Click thumbnail to see larger image

Gesture Search in action

Do you find it hard to find a contact or locate an application from a list of hundreds of items on your phone? Or do you find it stressful to search for an item by typing in its title while on the go? Gesture Search lets you search your phone by drawing gestures on the touch screen. It allows you to quickly find a contact, a bookmark, an application, a music track or even a setting from hundreds or thousands of items, all in one place. It is fast and fun to use.

Note: Not all features are available on all phones. For more information, see the Help Center or the discussion group.

Supported phones

All Android phones running Android 1.6 or higher.

FAQ

How do I get started?

Just write on the touch screen the title of the item you are looking for, e.g., a person's name or the name of a song. You don't need to write the entire word and the search results are continuously updated as you add each letter or number. Once the target item is shown in the list, just click on the item to bring it up.

Can I delete a gesture or a query?

Yes. You can delete a gesture or wipe of the entire query by drawing a horizontal line in the bottom query display area: drawing from right to left deletes the last gesture of the query and drawing from left to right to wipe off the entire query.

Can I make a call directly from Gesture Search?

Yes. When you click on a contact item in the search result list, it brings up the detailed view of the contact. To directly make a call, click on the green phone icon on the left of the item. This will skip the detailed view and dial the displayed phone number.

Can I scroll the search result list?

Yes. You can just scroll the list as usual: sliding or flipping the list. Gesture Search automatically discerns if you are drawing a letter or scrolling the list.

Can I search with multiple words or prefixes?

Yes. You can add a space by drawing a rightward horizontal line on top the search result list. This appends a space in the search query. Notice that drawing a leftward horizontal line anywhere on the screen deletes the last gesture in the gesture query.

Does Gesture Search only recognize lower or upper-case letters?

Gesture Search recognizes both, and numbers (since version 1.1).

Can I select what types of contents I want to have in the search result list?

Gesture Search currently indexes contacts, phone settings, bookmarks, applications and music tracks. You can exclude certain types of contents in Gesture Search's Settings.

Do I have to write a letter or number in one stroke?

No. You can write a letter or number in more than one strokes. Gesture Search uses a timeout to delimit whether a stroke is part of the current or the next letter. Use the menu item Settings to set the Writing Speed property. You can specify Slow, Medium or Fast to indicate how long you want Gesture Search to wait for the next stroke of the same letter.

I can't find the item I am looking for, can you help?

For now, Gesture Search only indexes contacts, phone settings bookmarks, applications and music tracks in the English alphabet and numbers. We don't yet index other types of data in other languages. If this is not the case, try to refresh the index by the Refresh Index menu and then search again.

In Gesture Search 1.2, we added Double Flip, a feature that allows you to start Gesture Search anytime by flipping your phone away and then back. But due to the limitation of sensors that are available on the phone, Double Flip might not work well in certain orientations, or while you are walking or in a moving vehicle. You can turn the feature on or adjust its sensitivity in Menu->Settings. You can learn Double Flip by watching an animation in Menu->Help.

Is there accessibility support? How can I turn it on?

In Gesture Search 1.2, Gesture Search responds to the global accessibility setting that you specify. To turn the accessibility on or off, go to the home screen, bring up the menu, click on the Settings and then Accessibility. Once the accessibility is turned on, Gesture Search will vibrate when you add or remove a gesture. With the TalkBack service, it also automatically reads out the top item in the search result list. Note that you need to have the latest TalkBack service installed which you can download from the Android Market.

Will Gesture Search work on my iPhone?

At this time Gesture Search is only available for Android-powered phones with Donut (1.6) or later versions.

APIs

Gesture Search can now be easily integrated into an application by developers, for users to search application-specific data using Gesture Search. For example, a mobile ordering application for a restaurant might have a list of hundreds of items for a customer to choose from. It will be difficult for a user to locate a desired item in the list. For another example, a modern mobile application that is rich in functions (e.g., a web browser) may have tens of menu options or settings for a user select that are often organized in a hierarchical way, e.g., top-levels and sub menus. It can be difficult and time consuming for a user to discover and find an feature. With Gesture Search, a developer can organize the data (or options) in a single list so that a user can find an item by simply drawing gestures.

In this example, we will demonstrate how we can embed Gesture Search (1.4.0 or later) into an application that allows a user to find information about a specific country by drawing gestures on the touchscreen. To use Gesture Search in the application, we first need to create a content provider named CountryProvider, according to the format required by Android Search framework, which consists of 238 country names. Then in GestureSearchAPIDemo, the main activity of the application, we invoke Gesture Search when a user selects a menu item (Gesture Search can be invoked in other ways depending on specific applications.) To do so, we create an Intent with the action "com.google.android.apps.gesturesearch.SEARCH" and the Uri of the content provider. If the data is protected (see AndroidManifest.xml for instance), we also need to grant the read permission for the content Uri to Gesture Search. We then call startActivityForResult to invoke Gesture Search.

    public boolean onCreateOptionsMenu(Menu menu) {
      super.onCreateOptionsMenu(menu);
      menu.add(0, GESTURE_SEARCH_ID, 0, R.string.menu_gesture_search)
          .setShortcut('0', 'g').setIcon(android.R.drawable.ic_menu_search);
      return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
      switch (item.getItemId()) {
        case GESTURE_SEARCH_ID:
          try {
            Intent intent = new Intent();
            intent.setAction("com.google.android.apps.gesturesearch.SEARCH");
            intent.setData(SuggestionProvider.CONTENT_URI);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.putExtra(SHOW_MODE, SHOW_ALL);
            intent.putExtra(THEME, THEME_LIGHT);
            startActivityForResult(intent, GESTURE_SEARCH_ID);
          } catch (ActivityNotFoundException e) {
            Log.e("GestureSearchExample", "Gesture Search is not installed");
          }
          break;
      }
      return super.onOptionsItemSelected(item);
    }
  

In the above code snippet, we also specify that we want to show all of the country names when Gesture Search is brought up by intent.putExtra(SHOW_MODE, SHOW_ALL). The parameter name and its possible values are defined as:

    /**
      * Optionally, specify what should be shown when launching Gesture Search.
      * If this is not specified, SHOW_HISTORY will be used as a default value.
      */
    private static String SHOW_MODE = "show";
    /** Possible values for invoking mode */
    // Show the visited items
    private static final int SHOW_HISTORY = 0;
    // Show nothing (a blank screen)
    private static final int SHOW_NONE = 1;
    // Show all of date items
    private static final int SHOW_ALL = 2;

    /**
    * The theme of Gesture Search can be light or dark.
    * By default, Gesture Search will use a dark theme.
    */
    private static final String THEME = "theme";
    private static final int THEME_LIGHT = 0;
    private static final int THEME_DARK = 1;

    /** Keys for results returned by Gesture Search */
    private static final String SELECTED_ITEM_ID = "selected_item_id";
    private static final String SELECTED_ITEM_NAME = "selected_item_name";
  

As we can see, alternatively, we can show the country name that a user recently clicked on or nothing. Gesture Search is then shown up with a list of all the country names. A user can draw gestures directly on top of the list and a target item will pop up at the top of the list (see Gesture Search for more user-facing interaction details). When a user clicks on a country name, Gesture Search exits and returns the result to the calling application, and the following method will be invoked for processing the user selection result. As shown in this code snippet, we can read the Id and the name of the data item that has been selected.

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      if (resultCode == Activity.RESULT_OK) {
        switch (requestCode) {
          case GESTURE_SEARCH_ID:
            long selectedItemId = data.getLongExtra(SELECTED_ITEM_ID, -1);
            String selectedItemName = data.getStringExtra(SELECTED_ITEM_NAME);
            // Print out the Id and name of the item that is selected
            // by the user in Gesture Search
            Log.d("GestureSearchExample", selectedItemId + ": " + selectedItemName);
            break;
        }
      }
    }
  

Since the API relies on Gesture Search, you need to make sure users have already installed Gesture Search on their Android devices. If Gesture Search is not installed, you should catch the ActivityNotFoundException as shown in the above code snippet, and inform the user to install Gesture Search, e.g., using a MessageBox. Download the sample code at http://code.google.com/p/gesture-search-api-demo.

Version History

Version 1.4.0 (May 23, 2011)
Developers can invoke Gesture Search from their application for users to search application-specific data.
Responds to screen orientation change.
Bug fixes.
Version 1.3.0 (September 13, 2010)
Made phone settings searchable (need to turn it on via Menu/Settings).
Version 1.2.1 (August 17, 2010)
Bug fixes and improvements on battery usage.
Version 1.2.0 (August 11, 2010)
Added Double Flip, a motion gesture for starting Gesture Search anytime.
Improved usability for better accessibility support.
Improved the performance of background tasks such as indexing.
Version 1.1.0 (May 18, 2010)
Added support for indexing and recognizing numbers.
Made a leftward horizontal line anywhere on the screen a deletion gesture.
Various bug fixes.
Version 1.0.1 (March 16, 2010)
Made compatible for Android 1.6 (Donut).
Improved the performance of the search history management.
Version 1.0.0 (March 3, 2010)
Initial launch version