blob: 99592fb9109d9118c46b811909405f59c08d4e6a [file] [log] [blame]
Mathew Inwood29721c22011-06-29 17:55:24 +01001/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.browser;
17
18import android.text.TextUtils;
19import android.util.Log;
20import android.webkit.SearchBox;
21
22import java.util.Map;
23
24/**
25 * Class to manage the controlling of preloaded tab.
26 */
27public class PreloadedTabControl {
28 private static final boolean LOGD_ENABLED = true;//com.android.browser.Browser.LOGD_ENABLED;
29 private static final String LOGTAG = "PreloadedTabControl";
30
31 final Tab mTab;
32 private String mLastQuery;
33 private boolean mDestroyed;
34
35 public PreloadedTabControl(Tab t) {
36 mTab = t;
37 }
38
39 private void maybeSetQuery(String query, SearchBox sb) {
40 if (!TextUtils.equals(mLastQuery, query)) {
41 if (sb != null) {
42 if (LOGD_ENABLED) Log.d(LOGTAG, "Changing searchbox query to " + query);
43 sb.setVerbatim(true);
44 sb.setQuery(query);
45 sb.onchange();
46 mLastQuery = query;
47 } else {
48 if (LOGD_ENABLED) Log.d(LOGTAG, "Cannot set query: no searchbox interface");
49 }
50 }
51 }
52
53 public void setQuery(String query) {
54 maybeSetQuery(query, mTab.getWebView().getSearchBox());
55 }
56
57 public boolean searchBoxSubmit(final String query,
58 final String fallbackUrl, final Map<String, String> fallbackHeaders) {
59 final SearchBox sb = mTab.getWebView().getSearchBox();
60 if (sb == null) {
61 // no searchbox, cannot submit. Fallback to regular tab creation
62 if (LOGD_ENABLED) Log.d(LOGTAG, "No searchbox, cannot submit query");
63 return false;
64 }
65 sb.isSupported(new SearchBox.IsSupportedCallback() {
66 @Override
67 public void searchBoxIsSupported(boolean supported) {
68 if (LOGD_ENABLED) Log.d(LOGTAG, "SearchBox supported: " + supported);
69 if (mDestroyed) {
70 if (LOGD_ENABLED) Log.d(LOGTAG, "tab has been destroyed");
71 return;
72 }
73 if (supported) {
74 maybeSetQuery(query, sb);
75 if (LOGD_ENABLED) Log.d(LOGTAG, "Submitting query " + query);
76 sb.onsubmit();
77 } else {
78 if (LOGD_ENABLED) Log.d(LOGTAG, "SearchBox not supported; falling back");
79 loadUrl(fallbackUrl, fallbackHeaders);
80 }
81 mTab.getWebView().clearHistory();
82 }
83 });
84 return true;
85 }
86
87 public void loadUrlIfChanged(String url, Map<String, String> headers) {
88 if (!TextUtils.equals(url, mTab.getUrl())) {
89 loadUrl(url, headers);
90 }
91 }
92
93 public void loadUrl(String url, Map<String, String> headers) {
94 if (LOGD_ENABLED) Log.d(LOGTAG, "Preloading " + url);
95 mTab.loadUrl(url, headers);
96 }
97
98 public void destroy() {
99 mDestroyed = true;
100 mTab.destroy();
101 }
102
103 public Tab getTab() {
104 return mTab;
105 }
106
107}