| /* |
| * Copyright (C) 2008 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.example.android.apis.app; |
| |
| import com.example.android.apis.R; |
| |
| import android.app.Activity; |
| import android.app.AlertDialog; |
| import android.app.SearchManager; |
| import android.os.Bundle; |
| import android.provider.SearchRecentSuggestions; |
| import android.view.Menu; |
| import android.view.MenuItem; |
| import android.view.View; |
| import android.view.View.OnClickListener; |
| import android.widget.AdapterView; |
| import android.widget.ArrayAdapter; |
| import android.widget.Button; |
| import android.widget.EditText; |
| import android.widget.Spinner; |
| import android.widget.AdapterView.OnItemSelectedListener; |
| |
| public class SearchInvoke extends Activity |
| { |
| // UI elements |
| Button mStartSearch; |
| Spinner mMenuMode; |
| EditText mQueryPrefill; |
| EditText mQueryAppData; |
| |
| // Menu mode spinner choices |
| // This list must match the list found in samples/ApiDemos/res/values/arrays.xml |
| final static int MENUMODE_SEARCH_KEY = 0; |
| final static int MENUMODE_MENU_ITEM = 1; |
| final static int MENUMODE_TYPE_TO_SEARCH = 2; |
| final static int MENUMODE_DISABLED = 3; |
| |
| /** |
| * Called with the activity is first created. |
| * |
| * We aren't doing anything special in this implementation, other than |
| * the usual activity setup code. |
| */ |
| @Override |
| public void onCreate(Bundle savedInstanceState) { |
| 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(); |
| } |
| }); |
| } |
| |
| /** |
| * Called when your activity's options menu needs to be updated. |
| */ |
| @Override |
| public boolean onPrepareOptionsMenu(Menu menu) { |
| 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; |
| } |
| |
| /** Handle the menu item selections */ |
| @Override |
| public boolean onOptionsItemSelected(MenuItem item) { |
| 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); |
| } |
| |
| /** |
| * 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 |
| */ |
| @Override |
| public boolean onSearchRequested() { |
| // 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; |
| } |
| |
| /** |
| * 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. |
| */ |
| private void clearSearchHistory() { |
| SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this, |
| SearchSuggestionSampleProvider.AUTHORITY, SearchSuggestionSampleProvider.MODE); |
| suggestions.clearHistory(); |
| } |
| |
| } |