1d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert/*
2d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert * Copyright (C) 2010 The Android Open Source Project
3d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert *
4d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License");
5d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert * you may not use this file except in compliance with the License.
6d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert * You may obtain a copy of the License at
7d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert *
8d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert *      http://www.apache.org/licenses/LICENSE-2.0
9d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert *
10d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert * Unless required by applicable law or agreed to in writing, software
11d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS,
12d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert * See the License for the specific language governing permissions and
14d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert * limitations under the License.
15d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert */
16d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringertpackage com.android.browser.search;
17d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert
18d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringertimport com.android.browser.R;
19d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert
20d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringertimport android.content.Context;
21d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringertimport android.content.res.Resources;
22d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringertimport android.text.TextUtils;
23d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringertimport android.util.Log;
24d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert
25d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringertimport java.util.ArrayList;
26d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringertimport java.util.List;
27d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert
28d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringertpublic class SearchEngines {
29d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert
30d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert    private static final String TAG = "SearchEngines";
31d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert
32d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert    public static SearchEngine getDefaultSearchEngine(Context context) {
33d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert        return DefaultSearchEngine.create(context);
34d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert    }
35d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert
36d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert    public static List<SearchEngineInfo> getSearchEngineInfos(Context context) {
37d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert        ArrayList<SearchEngineInfo> searchEngineInfos = new ArrayList<SearchEngineInfo>();
38d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert        Resources res = context.getResources();
39d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert        String[] searchEngines = res.getStringArray(R.array.search_engines);
40d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert        for (int i = 0; i < searchEngines.length; i++) {
41d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert            String name = searchEngines[i];
42d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert            SearchEngineInfo info = new SearchEngineInfo(context, name);
43d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert            searchEngineInfos.add(info);
44d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert        }
45d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert        return searchEngineInfos;
46d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert    }
47d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert
48d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert    public static SearchEngine get(Context context, String name) {
49d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert        // TODO: cache
50d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert        SearchEngine defaultSearchEngine = getDefaultSearchEngine(context);
51d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert        if (TextUtils.isEmpty(name)
52d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert                || (defaultSearchEngine != null && name.equals(defaultSearchEngine.getName()))) {
53d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert            return defaultSearchEngine;
54d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert        }
55d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert        SearchEngineInfo searchEngineInfo = getSearchEngineInfo(context, name);
56d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert        if (searchEngineInfo == null) return defaultSearchEngine;
57d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert        return new OpenSearchSearchEngine(context, searchEngineInfo);
58d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert    }
59d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert
60b77bdc4dddf867e49a0157ca56119b85e12fb440John Reck    public static SearchEngineInfo getSearchEngineInfo(Context context, String name) {
61d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert        try {
62d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert            return new SearchEngineInfo(context, name);
63d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert        } catch (IllegalArgumentException exception) {
64d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert            Log.e(TAG, "Cannot load search engine " + name, exception);
65d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert            return null;
66d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert        }
67d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert    }
68d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert
69d69f51ddd5b6c28c9d16725e65facaf830d650e1Bjorn Bringert}
70