BrowserWebView.java revision 718a24d6c9671fe2da4112a3b5f30fd3939b38e8
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
17package com.android.browser;
18
19import android.content.Context;
20import android.graphics.Canvas;
21import android.util.AttributeSet;
22import android.view.View;
23import android.webkit.WebView;
24
25import java.util.Map;
26
27/**
28 * Manage WebView scroll events
29 */
30public class BrowserWebView extends WebView {
31
32    public interface OnScrollChangedListener {
33        void onScrollChanged(int l, int t, int oldl, int oldt);
34    }
35
36    private boolean mBackgroundRemoved = false;
37    private TitleBar mTitleBar;
38    private OnScrollChangedListener mOnScrollChangedListener;
39
40    /**
41     * @param context
42     * @param attrs
43     * @param defStyle
44     * @param javascriptInterfaces
45     */
46    public BrowserWebView(Context context, AttributeSet attrs, int defStyle,
47            Map<String, Object> javascriptInterfaces, boolean privateBrowsing) {
48        super(context, attrs, defStyle, javascriptInterfaces, privateBrowsing);
49    }
50
51    /**
52     * @param context
53     * @param attrs
54     * @param defStyle
55     */
56    public BrowserWebView(
57            Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) {
58        super(context, attrs, defStyle, privateBrowsing);
59    }
60
61    /**
62     * @param context
63     * @param attrs
64     */
65    public BrowserWebView(Context context, AttributeSet attrs) {
66        super(context, attrs);
67    }
68
69    /**
70     * @param context
71     */
72    public BrowserWebView(Context context) {
73        super(context);
74    }
75
76    @Override
77    protected int getTitleHeight() {
78        return (mTitleBar != null) ? mTitleBar.getEmbeddedHeight() : 0;
79    }
80
81    void hideEmbeddedTitleBar() {
82        scrollBy(0, getVisibleTitleHeight());
83    }
84
85    @Override
86    public void setEmbeddedTitleBar(final View title) {
87        super.setEmbeddedTitleBar(title);
88        mTitleBar = (TitleBar) title;
89    }
90
91    public boolean hasTitleBar() {
92        return (mTitleBar != null);
93    }
94
95    @Override
96    protected void onDraw(Canvas c) {
97        super.onDraw(c);
98        if (!mBackgroundRemoved && getRootView().getBackground() != null) {
99            mBackgroundRemoved = true;
100            post(new Runnable() {
101                public void run() {
102                    getRootView().setBackgroundDrawable(null);
103                }
104            });
105        }
106    }
107
108    public void drawContent(Canvas c) {
109        onDraw(c);
110    }
111
112    @Override
113    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
114        super.onScrollChanged(l, t, oldl, oldt);
115        if (mOnScrollChangedListener != null) {
116            mOnScrollChangedListener.onScrollChanged(l, t, oldl, oldt);
117        }
118    }
119
120    public void setOnScrollChangedListener(OnScrollChangedListener listener) {
121        mOnScrollChangedListener = listener;
122    }
123
124}
125