1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.example.android.apis.app; 18 19 import com.example.android.apis.R; 20 21 import android.app.Activity; 22 import android.app.SearchManager; 23 import android.content.Intent; 24 import android.os.Bundle; 25 import android.provider.SearchRecentSuggestions; 26 import android.widget.TextView; 27 28 public class SearchQueryResults extends Activity 29 { 30 // UI elements 31 TextView mQueryText; 32 TextView mAppDataText; 33 TextView mDeliveredByText; 34 35 /** Called with the activity is first created. 36 * 37 * After the typical activity setup code, we check to see if we were launched 38 * with the ACTION_SEARCH intent, and if so, we handle it. 39 */ 40 @Override 41 public void onCreate(Bundle savedInstanceState) { 42 super.onCreate(savedInstanceState); 43 44 // Inflate our UI from its XML layout description. 45 setContentView(R.layout.search_query_results); 46 47 // Get active display items for later updates 48 mQueryText = (TextView) findViewById(R.id.txt_query); 49 mAppDataText = (TextView) findViewById(R.id.txt_appdata); 50 mDeliveredByText = (TextView) findViewById(R.id.txt_deliveredby); 51 52 // get and process search query here 53 final Intent queryIntent = getIntent(); 54 final String queryAction = queryIntent.getAction(); 55 if (Intent.ACTION_SEARCH.equals(queryAction)) { 56 doSearchQuery(queryIntent, "onCreate()"); 57 } 58 else { 59 mDeliveredByText.setText("onCreate(), but no ACTION_SEARCH intent"); 60 } 61 } 62 63 /** 64 * Called when new intent is delivered. 65 * 66 * This is where we check the incoming intent for a query string. 67 * 68 * @param newIntent The intent used to restart this activity 69 */ 70 @Override 71 public void onNewIntent(final Intent newIntent) { 72 super.onNewIntent(newIntent); 73 74 // get and process search query here 75 final Intent queryIntent = getIntent(); 76 final String queryAction = queryIntent.getAction(); 77 if (Intent.ACTION_SEARCH.equals(queryAction)) { 78 doSearchQuery(queryIntent, "onNewIntent()"); 79 } 80 else { 81 mDeliveredByText.setText("onNewIntent(), but no ACTION_SEARCH intent"); 82 } 83 } 84 85 /** 86 * Generic search handler. 87 * 88 * In a "real" application, you would use the query string to select results from 89 * your data source, and present a list of those results to the user. 90 */ 91 private void doSearchQuery(final Intent queryIntent, final String entryPoint) { 92 93 // The search query is provided as an "extra" string in the query intent 94 final String queryString = queryIntent.getStringExtra(SearchManager.QUERY); 95 mQueryText.setText(queryString); 96 97 // Record the query string in the recent queries suggestions provider. 98 SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this, 99 SearchSuggestionSampleProvider.AUTHORITY, SearchSuggestionSampleProvider.MODE); 100 suggestions.saveRecentQuery(queryString, null); 101 102 // If your application provides context data for its searches, 103 // you will receive it as an "extra" bundle in the query intent. 104 // The bundle can contain any number of elements, using any number of keys; 105 // For this Api Demo we're just using a single string, stored using "demo key". 106 final Bundle appData = queryIntent.getBundleExtra(SearchManager.APP_DATA); 107 if (appData == null) { 108 mAppDataText.setText("<no app data bundle>"); 109 } 110 if (appData != null) { 111 String testStr = appData.getString("demo_key"); 112 mAppDataText.setText((testStr == null) ? "<no app data>" : testStr); 113 } 114 115 // Report the method by which we were called. 116 mDeliveredByText.setText(entryPoint); 117 } 118 } 119