blob: 99e05875cc7705a12d29fe519d24141e03b61a92 [file] [log] [blame]
Michael Kolba2b2ba82010-08-04 17:54:03 -07001/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
Michael Kolb377ea312011-02-17 14:36:56 -08004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License. You may obtain a copy of
6 * the License at
Michael Kolba2b2ba82010-08-04 17:54:03 -07007 *
Michael Kolb377ea312011-02-17 14:36:56 -08008 * http://www.apache.org/licenses/LICENSE-2.0
Michael Kolba2b2ba82010-08-04 17:54:03 -07009 *
10 * Unless required by applicable law or agreed to in writing, software
Michael Kolb377ea312011-02-17 14:36:56 -080011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations under
14 * the License.
Michael Kolba2b2ba82010-08-04 17:54:03 -070015 */
16
17package com.android.browser;
18
19import android.content.Context;
John Reck8ee633f2011-08-09 16:00:35 -070020import android.graphics.Canvas;
Michael Kolba2b2ba82010-08-04 17:54:03 -070021import android.util.AttributeSet;
22import android.view.View;
Jonathan Dixone1d6dfc2012-12-17 13:39:17 -080023import android.webkit.WebChromeClient;
24import android.webkit.WebStorage;
25import android.webkit.WebStorageClassic;
Michael Kolba2b2ba82010-08-04 17:54:03 -070026import android.webkit.WebView;
Jonathan Dixon4d2fcab2012-02-24 00:13:06 +000027import android.webkit.WebViewClassic;
Jonathan Dixone1d6dfc2012-12-17 13:39:17 -080028import android.webkit.WebViewClient;
Michael Kolba2b2ba82010-08-04 17:54:03 -070029
30import java.util.Map;
31
32/**
Michael Kolb377ea312011-02-17 14:36:56 -080033 * Manage WebView scroll events
Michael Kolba2b2ba82010-08-04 17:54:03 -070034 */
Jonathan Dixon4d2fcab2012-02-24 00:13:06 +000035public class BrowserWebView extends WebView implements WebViewClassic.TitleBarDelegate {
Michael Kolba2b2ba82010-08-04 17:54:03 -070036
John Reck718a24d2011-08-12 11:08:30 -070037 public interface OnScrollChangedListener {
38 void onScrollChanged(int l, int t, int oldl, int oldt);
39 }
40
Romain Guy860662a2011-01-10 12:57:22 -080041 private boolean mBackgroundRemoved = false;
John Reck0f602f32011-07-07 15:38:43 -070042 private TitleBar mTitleBar;
John Reck718a24d2011-08-12 11:08:30 -070043 private OnScrollChangedListener mOnScrollChangedListener;
Jonathan Dixone1d6dfc2012-12-17 13:39:17 -080044 private WebChromeClient mWebChromeClient;
45 private WebViewClient mWebViewClient;
Michael Kolba2b2ba82010-08-04 17:54:03 -070046
47 /**
48 * @param context
49 * @param attrs
50 * @param defStyle
51 * @param javascriptInterfaces
52 */
John Reckb9a051b2011-03-18 11:55:48 -070053 public BrowserWebView(Context context, AttributeSet attrs, int defStyle,
Michael Kolba2b2ba82010-08-04 17:54:03 -070054 Map<String, Object> javascriptInterfaces, boolean privateBrowsing) {
55 super(context, attrs, defStyle, javascriptInterfaces, privateBrowsing);
56 }
57
58 /**
59 * @param context
60 * @param attrs
61 * @param defStyle
62 */
John Reckb9a051b2011-03-18 11:55:48 -070063 public BrowserWebView(
Michael Kolb377ea312011-02-17 14:36:56 -080064 Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) {
Michael Kolba2b2ba82010-08-04 17:54:03 -070065 super(context, attrs, defStyle, privateBrowsing);
66 }
67
68 /**
69 * @param context
70 * @param attrs
71 */
John Reckb9a051b2011-03-18 11:55:48 -070072 public BrowserWebView(Context context, AttributeSet attrs) {
Michael Kolba2b2ba82010-08-04 17:54:03 -070073 super(context, attrs);
74 }
75
76 /**
77 * @param context
78 */
John Reckb9a051b2011-03-18 11:55:48 -070079 public BrowserWebView(Context context) {
Michael Kolba2b2ba82010-08-04 17:54:03 -070080 super(context);
Michael Kolb2814a362011-05-19 15:49:41 -070081 }
82
Jonathan Dixone1d6dfc2012-12-17 13:39:17 -080083 public static boolean isClassic() {
84 // Using WebStorage for convenience of access in a static method.
85 return WebStorage.getInstance() instanceof WebStorageClassic;
86 }
87
88 @Override
89 public void setWebChromeClient(WebChromeClient client) {
90 mWebChromeClient = client;
91 super.setWebChromeClient(client);
92 }
93
94 public WebChromeClient getWebChromeClient() {
95 return mWebChromeClient;
96 }
97
98 @Override
99 public void setWebViewClient(WebViewClient client) {
100 mWebViewClient = client;
101 super.setWebViewClient(client);
102 }
103
104 public WebViewClient getWebViewClient() {
105 return mWebViewClient;
106 }
107
Michael Kolb4923c222012-04-02 16:18:36 -0700108 public void setTitleBar(TitleBar title) {
109 mTitleBar = title;
110 }
111
Jonathan Dixon4d2fcab2012-02-24 00:13:06 +0000112 // From TitleBarDelegate
Michael Kolb08a687a2011-04-22 16:13:02 -0700113 @Override
Jonathan Dixon4d2fcab2012-02-24 00:13:06 +0000114 public int getTitleHeight() {
Michael Kolb29ccf8a2011-02-23 16:13:24 -0800115 return (mTitleBar != null) ? mTitleBar.getEmbeddedHeight() : 0;
116 }
117
Jonathan Dixon4d2fcab2012-02-24 00:13:06 +0000118 // From TitleBarDelegate
Michael Kolba2b2ba82010-08-04 17:54:03 -0700119 @Override
Jonathan Dixon4d2fcab2012-02-24 00:13:06 +0000120 public void onSetEmbeddedTitleBar(final View title) {
Jonathan Dixone1d6dfc2012-12-17 13:39:17 -0800121 // TODO: Remove this method; it is never invoked.
Michael Kolba2b2ba82010-08-04 17:54:03 -0700122 }
123
Michael Kolb377ea312011-02-17 14:36:56 -0800124 public boolean hasTitleBar() {
125 return (mTitleBar != null);
126 }
127
Michael Kolb377ea312011-02-17 14:36:56 -0800128 @Override
John Reck718a24d2011-08-12 11:08:30 -0700129 protected void onDraw(Canvas c) {
Michael Kolbf2628922011-03-09 17:15:28 -0800130 super.onDraw(c);
131 if (!mBackgroundRemoved && getRootView().getBackground() != null) {
132 mBackgroundRemoved = true;
133 post(new Runnable() {
134 public void run() {
135 getRootView().setBackgroundDrawable(null);
136 }
137 });
Michael Kolb377ea312011-02-17 14:36:56 -0800138 }
139 }
140
John Reck8ee633f2011-08-09 16:00:35 -0700141 public void drawContent(Canvas c) {
142 onDraw(c);
143 }
144
John Reck718a24d2011-08-12 11:08:30 -0700145 @Override
146 protected void onScrollChanged(int l, int t, int oldl, int oldt) {
147 super.onScrollChanged(l, t, oldl, oldt);
Michael Kolb4923c222012-04-02 16:18:36 -0700148 if (mTitleBar != null) {
149 mTitleBar.onScrollChanged();
150 }
John Reck718a24d2011-08-12 11:08:30 -0700151 if (mOnScrollChangedListener != null) {
152 mOnScrollChangedListener.onScrollChanged(l, t, oldl, oldt);
153 }
154 }
155
156 public void setOnScrollChangedListener(OnScrollChangedListener listener) {
157 mOnScrollChangedListener = listener;
158 }
159
John Reckbd546312011-09-19 11:47:52 -0700160 @Override
161 public boolean showContextMenuForChild(View originalView) {
162 return false;
163 }
164
John Reckd1d87312012-03-08 13:25:00 -0800165 @Override
166 public void destroy() {
167 BrowserSettings.getInstance().stopManagingSettings(getSettings());
168 super.destroy();
169 }
170
Michael Kolba2b2ba82010-08-04 17:54:03 -0700171}