Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/search_engines/TemplateUrlService.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/search_engines/TemplateUrlService.java b/chrome/android/java/src/org/chromium/chrome/browser/search_engines/TemplateUrlService.java |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..9cea47d5aa03d2077dccd7bea8ea24e9344aa557 |
| --- /dev/null |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/search_engines/TemplateUrlService.java |
| @@ -0,0 +1,124 @@ |
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +package org.chromium.chrome.browser.search_engines; |
| + |
| +import org.chromium.base.CalledByNative; |
| +import org.chromium.base.ThreadUtils; |
| + |
| +import java.util.ArrayList; |
| +import java.util.HashMap; |
| +import java.util.List; |
| + |
| +/** |
| + * Android wrapper of the TemplateUrlService which provides access from the Java |
| + * layer. |
| + * |
| + * Only usable from the UI thread as it's primary purpose is for supporting the Android |
| + * preferences UI. |
| + * |
| + * See chrome/browser/search_engines/template_url_service.h for more details. |
| + */ |
| +public class TemplateUrlService { |
| + |
| + // Keys for localized search engines. |
| + // MUST match static strings defined in template_url_service_android.cc |
| + public static final String SEARCH_ENGINE_ID = "searchEngineId"; |
| + public static final String SEARCH_ENGINE_URL = "searchEngineUrl"; |
| + public static final String SEARCH_ENGINE_KEYWORD = "searchEngineKeyword"; |
| + public static final String SEARCH_ENGINE_SHORT_NAME = "searchEngineShortName"; |
| + |
| + /** |
| + * This listener will be notified when template url service is done laoding. |
|
bulach
2013/02/25 12:51:19
nit: s/lao/loading/
Yaron
2013/02/25 18:45:10
Done.
|
| + */ |
| + public interface LoadListener { |
| + public abstract void onTemplateUrlServiceLoaded(); |
| + } |
| + |
| + private static TemplateUrlService sService; |
| + |
| + public static TemplateUrlService getInstance() { |
| + ThreadUtils.assertOnUiThread(); |
| + if (sService == null) { |
| + sService = new TemplateUrlService(); |
| + } |
| + return sService; |
| + } |
| + |
| + private final int mNativeTemplateUrlServiceAndroid; |
| + private final List<LoadListener> mLoadListeners = new ArrayList<LoadListener>(); |
| + |
| + private TemplateUrlService() { |
| + // Note that this technically leaks the native object, however, TemlateUrlService |
| + // is a singleton that lives forever and there's no clean shutdown of Chrome on Android |
| + mNativeTemplateUrlServiceAndroid = nativeInit(); |
| + } |
| + |
| + public boolean isLoaded() { |
| + ThreadUtils.assertOnUiThread(); |
| + return nativeIsLoaded(mNativeTemplateUrlServiceAndroid); |
| + } |
| + |
| + public void load() { |
| + ThreadUtils.assertOnUiThread(); |
| + nativeLoad(mNativeTemplateUrlServiceAndroid); |
| + } |
| + |
| + /** |
| + * Get the hash map of the localized search engines. |
| + */ |
| + public HashMap<String,String>[] getLocalizedSearchEngines() { |
| + ThreadUtils.assertOnUiThread(); |
| + return nativeGetLocalizedSearchEngines(mNativeTemplateUrlServiceAndroid); |
| + } |
| + |
| + /** |
| + * Called from native when template URL service is done loading. |
| + */ |
| + @CalledByNative |
| + private void templateUrlServiceLoaded() { |
| + ThreadUtils.assertOnUiThread(); |
| + for (LoadListener listener : mLoadListeners) { |
| + listener.onTemplateUrlServiceLoaded(); |
| + } |
| + } |
| + |
| + public int getSearchEngine() { |
| + ThreadUtils.assertOnUiThread(); |
| + return nativeGetSearchEngine(mNativeTemplateUrlServiceAndroid); |
| + } |
| + |
| + public void setSearchEngine(int selectedIndex) { |
| + ThreadUtils.assertOnUiThread(); |
| + nativeSetSearchEngine(mNativeTemplateUrlServiceAndroid, selectedIndex); |
| + } |
| + |
| + /** |
| + * Registers a listener for the TEMPLATE_URL_SERVICE_LOADED notification. |
| + */ |
| + public void registerLoadListener(LoadListener listener) { |
| + ThreadUtils.assertOnUiThread(); |
| + assert !mLoadListeners.contains(listener); |
| + mLoadListeners.add(listener); |
| + } |
| + |
| + /** |
| + * Unregisters a listener for the TEMPLATE_URL_SERVICE_LOADED notification. |
| + */ |
| + public void unregisterLoadListener(LoadListener listener) { |
| + ThreadUtils.assertOnUiThread(); |
| + assert (mLoadListeners.size() > 0); |
| + assert (mLoadListeners.contains(listener)); |
| + mLoadListeners.remove(listener); |
| + } |
| + |
| + private native int nativeInit(); |
| + private native void nativeLoad(int nativeTemplateUrlServiceAndroid); |
| + private native boolean nativeIsLoaded(int nativeTemplateUrlServiceAndroid); |
| + private native HashMap<String,String>[] nativeGetLocalizedSearchEngines( |
| + int nativeTemplateUrlServiceAndroid); |
| + private native void nativeSetSearchEngine(int nativeTemplateUrlServiceAndroid, |
| + int selectedIndex); |
| + private native int nativeGetSearchEngine(int nativeTemplateUrlServiceAndroid); |
| +} |