| 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.
|
| + */
|
| + 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);
|
| +}
|
|
|