| 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..e52d0c14339343535be272bfca07c4750b4163c6
|
| --- /dev/null
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/search_engines/TemplateUrlService.java
|
| @@ -0,0 +1,155 @@
|
| +// 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.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 {
|
| +
|
| + /**
|
| + * This listener will be notified when template url service is done loading.
|
| + */
|
| + public interface LoadListener {
|
| + public abstract void onTemplateUrlServiceLoaded();
|
| + }
|
| +
|
| + public static class TemplateUrl {
|
| + private final int mIndex;
|
| + private final String mShortName;
|
| + private final String mKeyword;
|
| +
|
| + @CalledByNative("TemplateUrl")
|
| + public static TemplateUrl create(int id, String shortName, String keyword) {
|
| + return new TemplateUrl(id, shortName, keyword);
|
| + }
|
| +
|
| + public TemplateUrl(int index, String shortName, String keyword) {
|
| + mIndex = index;
|
| + mShortName = shortName;
|
| + mKeyword = keyword;
|
| + }
|
| +
|
| + public int getIndex() {
|
| + return mIndex;
|
| + }
|
| +
|
| + public String getShortName() {
|
| + return mShortName;
|
| + }
|
| +
|
| + public String getKeyword() {
|
| + return mKeyword;
|
| + }
|
| + }
|
| +
|
| + 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 collection of localized search engines.
|
| + */
|
| + public List<TemplateUrl> getLocalizedSearchEngines() {
|
| + ThreadUtils.assertOnUiThread();
|
| + int templateUrlCount = nativeGetTemplateUrlCount(mNativeTemplateUrlServiceAndroid);
|
| + List<TemplateUrl> templateUrls = new ArrayList<TemplateUrl>(templateUrlCount);
|
| + for (int i = 0; i < templateUrlCount; i++) {
|
| + TemplateUrl templateUrl = nativeGetPrepopulatedTemplateUrlAt(
|
| + mNativeTemplateUrlServiceAndroid, i);
|
| + if (templateUrl != null) {
|
| + templateUrls.add(templateUrl);
|
| + }
|
| + }
|
| + return templateUrls;
|
| + }
|
| +
|
| + /**
|
| + * 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 nativeGetDefaultSearchProvider(mNativeTemplateUrlServiceAndroid);
|
| + }
|
| +
|
| + public void setSearchEngine(int selectedIndex) {
|
| + ThreadUtils.assertOnUiThread();
|
| + nativeSetDefaultSearchProvider(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 int nativeGetTemplateUrlCount(int nativeTemplateUrlServiceAndroid);
|
| + private native TemplateUrl nativeGetPrepopulatedTemplateUrlAt(
|
| + int nativeTemplateUrlServiceAndroid, int i);
|
| + private native void nativeSetDefaultSearchProvider(int nativeTemplateUrlServiceAndroid,
|
| + int selectedIndex);
|
| + private native int nativeGetDefaultSearchProvider(int nativeTemplateUrlServiceAndroid);
|
| +}
|
|
|