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