1f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb/*
2f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb * Copyright (C) 2011 The Android Open Source Project
3f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb *
4f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb * Licensed under the Apache License, Version 2.0 (the "License");
5f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb * you may not use this file except in compliance with the License.
6f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb * You may obtain a copy of the License at
7f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb *
8f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb *      http://www.apache.org/licenses/LICENSE-2.0
9f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb *
10f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb * Unless required by applicable law or agreed to in writing, software
11f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb * distributed under the License is distributed on an "AS IS" BASIS,
12f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb * See the License for the specific language governing permissions and
14f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb * limitations under the License.
15f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb */
16f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
17f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbpackage com.android.browser;
18f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
19f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.app.Activity;
20f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.content.Context;
21a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolbimport android.content.res.Configuration;
22f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.view.LayoutInflater;
23f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.view.Menu;
24f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.view.MenuItem;
25f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.view.View;
26f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.view.View.OnClickListener;
27dcd81d37547c3116fd3843894060b6e705d2b1f7Michael Kolbimport android.view.ViewConfiguration;
28f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.view.ViewGroup;
29f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.widget.BaseAdapter;
30f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.widget.FrameLayout;
31f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.widget.ImageButton;
32f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.widget.ImageView;
339829b43575a4e517a8f7f4aae836bf28728fb85bMichael Kolbimport android.widget.LinearLayout;
34017ffabc8af29b0cf14fecc6aad4a61acb8373a2Michael Kolbimport android.widget.PopupMenu;
35017ffabc8af29b0cf14fecc6aad4a61acb8373a2Michael Kolbimport android.widget.PopupMenu.OnMenuItemClickListener;
362814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolbimport android.widget.RelativeLayout;
37f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.widget.TextView;
38f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
39a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolbimport com.android.browser.NavTabScroller.OnLayoutListener;
40a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolbimport com.android.browser.NavTabScroller.OnRemoveListener;
418ee633fd62f94cd66c85c2904232d7c9e204cc9cJohn Reckimport com.android.browser.TabControl.OnThumbnailUpdatedListener;
42315d502edce27bb4e93e53134f1a43b8f5c45588Michael Kolbimport com.android.browser.UI.ComboViews;
438ee633fd62f94cd66c85c2904232d7c9e204cc9cJohn Reck
448ee633fd62f94cd66c85c2904232d7c9e204cc9cJohn Reckimport java.util.HashMap;
45dcd81d37547c3116fd3843894060b6e705d2b1f7Michael Kolb
46017ffabc8af29b0cf14fecc6aad4a61acb8373a2Michael Kolbpublic class NavScreen extends RelativeLayout
478ee633fd62f94cd66c85c2904232d7c9e204cc9cJohn Reck        implements OnClickListener, OnMenuItemClickListener, OnThumbnailUpdatedListener {
48f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
49c3af06776be83ba64a0d3549cb72ca6e5e7f03cdMichael Kolb
50f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    UiController mUiController;
51f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    PhoneUi mUi;
52f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    Tab mTab;
53f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    Activity mActivity;
54f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
55f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    ImageButton mRefresh;
56f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    ImageButton mForward;
57f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    ImageButton mBookmarks;
58f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    ImageButton mMore;
59f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    ImageButton mNewTab;
60f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    FrameLayout mHolder;
61f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
622814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolb    TextView mTitle;
632814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolb    ImageView mFavicon;
642814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolb    ImageButton mCloseTab;
652814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolb
66a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb    NavTabScroller mScroller;
67f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    TabAdapter mAdapter;
68a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb    int mOrientation;
693ca12750f9b6231b00a1856dcb25c2d2e07e8784Michael Kolb    boolean mNeedsMenu;
708ee633fd62f94cd66c85c2904232d7c9e204cc9cJohn Reck    HashMap<Tab, View> mTabViews;
71f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
72f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    public NavScreen(Activity activity, UiController ctl, PhoneUi ui) {
73f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        super(activity);
74f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        mActivity = activity;
75f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        mUiController = ctl;
76f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        mUi = ui;
77a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb        mOrientation = activity.getResources().getConfiguration().orientation;
78f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        init();
79f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    }
80f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
81fedb492d1ac1068e17028b6d4083d1a6b0578287Michael Kolb    protected void showMenu() {
82017ffabc8af29b0cf14fecc6aad4a61acb8373a2Michael Kolb        PopupMenu popup = new PopupMenu(mContext, mMore);
83017ffabc8af29b0cf14fecc6aad4a61acb8373a2Michael Kolb        Menu menu = popup.getMenu();
84017ffabc8af29b0cf14fecc6aad4a61acb8373a2Michael Kolb        popup.getMenuInflater().inflate(R.menu.browser, menu);
85a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb        mUiController.updateMenuState(mUiController.getCurrentTab(), menu);
86017ffabc8af29b0cf14fecc6aad4a61acb8373a2Michael Kolb        popup.setOnMenuItemClickListener(this);
87f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        popup.show();
88f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    }
89f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
90017ffabc8af29b0cf14fecc6aad4a61acb8373a2Michael Kolb    @Override
91017ffabc8af29b0cf14fecc6aad4a61acb8373a2Michael Kolb    public boolean onMenuItemClick(MenuItem item) {
92017ffabc8af29b0cf14fecc6aad4a61acb8373a2Michael Kolb        return mUiController.onOptionsItemSelected(item);
93adc921feeb327ed118711d4abddfaa421c841290John Reck    }
94adc921feeb327ed118711d4abddfaa421c841290John Reck
95017ffabc8af29b0cf14fecc6aad4a61acb8373a2Michael Kolb    protected float getToolbarHeight() {
96017ffabc8af29b0cf14fecc6aad4a61acb8373a2Michael Kolb        return mActivity.getResources().getDimension(R.dimen.toolbar_height);
97f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    }
98f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
99a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb    @Override
100a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb    protected void onConfigurationChanged(Configuration newconfig) {
101a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb        if (newconfig.orientation != mOrientation) {
102a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb            int sv = mScroller.getScrollValue();
103a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb            removeAllViews();
1049829b43575a4e517a8f7f4aae836bf28728fb85bMichael Kolb            mOrientation = newconfig.orientation;
105a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb            init();
106a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb            mScroller.setScrollValue(sv);
1072814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolb            mAdapter.notifyDataSetChanged();
108a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb        }
109a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb    }
110a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb
1119c5004e6d5645cdf32fff3a3f04817a307b84dd6John Reck    public void refreshAdapter() {
1121adf0307932f3933be792e631612ea1a2fd4e6e2John Reck        mScroller.handleDataChanged(
1131adf0307932f3933be792e631612ea1a2fd4e6e2John Reck                mUiController.getTabControl().getTabPosition(mUi.getActiveTab()));
1149c5004e6d5645cdf32fff3a3f04817a307b84dd6John Reck    }
1159c5004e6d5645cdf32fff3a3f04817a307b84dd6John Reck
116f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    private void init() {
117f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        LayoutInflater.from(mContext).inflate(R.layout.nav_screen, this);
11830adae6ebf17a724d24066a200432e6b22a4eeffMichael Kolb        setContentDescription(mContext.getResources().getString(
11930adae6ebf17a724d24066a200432e6b22a4eeffMichael Kolb                R.string.accessibility_transition_navscreen));
120f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        mBookmarks = (ImageButton) findViewById(R.id.bookmarks);
121f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        mNewTab = (ImageButton) findViewById(R.id.newtab);
122f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        mMore = (ImageButton) findViewById(R.id.more);
123f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        mBookmarks.setOnClickListener(this);
124f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        mNewTab.setOnClickListener(this);
125f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        mMore.setOnClickListener(this);
126a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb        mScroller = (NavTabScroller) findViewById(R.id.scroller);
1278ee633fd62f94cd66c85c2904232d7c9e204cc9cJohn Reck        TabControl tc = mUiController.getTabControl();
1288ee633fd62f94cd66c85c2904232d7c9e204cc9cJohn Reck        mTabViews = new HashMap<Tab, View>(tc.getTabCount());
1298ee633fd62f94cd66c85c2904232d7c9e204cc9cJohn Reck        mAdapter = new TabAdapter(mContext, tc);
1309829b43575a4e517a8f7f4aae836bf28728fb85bMichael Kolb        mScroller.setOrientation(mOrientation == Configuration.ORIENTATION_LANDSCAPE
1319829b43575a4e517a8f7f4aae836bf28728fb85bMichael Kolb                ? LinearLayout.HORIZONTAL : LinearLayout.VERTICAL);
1322814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolb        // update state for active tab
133c3af06776be83ba64a0d3549cb72ca6e5e7f03cdMichael Kolb        mScroller.setAdapter(mAdapter,
134c3af06776be83ba64a0d3549cb72ca6e5e7f03cdMichael Kolb                mUiController.getTabControl().getTabPosition(mUi.getActiveTab()));
135dcd81d37547c3116fd3843894060b6e705d2b1f7Michael Kolb        mScroller.setOnRemoveListener(new OnRemoveListener() {
136dcd81d37547c3116fd3843894060b6e705d2b1f7Michael Kolb            public void onRemovePosition(int pos) {
137dcd81d37547c3116fd3843894060b6e705d2b1f7Michael Kolb                Tab tab = mAdapter.getItem(pos);
138dcd81d37547c3116fd3843894060b6e705d2b1f7Michael Kolb                onCloseTab(tab);
139dcd81d37547c3116fd3843894060b6e705d2b1f7Michael Kolb            }
140dcd81d37547c3116fd3843894060b6e705d2b1f7Michael Kolb        });
1413ca12750f9b6231b00a1856dcb25c2d2e07e8784Michael Kolb        mNeedsMenu = !ViewConfiguration.get(getContext()).hasPermanentMenuKey();
1423ca12750f9b6231b00a1856dcb25c2d2e07e8784Michael Kolb        if (!mNeedsMenu) {
1433ca12750f9b6231b00a1856dcb25c2d2e07e8784Michael Kolb            mMore.setVisibility(View.GONE);
1443ca12750f9b6231b00a1856dcb25c2d2e07e8784Michael Kolb        }
145f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    }
146f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
147f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    @Override
148f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    public void onClick(View v) {
149f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        if (mBookmarks == v) {
150315d502edce27bb4e93e53134f1a43b8f5c45588Michael Kolb            mUiController.bookmarksOrHistoryPicker(ComboViews.Bookmarks);
151f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        } else if (mNewTab == v) {
152a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb            openNewTab();
153f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        } else if (mMore == v) {
154fedb492d1ac1068e17028b6d4083d1a6b0578287Michael Kolb            showMenu();
1552814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolb        }
1562814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolb    }
1572814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolb
1582814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolb    private void onCloseTab(Tab tab) {
1592814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolb        if (tab != null) {
160308b301d37295044c5beac52c5b1a8de0853304fMichael Kolb            if (tab == mUiController.getCurrentTab()) {
161308b301d37295044c5beac52c5b1a8de0853304fMichael Kolb                mUiController.closeCurrentTab();
162308b301d37295044c5beac52c5b1a8de0853304fMichael Kolb            } else {
163308b301d37295044c5beac52c5b1a8de0853304fMichael Kolb                mUiController.closeTab(tab);
164308b301d37295044c5beac52c5b1a8de0853304fMichael Kolb            }
1654e019c3e1e437448e92e5b58fb05f5a55450007eSebastien MICHEL            mTabViews.remove(tab);
166f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        }
167f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    }
168f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
169a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb    private void openNewTab() {
1702814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolb        // need to call openTab explicitely with setactive false
171a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb        final Tab tab = mUiController.openTab(BrowserSettings.getInstance().getHomePage(),
1722814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolb                false, false, false);
173a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb        if (tab != null) {
174c3af06776be83ba64a0d3549cb72ca6e5e7f03cdMichael Kolb            mUiController.setBlockEvents(true);
175c831b63308dd1f8ef71808db8344ca2566ba4ed4Michael Kolb            final int tix = mUi.mTabControl.getTabPosition(tab);
176a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb            mScroller.setOnLayoutListener(new OnLayoutListener() {
177a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb
1782814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolb                @Override
179a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb                public void onLayout(int l, int t, int r, int b) {
1803204fbabed9bd66f7d3e8010ddc741991cdfbf24weiweix.ji                    final int pos = mUi.mTabControl.getTabPosition(tab);
1813204fbabed9bd66f7d3e8010ddc741991cdfbf24weiweix.ji                    mUi.hideNavScreen(pos, true);
182a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb                    switchToTab(tab);
183a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb                }
184c3af06776be83ba64a0d3549cb72ca6e5e7f03cdMichael Kolb            });
185a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb            mScroller.handleDataChanged(tix);
186a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb            mUiController.setBlockEvents(false);
187a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb        }
188f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    }
189f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
190a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb    private void switchToTab(Tab tab) {
191f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        if (tab != mUi.getActiveTab()) {
192f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb            mUiController.setActiveTab(tab);
193f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        }
194f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    }
195f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
196a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb    protected void close(int position) {
197a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb        close(position, true);
198a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb    }
199a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb
200a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb    protected void close(int position, boolean animate) {
201a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb        mUi.hideNavScreen(position, animate);
202a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb    }
203a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb
204a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb    protected NavTabView getTabView(int pos) {
205a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb        return mScroller.getTabView(pos);
206a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb    }
207a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb
208f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    class TabAdapter extends BaseAdapter {
209f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
210f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        Context context;
211f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        TabControl tabControl;
212f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
213f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        public TabAdapter(Context ctx, TabControl tc) {
214f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb            context = ctx;
215f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb            tabControl = tc;
216f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        }
217f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
218f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        @Override
219f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        public int getCount() {
220f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb            return tabControl.getTabCount();
221f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        }
222f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
223f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        @Override
224f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        public Tab getItem(int position) {
225f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb            return tabControl.getTab(position);
226f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        }
227f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
228f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        public long getItemId(int position) {
229f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb            return position;
230f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        }
231f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
232f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        @Override
2332814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolb        public View getView(final int position, View convertView, ViewGroup parent) {
2344bd767d2f4ce166a44687170c6af18e242447205Michael Kolb            final NavTabView tabview = new NavTabView(mActivity);
235f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb            final Tab tab = getItem(position);
236c3af06776be83ba64a0d3549cb72ca6e5e7f03cdMichael Kolb            tabview.setWebView(tab);
2378ee633fd62f94cd66c85c2904232d7c9e204cc9cJohn Reck            mTabViews.put(tab, tabview.mImage);
2384bd767d2f4ce166a44687170c6af18e242447205Michael Kolb            tabview.setOnClickListener(new OnClickListener() {
2392814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolb                @Override
2402814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolb                public void onClick(View v) {
2419829b43575a4e517a8f7f4aae836bf28728fb85bMichael Kolb                    if (tabview.isClose(v)) {
242e76f7047c9f1cb0a6abb9afe1ce31c5dc4b30973Michael Kolb                        mScroller.animateOut(tabview);
2434e019c3e1e437448e92e5b58fb05f5a55450007eSebastien MICHEL                        mTabViews.remove(tab);
2444bd767d2f4ce166a44687170c6af18e242447205Michael Kolb                    } else if (tabview.isTitle(v)) {
245a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb                        switchToTab(tab);
2464bd767d2f4ce166a44687170c6af18e242447205Michael Kolb                        mUi.getTitleBar().setSkipTitleBarAnimations(true);
247a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb                        close(position, false);
2481f9b3565dbd1911dfe4d9bfd8b833a5ac5f2e0c4Michael Kolb                        mUi.editUrl(false, true);
2494bd767d2f4ce166a44687170c6af18e242447205Michael Kolb                        mUi.getTitleBar().setSkipTitleBarAnimations(false);
2504bd767d2f4ce166a44687170c6af18e242447205Michael Kolb                    } else if (tabview.isWebView(v)) {
251a3194d0b9c9c36be29598cac8faf8453cdaebe55Michael Kolb                        close(position);
2524bd767d2f4ce166a44687170c6af18e242447205Michael Kolb                    }
2532814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolb                }
2542814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolb            });
2554bd767d2f4ce166a44687170c6af18e242447205Michael Kolb            return tabview;
256f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb        }
2572814a362c21ac219410d9b54e1bd3e8152b845c7Michael Kolb
258f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb    }
259f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb
2608ee633fd62f94cd66c85c2904232d7c9e204cc9cJohn Reck    @Override
2618ee633fd62f94cd66c85c2904232d7c9e204cc9cJohn Reck    public void onThumbnailUpdated(Tab t) {
2628ee633fd62f94cd66c85c2904232d7c9e204cc9cJohn Reck        View v = mTabViews.get(t);
2638ee633fd62f94cd66c85c2904232d7c9e204cc9cJohn Reck        if (v != null) {
2648ee633fd62f94cd66c85c2904232d7c9e204cc9cJohn Reck            v.invalidate();
2658ee633fd62f94cd66c85c2904232d7c9e204cc9cJohn Reck        }
2668ee633fd62f94cd66c85c2904232d7c9e204cc9cJohn Reck    }
2678ee633fd62f94cd66c85c2904232d7c9e204cc9cJohn Reck
268f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb}
269