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