FileDocCategorySizeDatePackage
SearchInvoke.javaAPI DocAndroid 1.5 API9436Wed May 06 22:41:08 BST 2009com.example.android.apis.app

SearchInvoke

public class SearchInvoke extends android.app.Activity

Fields Summary
android.widget.Button
mStartSearch
android.widget.Spinner
mMenuMode
android.widget.EditText
mQueryPrefill
android.widget.EditText
mQueryAppData
static final int
MENUMODE_SEARCH_KEY
static final int
MENUMODE_MENU_ITEM
static final int
MENUMODE_TYPE_TO_SEARCH
static final int
MENUMODE_DISABLED
Constructors Summary
Methods Summary
private voidclearSearchHistory()
Any application that implements search suggestions based on previous actions (such as recent queries, page/items viewed, etc.) should provide a way for the user to clear the history. This gives the user a measure of privacy, if they do not wish for their recent searches to be replayed by other users of the device (via suggestions). This example shows how to clear the search history for apps that use android.provider.SearchRecentSuggestions. If you have developed a custom suggestions provider, you'll need to provide a similar API for clearing history. In this sample app we call this method from a "Clear History" menu item. You could also implement the UI in your preferences, or any other logical place in your UI.

        SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this, 
                SearchSuggestionSampleProvider.AUTHORITY, SearchSuggestionSampleProvider.MODE);
        suggestions.clearHistory();
    
public voidonCreate(android.os.Bundle savedInstanceState)
Called with the activity is first created. We aren't doing anything special in this implementation, other than the usual activity setup code.

    
                                    
    
        
        super.onCreate(savedInstanceState);
        
        // Inflate our UI from its XML layout description.
        setContentView(R.layout.search_invoke);
        
        // Get display items for later interaction
        mStartSearch = (Button) findViewById(R.id.btn_start_search);
        mMenuMode = (Spinner) findViewById(R.id.spinner_menu_mode);
        mQueryPrefill = (EditText) findViewById(R.id.txt_query_prefill);
        mQueryAppData = (EditText) findViewById(R.id.txt_query_appdata);
        
        // Populate items
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                            this, R.array.search_menuModes, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        mMenuMode.setAdapter(adapter);
        
        // Create listener for the menu mode dropdown.  We use this to demonstrate control
        // of the default keys handler in every Activity.  More typically, you will simply set
        // the default key mode in your activity's onCreate() handler.
        mMenuMode.setOnItemSelectedListener(
            new OnItemSelectedListener() {
                public void onItemSelected(
                        AdapterView<?> parent, View view, int position, long id) {
                    if (position == MENUMODE_TYPE_TO_SEARCH) {
                        setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);
                    } else {
                        setDefaultKeyMode(DEFAULT_KEYS_DISABLE);
                    }
                }

                public void onNothingSelected(AdapterView<?> parent) {
                    setDefaultKeyMode(DEFAULT_KEYS_DISABLE);
                }
            });
        
        // Attach actions to buttons
        mStartSearch.setOnClickListener(
            new OnClickListener() {
                public void onClick(View v) {
                    onSearchRequested();
                }
            });
    
public booleanonOptionsItemSelected(android.view.MenuItem item)
Handle the menu item selections

        switch (item.getItemId()) {
        case 0:
            switch (mMenuMode.getSelectedItemPosition()) {
            case MENUMODE_SEARCH_KEY:
                new AlertDialog.Builder(this)
                    .setMessage("To invoke search, dismiss this dialog and press the search key" +
                                " (F5 on the simulator).")
                    .setPositiveButton("OK", null)
                    .show();
                break;
                
            case MENUMODE_MENU_ITEM:
                onSearchRequested();
                break;
                
            case MENUMODE_TYPE_TO_SEARCH:
                new AlertDialog.Builder(this)
                    .setMessage("To invoke search, dismiss this dialog and start typing.")
                    .setPositiveButton("OK", null)
                    .show();
                break;
                
            case MENUMODE_DISABLED:
                new AlertDialog.Builder(this)
                    .setMessage("You have disabled search.")
                    .setPositiveButton("OK", null)
                    .show();
                break;
            }
            break;
        case 1:
            clearSearchHistory();
            break;
        }
    
         return super.onOptionsItemSelected(item);
    
public booleanonPrepareOptionsMenu(android.view.Menu menu)
Called when your activity's options menu needs to be updated.

        super.onPrepareOptionsMenu(menu);
        MenuItem item;
        
            // first, get rid of our menus (if any)
        menu.removeItem(0);
        menu.removeItem(1);
        
            // next, add back item(s) based on current menu mode
        switch (mMenuMode.getSelectedItemPosition())
        {
        case MENUMODE_SEARCH_KEY:
            item = menu.add( 0, 0, 0, "(Search Key)");
            break;
            
        case MENUMODE_MENU_ITEM:
            item = menu.add( 0, 0, 0, "Search");
            item.setAlphabeticShortcut(SearchManager.MENU_KEY);
            break;
            
        case MENUMODE_TYPE_TO_SEARCH:
            item = menu.add( 0, 0, 0, "(Type-To-Search)");
            break;
            
        case MENUMODE_DISABLED:
            item = menu.add( 0, 0, 0, "(Disabled)");
            break;
        }
        
        item = menu.add(0, 1, 0, "Clear History");
        return true;
    
public booleanonSearchRequested()
This hook is called when the user signals the desire to start a search. By overriding this hook we can insert local or context-specific data.

return
Returns true if search launched, false if activity blocks it

        // If your application absolutely must disable search, do it here.
        if (mMenuMode.getSelectedItemPosition() == MENUMODE_DISABLED) {
            return false;
        }
        
        // It's possible to prefill the query string before launching the search
        // UI.  For this demo, we simply copy it from the user input field.
        // For most applications, you can simply pass null to startSearch() to
        // open the UI with an empty query string.
        final String queryPrefill = mQueryPrefill.getText().toString();
        
        // Next, set up a bundle to send context-specific search data (if any)
        // The bundle can contain any number of elements, using any number of keys;
        // For this Api Demo we copy a string from the user input field, and store
        // it in the bundle as a string with the key "demo_key".
        // For most applications, you can simply pass null to startSearch().
        Bundle appDataBundle = null;
        final String queryAppDataString = mQueryAppData.getText().toString();
        if (queryAppDataString != null) {
            appDataBundle = new Bundle();
            appDataBundle.putString("demo_key", queryAppDataString);
        }
        
        // Now call the Activity member function that invokes the Search Manager UI.
        startSearch(queryPrefill, false, appDataBundle, false); 
        
        // Returning true indicates that we did launch the search, instead of blocking it.
        return true;