16670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb/* 26670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * Copyright (C) 2010 The Android Open Source Project 36670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * 46670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * Licensed under the Apache License, Version 2.0 (the "License"); 56670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * you may not use this file except in compliance with the License. 66670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * You may obtain a copy of the License at 76670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * 86670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * http://www.apache.org/licenses/LICENSE-2.0 96670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * 106670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * Unless required by applicable law or agreed to in writing, software 116670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * distributed under the License is distributed on an "AS IS" BASIS, 126670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * See the License for the specific language governing permissions and 146670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * limitations under the License. 156670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb */ 166670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 176670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolbpackage com.android.browser; 186670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 196670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolbimport android.app.ActionBar; 206670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolbimport android.app.Activity; 21034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reckimport android.content.res.Resources; 22034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reckimport android.graphics.Bitmap; 23034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reckimport android.graphics.drawable.BitmapDrawable; 24034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reckimport android.graphics.drawable.Drawable; 25034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reckimport android.graphics.drawable.LayerDrawable; 26034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reckimport android.graphics.drawable.PaintDrawable; 27ac35bdc798173ca536e57c1e4541cef11d78983aMichael Kolbimport android.os.Bundle; 28ba23870babf7041e72f7d1119ad59d9bb32c6634Michael Kolbimport android.os.Handler; 29376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolbimport android.util.Log; 306670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolbimport android.view.ActionMode; 31a418306e08e008da99cef929c48e05d2a101ceafMichael Kolbimport android.view.KeyEvent; 320d0245ffd51825f90a9df883667a71e500da03faMichael Kolbimport android.view.Menu; 330d0245ffd51825f90a9df883667a71e500da03faMichael Kolbimport android.view.MenuItem; 346670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolbimport android.webkit.WebView; 356670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 366670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolbimport java.util.List; 376670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 386670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb/** 396670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * Ui for xlarge screen sizes 406670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb */ 41b14ff2febe4b6a07a73c875858437c89cf43fc72Michael Kolbpublic class XLargeUi extends BaseUi { 426670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 436670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb private static final String LOGTAG = "XLargeUi"; 446670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 45034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck private PaintDrawable mFaviconBackground; 46034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck 47376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb private ActionBar mActionBar; 486670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb private TabBar mTabBar; 496670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 500f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck private NavigationBarTablet mNavBar; 516670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 52ba23870babf7041e72f7d1119ad59d9bb32c6634Michael Kolb private Handler mHandler; 53376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb 546670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb /** 556670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * @param browser 566670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * @param controller 576670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb */ 586670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb public XLargeUi(Activity browser, UiController controller) { 596670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb super(browser, controller); 60ba23870babf7041e72f7d1119ad59d9bb32c6634Michael Kolb mHandler = new Handler(); 610f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mNavBar = (NavigationBarTablet) mTitleBar.getNavigationBar(); 626670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb mTabBar = new TabBar(mActivity, mUiController, this); 63376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mActionBar = mActivity.getActionBar(); 64b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck setupActionBar(); 65b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck setUseQuickControls(BrowserSettings.getInstance().useQuickControls()); 66b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck } 67b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck 68b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck private void setupActionBar() { 69b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 70376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 71376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mActionBar.setCustomView(mTabBar); 72b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck } 73b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck 742bc8042224be51966d748b870768ec1b376a1621John Reck public void showComboView(ComboViews startWith, Bundle extras) { 752bc8042224be51966d748b870768ec1b376a1621John Reck super.showComboView(startWith, extras); 76ac35bdc798173ca536e57c1e4541cef11d78983aMichael Kolb if (mUseQuickControls) { 77ac35bdc798173ca536e57c1e4541cef11d78983aMichael Kolb mActionBar.show(); 78ac35bdc798173ca536e57c1e4541cef11d78983aMichael Kolb } 79ac35bdc798173ca536e57c1e4541cef11d78983aMichael Kolb } 80ac35bdc798173ca536e57c1e4541cef11d78983aMichael Kolb 81ac35bdc798173ca536e57c1e4541cef11d78983aMichael Kolb @Override 820241e7556501caae1f57d2bdf3677d7e4a619eb0Michael Kolb public void setUseQuickControls(boolean useQuickControls) { 83da580634265a0add98d3c16b07103edbe724a5b3Michael Kolb super.setUseQuickControls(useQuickControls); 84da580634265a0add98d3c16b07103edbe724a5b3Michael Kolb checkHideActionBar(); 85da580634265a0add98d3c16b07103edbe724a5b3Michael Kolb if (!useQuickControls) { 86da580634265a0add98d3c16b07103edbe724a5b3Michael Kolb mActionBar.show(); 87376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 88376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mTabBar.setUseQuickControls(mUseQuickControls); 891cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck // We need to update the tabs with this change 901cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck for (Tab t : mTabControl.getTabs()) { 911cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck t.updateShouldCaptureThumbnails(); 921cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck } 93376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 94376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb 95da580634265a0add98d3c16b07103edbe724a5b3Michael Kolb private void checkHideActionBar() { 96376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb if (mUseQuickControls) { 97eb95db48b01b3db935601f25bd1a2358674b76daMichael Kolb mHandler.post(new Runnable() { 98eb95db48b01b3db935601f25bd1a2358674b76daMichael Kolb public void run() { 99eb95db48b01b3db935601f25bd1a2358674b76daMichael Kolb mActionBar.hide(); 100eb95db48b01b3db935601f25bd1a2358674b76daMichael Kolb } 101eb95db48b01b3db935601f25bd1a2358674b76daMichael Kolb }); 102376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 1036670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1046670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1056670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 10667b8c1b4336a77414c74bce6152495502d4bde04Narayan Kamath public void onResume() { 10767b8c1b4336a77414c74bce6152495502d4bde04Narayan Kamath super.onResume(); 108f3174a588cdf63ef59055998c23aad4b36b7856eNarayan Kamath mNavBar.clearCompletions(); 109da580634265a0add98d3c16b07103edbe724a5b3Michael Kolb checkHideActionBar(); 11067b8c1b4336a77414c74bce6152495502d4bde04Narayan Kamath } 11167b8c1b4336a77414c74bce6152495502d4bde04Narayan Kamath 11267b8c1b4336a77414c74bce6152495502d4bde04Narayan Kamath @Override 1136670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb public void onDestroy() { 1147cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb hideTitleBar(); 1156670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1166670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1176670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb void stopWebViewScrolling() { 118b9a051bd9ed974c4d3d29a549bb7e00d8a95c33cJohn Reck BrowserWebView web = (BrowserWebView) mUiController.getCurrentWebView(); 1196670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1206670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1210d0245ffd51825f90a9df883667a71e500da03faMichael Kolb @Override 1220d0245ffd51825f90a9df883667a71e500da03faMichael Kolb public boolean onPrepareOptionsMenu(Menu menu) { 1230d0245ffd51825f90a9df883667a71e500da03faMichael Kolb MenuItem bm = menu.findItem(R.id.bookmarks_menu_id); 1240d0245ffd51825f90a9df883667a71e500da03faMichael Kolb if (bm != null) { 1250d0245ffd51825f90a9df883667a71e500da03faMichael Kolb bm.setVisible(false); 1260d0245ffd51825f90a9df883667a71e500da03faMichael Kolb } 1270d0245ffd51825f90a9df883667a71e500da03faMichael Kolb return true; 1280d0245ffd51825f90a9df883667a71e500da03faMichael Kolb } 1290d0245ffd51825f90a9df883667a71e500da03faMichael Kolb 1300d0245ffd51825f90a9df883667a71e500da03faMichael Kolb 1316670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb // WebView callbacks 1326670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1336670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 1346670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb public void addTab(Tab tab) { 1356670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb mTabBar.onNewTab(tab); 1368814d738ad840ea66f0e5a4733f53f2e3bd8d0ebMichael Kolb } 1378814d738ad840ea66f0e5a4733f53f2e3bd8d0ebMichael Kolb 1388814d738ad840ea66f0e5a4733f53f2e3bd8d0ebMichael Kolb protected void onAddTabCompleted(Tab tab) { 139da580634265a0add98d3c16b07103edbe724a5b3Michael Kolb checkHideActionBar(); 1406670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1416670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1426670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 143377ea31324391e7878f6f5b7a991c74988c18403Michael Kolb public void setActiveTab(final Tab tab) { 14446f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb mTitleBar.cancelTitleBarAnimation(true); 14546f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb mTitleBar.setSkipTitleBarAnimations(true); 1465d43ce897758b7cb5deadc1203717b965334784cJohn Reck super.setActiveTab(tab); 147b9a051bd9ed974c4d3d29a549bb7e00d8a95c33cJohn Reck BrowserWebView view = (BrowserWebView) tab.getWebView(); 148376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb // TabControl.setCurrentTab has been called before this, 149376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb // so the tab is guaranteed to have a webview 150376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb if (view == null) { 151376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb Log.e(LOGTAG, "active tab with no webview detected"); 152376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb return; 153376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 1546670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb mTabBar.onSetActiveTab(tab); 155376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb updateLockIconToLatest(tab); 1565d43ce897758b7cb5deadc1203717b965334784cJohn Reck mTitleBar.setSkipTitleBarAnimations(false); 1576670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1586670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1596670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 1606670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb public void updateTabs(List<Tab> tabs) { 1616670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb mTabBar.updateTabs(tabs); 162da580634265a0add98d3c16b07103edbe724a5b3Michael Kolb checkHideActionBar(); 1636670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1646670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1656670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 1666670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb public void removeTab(Tab tab) { 16746f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb mTitleBar.cancelTitleBarAnimation(true); 16846f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb mTitleBar.setSkipTitleBarAnimations(true); 1696670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb super.removeTab(tab); 1706670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb mTabBar.onRemoveTab(tab); 17146f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb mTitleBar.setSkipTitleBarAnimations(false); 1728814d738ad840ea66f0e5a4733f53f2e3bd8d0ebMichael Kolb } 1738814d738ad840ea66f0e5a4733f53f2e3bd8d0ebMichael Kolb 1748814d738ad840ea66f0e5a4733f53f2e3bd8d0ebMichael Kolb protected void onRemoveTabCompleted(Tab tab) { 175da580634265a0add98d3c16b07103edbe724a5b3Michael Kolb checkHideActionBar(); 1766670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1776670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 178376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb int getContentWidth() { 179376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb if (mContentView != null) { 180376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb return mContentView.getWidth(); 1816670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1826670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb return 0; 1836670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1846670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 185dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb @Override 1861f9b3565dbd1911dfe4d9bfd8b833a5ac5f2e0c4Michael Kolb public void editUrl(boolean clearInput, boolean forceIME) { 18746f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb if (mUseQuickControls) { 1880f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mTitleBar.setShowProgressOnly(false); 189d72ea3bbab2a745a901c5bc18247c12fe8cfc0b4Michael Kolb } 1901f9b3565dbd1911dfe4d9bfd8b833a5ac5f2e0c4Michael Kolb super.editUrl(clearInput, forceIME); 191376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 192376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb 1936670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb // action mode callbacks 1946670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1956670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 1966670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb public void onActionModeStarted(ActionMode mode) { 1977cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb if (!mTitleBar.isEditingUrl()) { 198b2e91fdb56c13452c6c5e5fd39ce17e7db323bdcMichael Kolb // hide the title bar when CAB is shown 1997cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb hideTitleBar(); 2006670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 2016670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 2026670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 2036670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 204376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb public void onActionModeFinished(boolean inLoad) { 205da580634265a0add98d3c16b07103edbe724a5b3Michael Kolb checkHideActionBar(); 206376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb if (inLoad) { 207376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb // the titlebar was removed when the CAB was shown 208376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb // if the page is loading, show it again 2091544f3b7494955d8a33b307fb2a96dd1841942c0Michael Kolb if (mUseQuickControls) { 2101544f3b7494955d8a33b307fb2a96dd1841942c0Michael Kolb mTitleBar.setShowProgressOnly(true); 211376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 2127cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb showTitleBar(); 213376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 214376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 215376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb 216376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb @Override 2175a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb protected void updateNavigationState(Tab tab) { 2180f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mNavBar.updateNavigationState(tab); 2195a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb } 2205a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb 2215a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb @Override 22230c714c853a4239e72ab1e238ce2a92472d06ab0John Reck public void setUrlTitle(Tab tab) { 22330c714c853a4239e72ab1e238ce2a92472d06ab0John Reck super.setUrlTitle(tab); 22430c714c853a4239e72ab1e238ce2a92472d06ab0John Reck mTabBar.onUrlAndTitle(tab, tab.getUrl(), tab.getTitle()); 2256670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 2266670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 2276670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb // Set the favicon in the title bar. 2286670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 22930c714c853a4239e72ab1e238ce2a92472d06ab0John Reck public void setFavicon(Tab tab) { 23030c714c853a4239e72ab1e238ce2a92472d06ab0John Reck super.setFavicon(tab); 23130c714c853a4239e72ab1e238ce2a92472d06ab0John Reck mTabBar.onFavicon(tab, tab.getFavicon()); 2326670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 2336670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 234cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb @Override 235d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reck public void onHideCustomView() { 236d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reck super.onHideCustomView(); 237da580634265a0add98d3c16b07103edbe724a5b3Michael Kolb checkHideActionBar(); 238d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reck } 239a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb 240a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb @Override 241a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb public boolean dispatchKey(int code, KeyEvent event) { 242dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb if (mActiveTab != null) { 243dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb WebView web = mActiveTab.getWebView(); 244dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb if (event.getAction() == KeyEvent.ACTION_DOWN) { 245dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb switch (code) { 246dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb case KeyEvent.KEYCODE_TAB: 247dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb case KeyEvent.KEYCODE_DPAD_UP: 248dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb case KeyEvent.KEYCODE_DPAD_LEFT: 249dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb if ((web != null) && web.hasFocus() && !mTitleBar.hasFocus()) { 2501f9b3565dbd1911dfe4d9bfd8b833a5ac5f2e0c4Michael Kolb editUrl(false, false); 251dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb return true; 252dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb } 253dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb } 254dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb boolean ctrl = event.hasModifiers(KeyEvent.META_CTRL_ON); 255dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb if (!ctrl && isTypingKey(event) && !mTitleBar.isEditingUrl()) { 2561f9b3565dbd1911dfe4d9bfd8b833a5ac5f2e0c4Michael Kolb editUrl(true, false); 257dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb return mContentView.dispatchKeyEvent(event); 258dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb } 259dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb } 260a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb } 261a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb return false; 262a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb } 263a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb 264dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb private boolean isTypingKey(KeyEvent evt) { 265dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb return evt.getUnicodeChar() > 0; 266dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb } 267dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb 268dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb TabBar getTabBar() { 269dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb return mTabBar; 270dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb } 271dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb 2721cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck @Override 2731cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck public boolean shouldCaptureThumbnails() { 2741cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck return mUseQuickControls; 2751cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck } 2761cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck 277034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck private Drawable getFaviconBackground() { 278034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck if (mFaviconBackground == null) { 279034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck mFaviconBackground = new PaintDrawable(); 280034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck Resources res = mActivity.getResources(); 281034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck mFaviconBackground.getPaint().setColor( 282034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck res.getColor(R.color.tabFaviconBackground)); 283034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck mFaviconBackground.setCornerRadius( 284034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck res.getDimension(R.dimen.tab_favicon_corner_radius)); 285034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck } 286034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck return mFaviconBackground; 287034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck } 288034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck 289034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck @Override 290034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck public Drawable getFaviconDrawable(Bitmap icon) { 291034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck Drawable[] array = new Drawable[2]; 292034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck array[0] = getFaviconBackground(); 293034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck if (icon == null) { 294034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck array[1] = mGenericFavicon; 295034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck } else { 296034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck array[1] = new BitmapDrawable(mActivity.getResources(), icon); 297034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck } 298034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck LayerDrawable d = new LayerDrawable(array); 299034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck d.setLayerInset(1, 2, 2, 2, 2); 300034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck return d; 301034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck } 302034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck 3036670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb} 304