/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.android.browser; import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import android.view.View; import android.webkit.WebChromeClient; import android.webkit.WebStorage; import android.webkit.WebView; import android.webkit.WebViewClient; import java.util.Map; /** * Manage WebView scroll events */ public class BrowserWebView extends WebView { public interface OnScrollChangedListener { void onScrollChanged(int l, int t, int oldl, int oldt); } private boolean mBackgroundRemoved = false; private TitleBar mTitleBar; private OnScrollChangedListener mOnScrollChangedListener; private WebChromeClient mWebChromeClient; private WebViewClient mWebViewClient; /** * @param context * @param attrs * @param defStyle * @param javascriptInterfaces */ public BrowserWebView(Context context, AttributeSet attrs, int defStyle, Map javascriptInterfaces, boolean privateBrowsing) { super(context, attrs, defStyle, javascriptInterfaces, privateBrowsing); } /** * @param context * @param attrs * @param defStyle */ public BrowserWebView( Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) { super(context, attrs, defStyle, privateBrowsing); } /** * @param context * @param attrs */ public BrowserWebView(Context context, AttributeSet attrs) { super(context, attrs); } /** * @param context */ public BrowserWebView(Context context) { super(context); } @Override public void setWebChromeClient(WebChromeClient client) { mWebChromeClient = client; super.setWebChromeClient(client); } public WebChromeClient getWebChromeClient() { return mWebChromeClient; } @Override public void setWebViewClient(WebViewClient client) { mWebViewClient = client; super.setWebViewClient(client); } public WebViewClient getWebViewClient() { return mWebViewClient; } public void setTitleBar(TitleBar title) { mTitleBar = title; } public int getTitleHeight() { return (mTitleBar != null) ? mTitleBar.getEmbeddedHeight() : 0; } public boolean hasTitleBar() { return (mTitleBar != null); } @Override protected void onDraw(Canvas c) { super.onDraw(c); if (!mBackgroundRemoved && getRootView().getBackground() != null) { mBackgroundRemoved = true; post(new Runnable() { public void run() { getRootView().setBackgroundDrawable(null); } }); } } public void drawContent(Canvas c) { onDraw(c); } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); if (mTitleBar != null) { mTitleBar.onScrollChanged(); } if (mOnScrollChangedListener != null) { mOnScrollChangedListener.onScrollChanged(l, t, oldl, oldt); } } public void setOnScrollChangedListener(OnScrollChangedListener listener) { mOnScrollChangedListener = listener; } @Override public boolean showContextMenuForChild(View originalView) { return false; } @Override public void destroy() { BrowserSettings.getInstance().stopManagingSettings(getSettings()); super.destroy(); } }