Add SearchBox support to preloader.
Depends on change: I0119243ed0e19e237c1f51de887af5c954f96693
Change-Id: I2a2d3ff3c9d0d79f34af4c8daee828fb4efd7519
diff --git a/src/com/android/browser/PreloadedTabControl.java b/src/com/android/browser/PreloadedTabControl.java
new file mode 100644
index 0000000..99592fb
--- /dev/null
+++ b/src/com/android/browser/PreloadedTabControl.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.browser;
+
+import android.text.TextUtils;
+import android.util.Log;
+import android.webkit.SearchBox;
+
+import java.util.Map;
+
+/**
+ * Class to manage the controlling of preloaded tab.
+ */
+public class PreloadedTabControl {
+ private static final boolean LOGD_ENABLED = true;//com.android.browser.Browser.LOGD_ENABLED;
+ private static final String LOGTAG = "PreloadedTabControl";
+
+ final Tab mTab;
+ private String mLastQuery;
+ private boolean mDestroyed;
+
+ public PreloadedTabControl(Tab t) {
+ mTab = t;
+ }
+
+ private void maybeSetQuery(String query, SearchBox sb) {
+ if (!TextUtils.equals(mLastQuery, query)) {
+ if (sb != null) {
+ if (LOGD_ENABLED) Log.d(LOGTAG, "Changing searchbox query to " + query);
+ sb.setVerbatim(true);
+ sb.setQuery(query);
+ sb.onchange();
+ mLastQuery = query;
+ } else {
+ if (LOGD_ENABLED) Log.d(LOGTAG, "Cannot set query: no searchbox interface");
+ }
+ }
+ }
+
+ public void setQuery(String query) {
+ maybeSetQuery(query, mTab.getWebView().getSearchBox());
+ }
+
+ public boolean searchBoxSubmit(final String query,
+ final String fallbackUrl, final Map<String, String> fallbackHeaders) {
+ final SearchBox sb = mTab.getWebView().getSearchBox();
+ if (sb == null) {
+ // no searchbox, cannot submit. Fallback to regular tab creation
+ if (LOGD_ENABLED) Log.d(LOGTAG, "No searchbox, cannot submit query");
+ return false;
+ }
+ sb.isSupported(new SearchBox.IsSupportedCallback() {
+ @Override
+ public void searchBoxIsSupported(boolean supported) {
+ if (LOGD_ENABLED) Log.d(LOGTAG, "SearchBox supported: " + supported);
+ if (mDestroyed) {
+ if (LOGD_ENABLED) Log.d(LOGTAG, "tab has been destroyed");
+ return;
+ }
+ if (supported) {
+ maybeSetQuery(query, sb);
+ if (LOGD_ENABLED) Log.d(LOGTAG, "Submitting query " + query);
+ sb.onsubmit();
+ } else {
+ if (LOGD_ENABLED) Log.d(LOGTAG, "SearchBox not supported; falling back");
+ loadUrl(fallbackUrl, fallbackHeaders);
+ }
+ mTab.getWebView().clearHistory();
+ }
+ });
+ return true;
+ }
+
+ public void loadUrlIfChanged(String url, Map<String, String> headers) {
+ if (!TextUtils.equals(url, mTab.getUrl())) {
+ loadUrl(url, headers);
+ }
+ }
+
+ public void loadUrl(String url, Map<String, String> headers) {
+ if (LOGD_ENABLED) Log.d(LOGTAG, "Preloading " + url);
+ mTab.loadUrl(url, headers);
+ }
+
+ public void destroy() {
+ mDestroyed = true;
+ mTab.destroy();
+ }
+
+ public Tab getTab() {
+ return mTab;
+ }
+
+}