1574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert/* 2574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert * Copyright (C) 2010 The Android Open Source Project 3574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert * 4574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 5574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert * you may not use this file except in compliance with the License. 6574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert * You may obtain a copy of the License at 7574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert * 8574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 9574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert * 10574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 11574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 12574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert * See the License for the specific language governing permissions and 14574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert * limitations under the License. 15574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert */ 16574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert 17574cc4c7b12a766644353800e749719085badcf6Bjorn Bringertpackage com.android.quicksearchbox; 18574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert 19574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert 202353e9c002c45c0adc8a979a49ff317cae5838b8Bjorn Bringertimport com.android.quicksearchbox.util.Util; 212353e9c002c45c0adc8a979a49ff317cae5838b8Bjorn Bringert 223f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringertimport android.content.ComponentName; 23574cc4c7b12a766644353800e749719085badcf6Bjorn Bringertimport android.content.Context; 243f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringertimport android.content.Intent; 253f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringertimport android.content.pm.ActivityInfo; 26574cc4c7b12a766644353800e749719085badcf6Bjorn Bringertimport android.graphics.drawable.Drawable; 27574cc4c7b12a766644353800e749719085badcf6Bjorn Bringertimport android.net.Uri; 283f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringertimport android.os.Bundle; 293f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringertimport android.text.TextUtils; 303f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringertimport android.util.Log; 31574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert 32574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert/** 3372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * The apps search source. 34574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert */ 3572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertpublic class AppsCorpus extends SingleSourceCorpus { 36574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert 373f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert private static final String TAG = "QSB.AppsCorpus"; 383f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert 39574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert private static final String APPS_CORPUS_NAME = "apps"; 40574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert 4196c7058210699c82445169048b7c0fdfb16f59eeBjorn Bringert public AppsCorpus(Context context, Config config, Source appsSource) { 4296c7058210699c82445169048b7c0fdfb16f59eeBjorn Bringert super(context, config, appsSource); 43574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert } 44574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert 4572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert @Override 46574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert public CharSequence getLabel() { 47574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert return getContext().getText(R.string.corpus_label_apps); 48574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert } 49574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert 5072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert @Override 51574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert public CharSequence getHint() { 52574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert return getContext().getText(R.string.corpus_hint_apps); 53574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert } 54574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert 5572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert @Override 56574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert public Drawable getCorpusIcon() { 57e46ac8349b012ec2c649d4e20bc835fec9ec681fBjorn Bringert return getContext().getResources().getDrawable(R.drawable.corpus_icon_apps); 58574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert } 59574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert 6072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert @Override 61574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert public Uri getCorpusIconUri() { 62e46ac8349b012ec2c649d4e20bc835fec9ec681fBjorn Bringert return Util.getResourceUri(getContext(), R.drawable.corpus_icon_apps); 63574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert } 64574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert 6572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert @Override 66574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert public String getName() { 67574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert return APPS_CORPUS_NAME; 68574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert } 69574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert 7072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert @Override 71574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert public CharSequence getSettingsDescription() { 72574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert return getContext().getText(R.string.corpus_description_apps); 73574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert } 74574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert 753f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert @Override 763f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert public Intent createSearchIntent(String query, Bundle appData) { 773f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert Intent appSearchIntent = createAppSearchIntent(query, appData); 783f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert if (appSearchIntent != null) { 793f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert return appSearchIntent; 803f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert } else { 813f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert // Fall back to sending the intent to ApplicationsProvider 823f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert return super.createSearchIntent(query, appData); 833f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert } 843f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert } 853f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert 863f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert /** 873f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert * Creates an intent that starts the search activity specified in 883f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert * R.string.apps_search_activity. 893f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert * 903f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert * @return An intent, or {@code null} if the search activity is not set or can't be found. 913f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert */ 923f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert private Intent createAppSearchIntent(String query, Bundle appData) { 933f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert ComponentName name = getComponentName(getContext(), R.string.apps_search_activity); 943f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert if (name == null) return null; 9549fd8e0994577badc6194c2c3b5f771f2b793fe4Bjorn Bringert Intent intent = AbstractSource.createSourceSearchIntent(name, query, appData); 963f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert if (intent == null) return null; 973f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert ActivityInfo ai = intent.resolveActivityInfo(getContext().getPackageManager(), 0); 983f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert if (ai != null) { 993f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert return intent; 1003f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert } else { 1011e53e72fbfc32995a97bbd25ae44bfea7b8781deMathew Inwood Log.w(TAG, "Can't find app search activity " + name); 1023f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert return null; 1033f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert } 1043f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert } 1053f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert 1063f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert private static ComponentName getComponentName(Context context, int res) { 1073f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert String nameStr = context.getString(res); 1083f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert if (TextUtils.isEmpty(nameStr)) { 1093f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert return null; 1103f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert } else { 1113f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert return ComponentName.unflattenFromString(nameStr); 1123f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert } 1133f00b91235290a95a8ff9394a3612935d602ef20Bjorn Bringert } 114574cc4c7b12a766644353800e749719085badcf6Bjorn Bringert} 115