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