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