| /* |
| * Copyright (C) 2011 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.content.res.Resources; |
| import android.graphics.Canvas; |
| import android.graphics.drawable.Drawable; |
| import android.util.AttributeSet; |
| import android.util.TypedValue; |
| import android.view.LayoutInflater; |
| import android.view.View; |
| import android.view.ViewGroup; |
| import android.widget.FrameLayout; |
| import android.widget.ImageButton; |
| import android.widget.ImageView; |
| import android.widget.LinearLayout; |
| import android.widget.TextView; |
| |
| public class NavTabView extends LinearLayout { |
| |
| private Tab mTab; |
| private BrowserWebView mWebView; |
| private WebProxyView mProxy; |
| private ImageView mClose; |
| private FrameLayout mContainer; |
| private TextView mTitle; |
| private View mTitleBar; |
| private OnClickListener mClickListener; |
| private boolean mHighlighted; |
| |
| public NavTabView(Context context, AttributeSet attrs, int defStyle) { |
| super(context, attrs, defStyle); |
| init(); |
| } |
| |
| public NavTabView(Context context, AttributeSet attrs) { |
| super(context, attrs); |
| init(); |
| } |
| |
| public NavTabView(Context context) { |
| super(context); |
| init(); |
| } |
| |
| private void init() { |
| LayoutInflater.from(mContext).inflate(R.layout.nav_tab_view, this); |
| mContainer = (FrameLayout) findViewById(R.id.tab_view); |
| mClose = (ImageView) findViewById(R.id.closetab); |
| mTitle = (TextView) findViewById(R.id.title); |
| mTitleBar = findViewById(R.id.titlebar); |
| } |
| |
| protected boolean isClose(View v) { |
| return v == mClose; |
| } |
| |
| protected boolean isTitle(View v) { |
| return v == mTitleBar; |
| } |
| |
| protected boolean isWebView(View v) { |
| return v == mProxy; |
| } |
| |
| protected void setHighlighted(boolean highlighted) { |
| if (highlighted == mHighlighted) return; |
| mHighlighted = highlighted; |
| } |
| |
| private void setTitle() { |
| if (mTab == null) return; |
| if (mHighlighted) { |
| mTitle.setText(mTab.getUrl()); |
| } else { |
| String txt = mTab.getTitle(); |
| if (txt == null) { |
| txt = mTab.getUrl(); |
| } |
| mTitle.setText(txt); |
| } |
| } |
| |
| protected boolean isHighlighted() { |
| return mHighlighted; |
| } |
| |
| protected void setWebView(PhoneUi ui, Tab tab) { |
| mTab = tab; |
| setTitle(); |
| BrowserWebView web = (BrowserWebView) tab.getWebView(); |
| if (web != null) { |
| mWebView = web; |
| removeFromParent(mWebView); |
| mProxy = new WebProxyView(mContext, mWebView); |
| mContainer.addView(mProxy, 0); |
| } |
| } |
| |
| protected void hideTitle() { |
| mTitleBar.setVisibility(View.INVISIBLE); |
| } |
| |
| @Override |
| public void setOnClickListener(OnClickListener listener) { |
| mClickListener = listener; |
| mTitleBar.setOnClickListener(mClickListener); |
| mClose.setOnClickListener(mClickListener); |
| if (mProxy != null) { |
| mProxy.setOnClickListener(mClickListener); |
| } |
| } |
| |
| @Override |
| public void onDetachedFromWindow() { |
| if (mWebView != null) { |
| mWebView.setProxyView(null); |
| } |
| } |
| |
| @Override |
| public void onAttachedToWindow() { |
| if (mWebView != null) { |
| mWebView.invalidate(); |
| } |
| } |
| |
| private static void removeFromParent(View v) { |
| if (v.getParent() != null) { |
| ((ViewGroup) v.getParent()).removeView(v); |
| } |
| } |
| |
| static class WebProxyView extends View { |
| |
| private BrowserWebView mWeb; |
| |
| public WebProxyView(Context context, BrowserWebView web) { |
| super(context); |
| setWillNotDraw(false); |
| mWeb = web; |
| mWeb.setProxyView(this); |
| |
| } |
| |
| public void onDraw(Canvas c) { |
| float scale = 0.7f; |
| int sx = mWeb.getScrollX(); |
| int sy = mWeb.getScrollY(); |
| c.scale(scale, scale); |
| c.translate(-sx, -sy); |
| mWeb.onDraw(c); |
| } |
| |
| } |
| |
| } |