NavScreen.java revision a4261fd53fef2b311e733fcfee4be3a9967ad967
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.graphics.Bitmap; 23a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolbimport android.graphics.Matrix; 24f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.view.LayoutInflater; 25f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.view.Menu; 26f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.view.MenuItem; 27f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.view.View; 28f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.view.View.OnClickListener; 29f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.view.ViewGroup; 30f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.webkit.WebView; 31f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.widget.AdapterView; 32f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.widget.AdapterView.OnItemClickListener; 33f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.widget.AdapterView.OnItemSelectedListener; 34f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.widget.BaseAdapter; 35f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.widget.FrameLayout; 36a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolbimport android.widget.FrameLayout.LayoutParams; 37f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.widget.Gallery; 38f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.widget.ImageButton; 39f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.widget.ImageView; 40a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolbimport android.widget.ImageView.ScaleType; 41f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.widget.LinearLayout; 42f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.widget.ListPopupWindow; 43f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport android.widget.TextView; 44f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 45f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport java.util.ArrayList; 46f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbimport java.util.List; 47f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 48f205560dacc8a85f0443ca1949a68962404321e8Michael Kolbpublic class NavScreen extends LinearLayout implements OnClickListener { 49f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 50f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb UiController mUiController; 51f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb PhoneUi mUi; 52f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb Tab mTab; 53f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb Activity mActivity; 54f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 55f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb View mTopPanel; 56f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb ImageButton mBack; 57f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb ImageButton mRefresh; 58f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb ImageButton mForward; 59f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb ImageButton mTabs; 60f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb ImageButton mBookmarks; 61f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb ImageButton mMore; 62f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb ImageButton mNewTab; 63f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb ImageButton mNewIncognito; 64f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb FrameLayout mHolder; 65f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 66f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb Gallery mFlipper; 67a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb float mTabAspect = 0.66f; 68f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb int mTabWidth; 69f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb int mTabHeight; 70f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb TabAdapter mAdapter; 71f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb ListPopupWindow mPopup; 72a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb int mOrientation; 73f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 74f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public NavScreen(Activity activity, UiController ctl, PhoneUi ui) { 75f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb super(activity); 76f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mActivity = activity; 77f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mUiController = ctl; 78f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mUi = ui; 79a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb mOrientation = activity.getResources().getConfiguration().orientation; 80f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb init(); 81f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 82f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 83a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb @Override 84a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb public void onMeasure(int wspec, int hspec) { 85a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb super.onMeasure(wspec, hspec); 86a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb mTabHeight = mFlipper.getMeasuredHeight(); 87a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb mTabWidth = (int) (mTabHeight * mTabAspect); 88a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb if (mAdapter != null) { 89a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb mAdapter.notifyDataSetChanged(); 90a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb } 91f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 92f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 93a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb protected Tab getSelectedTab() { 94a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb return (Tab) mFlipper.getSelectedItem(); 95f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 96f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 97fedb492d1ac1068e17028b6d4083d1a6b0578287Michael Kolb protected void showMenu() { 98fedb492d1ac1068e17028b6d4083d1a6b0578287Michael Kolb Menu menu = mUi.getMenu(); 99fedb492d1ac1068e17028b6d4083d1a6b0578287Michael Kolb menu.setGroupVisible(R.id.NAV_MENU, false); 100fedb492d1ac1068e17028b6d4083d1a6b0578287Michael Kolb 101f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb MenuAdapter menuAdapter = new MenuAdapter(mContext); 102f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb menuAdapter.setMenu(menu); 103f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb ListPopupWindow popup = new ListPopupWindow(mContext); 104f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb popup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED); 105f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb popup.setAdapter(menuAdapter); 106f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb popup.setModal(true); 107f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb popup.setAnchorView(mMore); 108f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb popup.setWidth((int) mContext.getResources().getDimension( 109f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb R.dimen.menu_width)); 110f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb popup.show(); 111f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mPopup = popup; 112f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 113f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 114adc921feeb327ed118711d4abddfaa421c841290John Reck protected float getToolbarHeight() { 115adc921feeb327ed118711d4abddfaa421c841290John Reck return mActivity.getResources().getDimension(R.dimen.toolbar_height); 116adc921feeb327ed118711d4abddfaa421c841290John Reck } 117adc921feeb327ed118711d4abddfaa421c841290John Reck 118f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb protected void dismissMenu() { 119f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb if (mPopup != null) { 120f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mPopup.dismiss(); 121f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 122f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 123f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 124a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb // for configuration changes 125a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb @Override 126a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb protected void onConfigurationChanged(Configuration newconfig) { 127a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb if (newconfig.orientation != mOrientation) { 128a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb int selIx = mFlipper.getSelectedItemPosition(); 129a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb removeAllViews(); 130a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb init(); 131a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb mFlipper.setSelection(selIx); 132a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb mOrientation = newconfig.orientation; 133a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb } 134a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb } 135a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb 136f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb private void init() { 137f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb LayoutInflater.from(mContext).inflate(R.layout.nav_screen, this); 138f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb LinearLayout content = (LinearLayout) findViewById(R.id.nav_screen); 139f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mTopPanel = findViewById(R.id.navtop); 140f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mBack = (ImageButton) findViewById(R.id.back); 141f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mForward = (ImageButton) findViewById(R.id.forward); 142f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mRefresh = (ImageButton) findViewById(R.id.refresh); 143f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mTabs = (ImageButton) findViewById(R.id.tabs); 144f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mBookmarks = (ImageButton) findViewById(R.id.bookmarks); 145f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mNewTab = (ImageButton) findViewById(R.id.newtab); 146f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mNewIncognito = (ImageButton) findViewById(R.id.newincognito); 147f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mMore = (ImageButton) findViewById(R.id.more); 148f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mBack.setOnClickListener(this); 149f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mForward.setOnClickListener(this); 150f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mRefresh.setOnClickListener(this); 151f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mTabs.setOnClickListener(this); 152f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mBookmarks.setOnClickListener(this); 153f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mNewTab.setOnClickListener(this); 154f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mNewIncognito.setOnClickListener(this); 155f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mMore.setOnClickListener(this); 156f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mHolder = (FrameLayout) findViewById(R.id.galleryholder); 157f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams( 158f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 159f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mFlipper = new TabGallery(mContext); 160f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mFlipper.setSpacing((int)(mContext.getResources() 161f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb .getDimension(R.dimen.nav_tab_spacing))); 162a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb mFlipper.setUnselectedAlpha(0.8f); 163f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mFlipper.setLayoutParams(lp); 164f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mHolder.addView(mFlipper, 0); 165f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mAdapter = new TabAdapter(mContext, mUiController.getTabControl()); 166f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mFlipper.setAdapter(mAdapter); 167f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb setTab(mUi.getActiveTab(), true); 168f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mFlipper.setOnItemClickListener(new OnItemClickListener() { 169f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb @Override 170f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public void onItemClick(AdapterView<?> parent, View view, 171f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb int position, long id) { 172f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb // post as runnable to prevent bug in gesturedetector 173f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb // when view is removed in click handler 174f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb // sends action_cancel before action_up 175f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mFlipper.post(new Runnable() { 176f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public void run() { 177f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb close(); 178f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 179f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb }); 180f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 181f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb }); 182f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mFlipper.setOnItemSelectedListener(new OnItemSelectedListener() { 183f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb @Override 184f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public void onItemSelected(AdapterView<?> parent, View view, 185f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb int position, long id) { 186f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb final Tab tab = mAdapter.getItem(position); 187f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb setTab(tab, false); 188f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 189f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 190f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb @Override 191f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public void onNothingSelected(AdapterView<?> parent) { 192f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 193f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb }); 194f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 195f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 196f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb private void setTab(Tab tab, boolean updateFlipper) { 197f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mTab = tab; 198f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb // refresh state from tab 199f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb WebView web = tab.getWebView(); 200f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb if (web != null) { 201f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mBack.setImageResource(web.canGoBack() 202f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb ? R.drawable.ic_back_holo_dark 203f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb : R.drawable.ic_back_disabled_holo_dark); 204f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mForward.setImageResource(web.canGoForward() 205f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb ? R.drawable.ic_forward_holo_dark 206f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb : R.drawable.ic_forward_disabled_holo_dark); 207f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 208f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb if (updateFlipper) { 209f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mFlipper.setSelection(mUiController.getTabControl().getTabIndex(tab)); 210f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 211f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 212f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 213f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb @Override 214f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public void onClick(View v) { 215f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb WebView web = (mTab != null) ? mTab.getWebView() : null; 216f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb if (web != null) { 217f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb if (mBack == v) { 218f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mUi.hideNavScreen(true); 219a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb switchToSelected(); 220f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb web.goBack(); 221f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } else if (mForward == v) { 222f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mUi.hideNavScreen(true); 223a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb switchToSelected(); 224f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb web.goForward(); 225f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } else if (mRefresh == v) { 226f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mUi.hideNavScreen(true); 227a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb switchToSelected(); 228f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb web.reload(); 229f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 230f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 231f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb if (mBookmarks == v) { 232f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mUi.hideNavScreen(false); 233a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb switchToSelected(); 234f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mUiController.bookmarksOrHistoryPicker(false); 235f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } else if (mTabs == v) { 236f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } else if (mNewTab == v) { 237a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb openNewTab(); 238f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } else if (mMore == v) { 239fedb492d1ac1068e17028b6d4083d1a6b0578287Michael Kolb showMenu(); 240f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } else if (mNewIncognito == v) { 241f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mUi.hideNavScreen(true); 242f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mUiController.openIncognitoTab(); 243f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 244f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 245f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 246a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb private void openNewTab() { 247a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb Tab tab = mUiController.createNewTab( 248a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb BrowserSettings.getInstance().getHomePage(), 249a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb false); 250a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb mAdapter.notifyDataSetChanged(); 251a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb 252a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb if (tab != null) { 253a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb // set tab as the selected in flipper, then hide 254a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb final int tix = mUi.mTabControl.getTabIndex(tab); 255a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb post(new Runnable() { 256a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb public void run() { 257a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb if (tix != -1) { 258a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb for (int i = mFlipper.getSelectedItemPosition(); 259a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb i <= tix; i++) { 260a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb mFlipper.setSelection(i, true); 261a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb mFlipper.invalidate(); 262a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb try { 263a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb Thread.sleep(100); 264a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb } catch (InterruptedException e) { 265a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb e.printStackTrace(); 266a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb } 267a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb } 268a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb } 269a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb mUi.hideNavScreen(true); 270a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb switchToSelected(); 271a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb } 272a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb }); 273a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb } 274f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 275f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 276a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb private void switchToSelected() { 277f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb Tab tab = (Tab) mFlipper.getSelectedItem(); 278f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb if (tab != mUi.getActiveTab()) { 279f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mUiController.setActiveTab(tab); 280f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 281f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 282f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 283a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb protected void close() { 284a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb close(true); 285a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb } 286a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb 287a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb protected void close(boolean animate) { 288a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb mUi.hideNavScreen(animate); 289a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb switchToSelected(); 290a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb } 291a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb 292f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb class TabGallery extends Gallery { 293f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 294f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public TabGallery(Context ctx) { 295f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb super(ctx); 296f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb setUnselectedAlpha(0.3f); 297f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 298f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 299f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb @Override 300f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb protected ViewGroup.LayoutParams generateDefaultLayoutParams() { 301f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb return new Gallery.LayoutParams( 302f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 303f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 304f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 305f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb @Override 306f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) { 307f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb return generateDefaultLayoutParams(); 308f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 309f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 310f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 311f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 312f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb class TabAdapter extends BaseAdapter { 313f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 314f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb Context context; 315f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb TabControl tabControl; 316f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 317f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public TabAdapter(Context ctx, TabControl tc) { 318f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb context = ctx; 319f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb tabControl = tc; 320f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 321f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 322f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb void onCloseTab(Tab tab) { 323f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb if (tab != null) { 324f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mUiController.closeTab(tab); 325f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb if (tabControl.getTabCount() == 0) { 326f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mUiController.openTabToHomePage(); 327f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mUi.hideNavScreen(false); 328f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } else { 329f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb notifyDataSetChanged(); 330f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 331f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 332f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 333f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 334f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb @Override 335f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public int getCount() { 336f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb return tabControl.getTabCount(); 337f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 338f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 339f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb @Override 340f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public Tab getItem(int position) { 341f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb return tabControl.getTab(position); 342f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 343f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 344f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public long getItemId(int position) { 345f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb return position; 346f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 347f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 348f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb @Override 349f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public View getView(int position, View convertView, ViewGroup parent) { 350f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb ImageView content = null; 351f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb if (convertView == null) { 352f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb convertView = LayoutInflater.from(context).inflate(R.layout.nav_tab_view, 353f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb null); 354f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb content = (ImageView) convertView.findViewById(R.id.content); 355f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb content.setLayoutParams(new LayoutParams(mTabWidth, mTabHeight)); 356f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } else { 357f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb content = (ImageView) convertView.findViewById(R.id.content); 358a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb content.setLayoutParams(new LayoutParams(mTabWidth, mTabHeight)); 359f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 3605a4372f4638f9a1fc5c052d85977fbcc0c4d8c55Michael Kolb View tbar = convertView.findViewById(R.id.titlebar); 361f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb TextView title = (TextView) convertView.findViewById(R.id.title); 362f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb ImageView icon = (ImageView) convertView.findViewById(R.id.favicon); 363f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb ImageButton close = (ImageButton) convertView.findViewById(R.id.closetab); 364f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb final Tab tab = getItem(position); 3655a4372f4638f9a1fc5c052d85977fbcc0c4d8c55Michael Kolb icon.setImageDrawable(mUi.getFaviconDrawable(tab.getFavicon())); 366f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb title.setText(tab.getUrl()); 367a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb content.setScaleType(ScaleType.MATRIX); 368a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb Matrix matrix = new Matrix(); 369f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb Bitmap screen = tab.getScreenshot(); 370a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb if (screen != null) { 371a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb float scale = 1.0f; 372a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb if (mTabWidth > mTabHeight) { 373a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb scale = mTabWidth / (float) screen.getWidth(); 374a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb } else { 375a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb scale = mTabHeight / (float) screen.getHeight(); 376a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb } 377a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb matrix.setScale(scale, scale); 378a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb content.setImageMatrix(matrix); 379a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb content.setImageBitmap(screen); 380a4261fd53fef2b311e733fcfee4be3a9967ad967Michael Kolb } 381f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb close.setOnClickListener(new OnClickListener() { 382f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb @Override 383f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public void onClick(View v) { 384f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb onCloseTab(tab); 385f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 386f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb }); 3875a4372f4638f9a1fc5c052d85977fbcc0c4d8c55Michael Kolb tbar.setOnClickListener(new OnClickListener() { 388f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb @Override 389f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public void onClick(View v) { 390f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb close(false); 391ff6c36b53a394e8221215b1a9851fd739f2c03deMichael Kolb mUi.getTitleBar().setSkipTitleBarAnimations(true); 392f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mUi.editUrl(false); 393ff6c36b53a394e8221215b1a9851fd739f2c03deMichael Kolb mUi.getTitleBar().setSkipTitleBarAnimations(false); 394f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 395f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb }); 396f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb return convertView; 397f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 398f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 399f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 400f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb private class MenuAdapter extends BaseAdapter implements OnClickListener { 401f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 402f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb List<MenuItem> mItems; 403f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb LayoutInflater mInflater; 404f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 405f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public MenuAdapter(Context ctx) { 406f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mInflater = LayoutInflater.from(ctx); 407f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mItems = new ArrayList<MenuItem>(); 408f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 409f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 410f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public void setMenu(Menu menu) { 411f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mItems.clear(); 412f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb for (int i = 0; i < menu.size(); i++) { 413f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb MenuItem item = menu.getItem(i); 414f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb if (item.isEnabled() && item.isVisible()) { 415f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mItems.add(item); 416f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 417f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 418f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb notifyDataSetChanged(); 419f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 420f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 421f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb @Override 422f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public int getCount() { 423f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb return mItems.size(); 424f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 425f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 426f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb @Override 427f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public MenuItem getItem(int position) { 428f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb return mItems.get(position); 429f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 430f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 431f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb @Override 432f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public long getItemId(int position) { 433f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb return position; 434f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 435f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 436f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb @Override 437f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public void onClick(View v) { 438f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb if (v.getTag() != null) { 439f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb dismissMenu(); 440f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mActivity.closeOptionsMenu(); 441f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mUi.hideNavScreen(false); 442f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb mUiController.onOptionsItemSelected((MenuItem) v.getTag()); 443f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 444f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 445f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 446f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb @Override 447f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb public View getView(int position, View convertView, ViewGroup parent) { 448f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb final MenuItem item = mItems.get(position); 449f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb View view = mInflater.inflate(R.layout.qc_menu_item, null); 450f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb TextView label = (TextView) view.findViewById(R.id.title); 451f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb label.setText(item.getTitle()); 452f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb label.setTag(item); 453f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb label.setOnClickListener(this); 454f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb return label; 455f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 456f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 457f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb } 458f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb 459f205560dacc8a85f0443ca1949a68962404321e8Michael Kolb} 460