• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * 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
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, 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.
15  */
16 
17 package com.android.browser;
18 
19 import android.content.Context;
20 import android.graphics.Canvas;
21 import android.util.AttributeSet;
22 import android.view.View;
23 import android.webkit.WebChromeClient;
24 import android.webkit.WebStorage;
25 import android.webkit.WebStorageClassic;
26 import android.webkit.WebView;
27 import android.webkit.WebViewClassic;
28 import android.webkit.WebViewClient;
29 
30 import java.util.Map;
31 
32 /**
33  * Manage WebView scroll events
34  */
35 public class BrowserWebView extends WebView implements WebViewClassic.TitleBarDelegate {
36 
37     public interface OnScrollChangedListener {
onScrollChanged(int l, int t, int oldl, int oldt)38         void onScrollChanged(int l, int t, int oldl, int oldt);
39     }
40 
41     private boolean mBackgroundRemoved = false;
42     private TitleBar mTitleBar;
43     private OnScrollChangedListener mOnScrollChangedListener;
44     private WebChromeClient mWebChromeClient;
45     private WebViewClient mWebViewClient;
46 
47     /**
48      * @param context
49      * @param attrs
50      * @param defStyle
51      * @param javascriptInterfaces
52      */
BrowserWebView(Context context, AttributeSet attrs, int defStyle, Map<String, Object> javascriptInterfaces, boolean privateBrowsing)53     public BrowserWebView(Context context, AttributeSet attrs, int defStyle,
54             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      */
BrowserWebView( Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing)63     public BrowserWebView(
64             Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) {
65         super(context, attrs, defStyle, privateBrowsing);
66     }
67 
68     /**
69      * @param context
70      * @param attrs
71      */
BrowserWebView(Context context, AttributeSet attrs)72     public BrowserWebView(Context context, AttributeSet attrs) {
73         super(context, attrs);
74     }
75 
76     /**
77      * @param context
78      */
BrowserWebView(Context context)79     public BrowserWebView(Context context) {
80         super(context);
81     }
82 
isClassic()83     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
setWebChromeClient(WebChromeClient client)89     public void setWebChromeClient(WebChromeClient client) {
90         mWebChromeClient = client;
91         super.setWebChromeClient(client);
92     }
93 
getWebChromeClient()94     public WebChromeClient getWebChromeClient() {
95       return mWebChromeClient;
96     }
97 
98     @Override
setWebViewClient(WebViewClient client)99     public void setWebViewClient(WebViewClient client) {
100         mWebViewClient = client;
101         super.setWebViewClient(client);
102     }
103 
getWebViewClient()104     public WebViewClient getWebViewClient() {
105       return mWebViewClient;
106     }
107 
setTitleBar(TitleBar title)108     public void setTitleBar(TitleBar title) {
109         mTitleBar = title;
110     }
111 
112     // From TitleBarDelegate
113     @Override
getTitleHeight()114     public int getTitleHeight() {
115         return (mTitleBar != null) ? mTitleBar.getEmbeddedHeight() : 0;
116     }
117 
118     // From TitleBarDelegate
119     @Override
onSetEmbeddedTitleBar(final View title)120     public void onSetEmbeddedTitleBar(final View title) {
121         // TODO: Remove this method; it is never invoked.
122     }
123 
hasTitleBar()124     public boolean hasTitleBar() {
125         return (mTitleBar != null);
126     }
127 
128     @Override
onDraw(Canvas c)129     protected void onDraw(Canvas c) {
130         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             });
138         }
139     }
140 
drawContent(Canvas c)141     public void drawContent(Canvas c) {
142         onDraw(c);
143     }
144 
145     @Override
onScrollChanged(int l, int t, int oldl, int oldt)146     protected void onScrollChanged(int l, int t, int oldl, int oldt) {
147         super.onScrollChanged(l, t, oldl, oldt);
148         if (mTitleBar != null) {
149             mTitleBar.onScrollChanged();
150         }
151         if (mOnScrollChangedListener != null) {
152             mOnScrollChangedListener.onScrollChanged(l, t, oldl, oldt);
153         }
154     }
155 
setOnScrollChangedListener(OnScrollChangedListener listener)156     public void setOnScrollChangedListener(OnScrollChangedListener listener) {
157         mOnScrollChangedListener = listener;
158     }
159 
160     @Override
showContextMenuForChild(View originalView)161     public boolean showContextMenuForChild(View originalView) {
162         return false;
163     }
164 
165     @Override
destroy()166     public void destroy() {
167         BrowserSettings.getInstance().stopManagingSettings(getSettings());
168         super.destroy();
169     }
170 
171 }
172