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
17package com.example.android.apis.app;
18
19import com.example.android.apis.R;
20
21import android.app.Activity;
22import android.app.SearchManager;
23import android.content.Intent;
24import android.os.Bundle;
25import android.provider.SearchRecentSuggestions;
26import android.widget.TextView;
27
28public 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