14bd767d2f4ce166a44687170c6af18e242447205Michael Kolb/* 24bd767d2f4ce166a44687170c6af18e242447205Michael Kolb * Copyright (C) 2011 The Android Open Source Project 34bd767d2f4ce166a44687170c6af18e242447205Michael Kolb * 44bd767d2f4ce166a44687170c6af18e242447205Michael Kolb * Licensed under the Apache License, Version 2.0 (the "License"); you may not 54bd767d2f4ce166a44687170c6af18e242447205Michael Kolb * use this file except in compliance with the License. You may obtain a copy of 64bd767d2f4ce166a44687170c6af18e242447205Michael Kolb * the License at 74bd767d2f4ce166a44687170c6af18e242447205Michael Kolb * 84bd767d2f4ce166a44687170c6af18e242447205Michael Kolb * http://www.apache.org/licenses/LICENSE-2.0 94bd767d2f4ce166a44687170c6af18e242447205Michael Kolb * 104bd767d2f4ce166a44687170c6af18e242447205Michael Kolb * Unless required by applicable law or agreed to in writing, software 114bd767d2f4ce166a44687170c6af18e242447205Michael Kolb * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 124bd767d2f4ce166a44687170c6af18e242447205Michael Kolb * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 134bd767d2f4ce166a44687170c6af18e242447205Michael Kolb * License for the specific language governing permissions and limitations under 144bd767d2f4ce166a44687170c6af18e242447205Michael Kolb * the License. 154bd767d2f4ce166a44687170c6af18e242447205Michael Kolb */ 164bd767d2f4ce166a44687170c6af18e242447205Michael Kolb 174bd767d2f4ce166a44687170c6af18e242447205Michael Kolbpackage com.android.browser; 184bd767d2f4ce166a44687170c6af18e242447205Michael Kolb 194bd767d2f4ce166a44687170c6af18e242447205Michael Kolbimport android.content.Context; 209ef259af433edc5aeb11b5d5d94dc9acc697c61eMichael Kolbimport android.graphics.Bitmap; 214bd767d2f4ce166a44687170c6af18e242447205Michael Kolbimport android.util.AttributeSet; 224bd767d2f4ce166a44687170c6af18e242447205Michael Kolbimport android.view.LayoutInflater; 234bd767d2f4ce166a44687170c6af18e242447205Michael Kolbimport android.view.View; 24c3af06776be83ba64a0d3549cb72ca6e5e7f03cdMichael Kolbimport android.view.ViewGroup; 25c3af06776be83ba64a0d3549cb72ca6e5e7f03cdMichael Kolbimport android.webkit.WebView; 264bd767d2f4ce166a44687170c6af18e242447205Michael Kolbimport android.widget.ImageView; 274bd767d2f4ce166a44687170c6af18e242447205Michael Kolbimport android.widget.LinearLayout; 284bd767d2f4ce166a44687170c6af18e242447205Michael Kolbimport android.widget.TextView; 294bd767d2f4ce166a44687170c6af18e242447205Michael Kolb 304bd767d2f4ce166a44687170c6af18e242447205Michael Kolbpublic class NavTabView extends LinearLayout { 314bd767d2f4ce166a44687170c6af18e242447205Michael Kolb 32c3af06776be83ba64a0d3549cb72ca6e5e7f03cdMichael Kolb private ViewGroup mContent; 330f91e03b5e614bfd1bae969652172a933faf23c5Michael Kolb private Tab mTab; 349829b43575a4e517a8f7f4aae836bf28728fb85bMichael Kolb private ImageView mClose; 350f91e03b5e614bfd1bae969652172a933faf23c5Michael Kolb private TextView mTitle; 360f91e03b5e614bfd1bae969652172a933faf23c5Michael Kolb private View mTitleBar; 378ee633fd62f94cd66c85c2904232d7c9e204cc9cJohn Reck ImageView mImage; 380f91e03b5e614bfd1bae969652172a933faf23c5Michael Kolb private OnClickListener mClickListener; 390f91e03b5e614bfd1bae969652172a933faf23c5Michael Kolb private boolean mHighlighted; 404bd767d2f4ce166a44687170c6af18e242447205Michael Kolb 414bd767d2f4ce166a44687170c6af18e242447205Michael Kolb public NavTabView(Context context, AttributeSet attrs, int defStyle) { 424bd767d2f4ce166a44687170c6af18e242447205Michael Kolb super(context, attrs, defStyle); 434bd767d2f4ce166a44687170c6af18e242447205Michael Kolb init(); 444bd767d2f4ce166a44687170c6af18e242447205Michael Kolb } 454bd767d2f4ce166a44687170c6af18e242447205Michael Kolb 464bd767d2f4ce166a44687170c6af18e242447205Michael Kolb public NavTabView(Context context, AttributeSet attrs) { 474bd767d2f4ce166a44687170c6af18e242447205Michael Kolb super(context, attrs); 484bd767d2f4ce166a44687170c6af18e242447205Michael Kolb init(); 494bd767d2f4ce166a44687170c6af18e242447205Michael Kolb } 504bd767d2f4ce166a44687170c6af18e242447205Michael Kolb 514bd767d2f4ce166a44687170c6af18e242447205Michael Kolb public NavTabView(Context context) { 524bd767d2f4ce166a44687170c6af18e242447205Michael Kolb super(context); 534bd767d2f4ce166a44687170c6af18e242447205Michael Kolb init(); 544bd767d2f4ce166a44687170c6af18e242447205Michael Kolb } 554bd767d2f4ce166a44687170c6af18e242447205Michael Kolb 564bd767d2f4ce166a44687170c6af18e242447205Michael Kolb private void init() { 579829b43575a4e517a8f7f4aae836bf28728fb85bMichael Kolb LayoutInflater.from(mContext).inflate(R.layout.nav_tab_view, this); 58c3af06776be83ba64a0d3549cb72ca6e5e7f03cdMichael Kolb mContent = (ViewGroup) findViewById(R.id.main); 599829b43575a4e517a8f7f4aae836bf28728fb85bMichael Kolb mClose = (ImageView) findViewById(R.id.closetab); 604bd767d2f4ce166a44687170c6af18e242447205Michael Kolb mTitle = (TextView) findViewById(R.id.title); 614bd767d2f4ce166a44687170c6af18e242447205Michael Kolb mTitleBar = findViewById(R.id.titlebar); 629ef259af433edc5aeb11b5d5d94dc9acc697c61eMichael Kolb mImage = (ImageView) findViewById(R.id.tab_view); 634bd767d2f4ce166a44687170c6af18e242447205Michael Kolb } 644bd767d2f4ce166a44687170c6af18e242447205Michael Kolb 654bd767d2f4ce166a44687170c6af18e242447205Michael Kolb protected boolean isClose(View v) { 664bd767d2f4ce166a44687170c6af18e242447205Michael Kolb return v == mClose; 674bd767d2f4ce166a44687170c6af18e242447205Michael Kolb } 684bd767d2f4ce166a44687170c6af18e242447205Michael Kolb 694bd767d2f4ce166a44687170c6af18e242447205Michael Kolb protected boolean isTitle(View v) { 704bd767d2f4ce166a44687170c6af18e242447205Michael Kolb return v == mTitleBar; 714bd767d2f4ce166a44687170c6af18e242447205Michael Kolb } 724bd767d2f4ce166a44687170c6af18e242447205Michael Kolb 734bd767d2f4ce166a44687170c6af18e242447205Michael Kolb protected boolean isWebView(View v) { 749ef259af433edc5aeb11b5d5d94dc9acc697c61eMichael Kolb return v == mImage; 754bd767d2f4ce166a44687170c6af18e242447205Michael Kolb } 764bd767d2f4ce166a44687170c6af18e242447205Michael Kolb 774bd767d2f4ce166a44687170c6af18e242447205Michael Kolb private void setTitle() { 784bd767d2f4ce166a44687170c6af18e242447205Michael Kolb if (mTab == null) return; 794bd767d2f4ce166a44687170c6af18e242447205Michael Kolb if (mHighlighted) { 804bd767d2f4ce166a44687170c6af18e242447205Michael Kolb mTitle.setText(mTab.getUrl()); 814bd767d2f4ce166a44687170c6af18e242447205Michael Kolb } else { 824bd767d2f4ce166a44687170c6af18e242447205Michael Kolb String txt = mTab.getTitle(); 839829b43575a4e517a8f7f4aae836bf28728fb85bMichael Kolb if (txt == null) { 849829b43575a4e517a8f7f4aae836bf28728fb85bMichael Kolb txt = mTab.getUrl(); 859829b43575a4e517a8f7f4aae836bf28728fb85bMichael Kolb } 864bd767d2f4ce166a44687170c6af18e242447205Michael Kolb mTitle.setText(txt); 874bd767d2f4ce166a44687170c6af18e242447205Michael Kolb } 88502a353bb815bee8bec6a60f3b741dc62e4729cdJohn Reck if (mTab.isSnapshot()) { 89502a353bb815bee8bec6a60f3b741dc62e4729cdJohn Reck setTitleIcon(R.drawable.ic_history_holo_dark); 90502a353bb815bee8bec6a60f3b741dc62e4729cdJohn Reck } else if (mTab.isPrivateBrowsingEnabled()) { 91502a353bb815bee8bec6a60f3b741dc62e4729cdJohn Reck setTitleIcon(R.drawable.ic_incognito_holo_dark); 92502a353bb815bee8bec6a60f3b741dc62e4729cdJohn Reck } else { 93502a353bb815bee8bec6a60f3b741dc62e4729cdJohn Reck setTitleIcon(0); 94502a353bb815bee8bec6a60f3b741dc62e4729cdJohn Reck } 95502a353bb815bee8bec6a60f3b741dc62e4729cdJohn Reck } 96502a353bb815bee8bec6a60f3b741dc62e4729cdJohn Reck 97502a353bb815bee8bec6a60f3b741dc62e4729cdJohn Reck private void setTitleIcon(int id) { 98502a353bb815bee8bec6a60f3b741dc62e4729cdJohn Reck if (id == 0) { 99502a353bb815bee8bec6a60f3b741dc62e4729cdJohn Reck mTitle.setPadding(mTitle.getCompoundDrawablePadding(), 0, 0, 0); 100502a353bb815bee8bec6a60f3b741dc62e4729cdJohn Reck } else { 101502a353bb815bee8bec6a60f3b741dc62e4729cdJohn Reck mTitle.setPadding(0, 0, 0, 0); 102502a353bb815bee8bec6a60f3b741dc62e4729cdJohn Reck } 103502a353bb815bee8bec6a60f3b741dc62e4729cdJohn Reck mTitle.setCompoundDrawablesWithIntrinsicBounds(id, 0, 0, 0); 1044bd767d2f4ce166a44687170c6af18e242447205Michael Kolb } 1054bd767d2f4ce166a44687170c6af18e242447205Michael Kolb 1064bd767d2f4ce166a44687170c6af18e242447205Michael Kolb protected boolean isHighlighted() { 1074bd767d2f4ce166a44687170c6af18e242447205Michael Kolb return mHighlighted; 1084bd767d2f4ce166a44687170c6af18e242447205Michael Kolb } 1094bd767d2f4ce166a44687170c6af18e242447205Michael Kolb 110c3af06776be83ba64a0d3549cb72ca6e5e7f03cdMichael Kolb protected void setWebView(Tab tab) { 1114bd767d2f4ce166a44687170c6af18e242447205Michael Kolb mTab = tab; 112d8c7452a7d8975a2d60414c5a33842b4a743e631John Reck setTitle(); 1139ef259af433edc5aeb11b5d5d94dc9acc697c61eMichael Kolb Bitmap image = tab.getScreenshot(); 1149ef259af433edc5aeb11b5d5d94dc9acc697c61eMichael Kolb if (image != null) { 1159ef259af433edc5aeb11b5d5d94dc9acc697c61eMichael Kolb mImage.setImageBitmap(image); 116a9a5967ea18d4b442ae5433cd3759b3921e480adMichael Kolb if (tab != null) { 117a9a5967ea18d4b442ae5433cd3759b3921e480adMichael Kolb mImage.setContentDescription(tab.getTitle()); 118a9a5967ea18d4b442ae5433cd3759b3921e480adMichael Kolb } 119d8c7452a7d8975a2d60414c5a33842b4a743e631John Reck } 1204bd767d2f4ce166a44687170c6af18e242447205Michael Kolb } 1214bd767d2f4ce166a44687170c6af18e242447205Michael Kolb 1224bd767d2f4ce166a44687170c6af18e242447205Michael Kolb @Override 1234bd767d2f4ce166a44687170c6af18e242447205Michael Kolb public void setOnClickListener(OnClickListener listener) { 1244bd767d2f4ce166a44687170c6af18e242447205Michael Kolb mClickListener = listener; 1254bd767d2f4ce166a44687170c6af18e242447205Michael Kolb mTitleBar.setOnClickListener(mClickListener); 1264bd767d2f4ce166a44687170c6af18e242447205Michael Kolb mClose.setOnClickListener(mClickListener); 1279ef259af433edc5aeb11b5d5d94dc9acc697c61eMichael Kolb if (mImage != null) { 1289ef259af433edc5aeb11b5d5d94dc9acc697c61eMichael Kolb mImage.setOnClickListener(mClickListener); 1294bd767d2f4ce166a44687170c6af18e242447205Michael Kolb } 1304bd767d2f4ce166a44687170c6af18e242447205Michael Kolb } 1314bd767d2f4ce166a44687170c6af18e242447205Michael Kolb 1324bd767d2f4ce166a44687170c6af18e242447205Michael Kolb} 133