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