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; 31376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolbimport android.view.Gravity; 32a418306e08e008da99cef929c48e05d2a101ceafMichael Kolbimport android.view.KeyEvent; 330d0245ffd51825f90a9df883667a71e500da03faMichael Kolbimport android.view.Menu; 340d0245ffd51825f90a9df883667a71e500da03faMichael Kolbimport android.view.MenuItem; 35d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reckimport android.view.View; 3652051eb9ec50f0d7375557996fc3b44c3896e5a1Michael Kolbimport android.view.ViewGroup; 37d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reckimport android.webkit.WebChromeClient.CustomViewCallback; 386670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolbimport android.webkit.WebView; 396670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 406670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolbimport java.util.List; 416670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 426670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb/** 436670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * Ui for xlarge screen sizes 446670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb */ 45b14ff2febe4b6a07a73c875858437c89cf43fc72Michael Kolbpublic class XLargeUi extends BaseUi { 466670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 476670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb private static final String LOGTAG = "XLargeUi"; 486670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 49034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck private PaintDrawable mFaviconBackground; 50034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck 51376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb private ActionBar mActionBar; 526670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb private TabBar mTabBar; 536670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 540f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck private NavigationBarTablet mNavBar; 556670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 560241e7556501caae1f57d2bdf3677d7e4a619eb0Michael Kolb private PieControlXLarge mPieControl; 57ba23870babf7041e72f7d1119ad59d9bb32c6634Michael Kolb private Handler mHandler; 58376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb 596670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb /** 606670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * @param browser 616670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * @param controller 626670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb */ 636670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb public XLargeUi(Activity browser, UiController controller) { 646670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb super(browser, controller); 65ba23870babf7041e72f7d1119ad59d9bb32c6634Michael Kolb mHandler = new Handler(); 660f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mNavBar = (NavigationBarTablet) mTitleBar.getNavigationBar(); 676670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb mTabBar = new TabBar(mActivity, mUiController, this); 68376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mActionBar = mActivity.getActionBar(); 69b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck setupActionBar(); 70b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck setUseQuickControls(BrowserSettings.getInstance().useQuickControls()); 71b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck } 72b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck 73b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck private void setupActionBar() { 74b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 75376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 76376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mActionBar.setCustomView(mTabBar); 77b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck } 78b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck 792bc8042224be51966d748b870768ec1b376a1621John Reck public void showComboView(ComboViews startWith, Bundle extras) { 802bc8042224be51966d748b870768ec1b376a1621John Reck super.showComboView(startWith, extras); 81ac35bdc798173ca536e57c1e4541cef11d78983aMichael Kolb if (mUseQuickControls) { 82ac35bdc798173ca536e57c1e4541cef11d78983aMichael Kolb mActionBar.show(); 83ac35bdc798173ca536e57c1e4541cef11d78983aMichael Kolb } 84ac35bdc798173ca536e57c1e4541cef11d78983aMichael Kolb } 85ac35bdc798173ca536e57c1e4541cef11d78983aMichael Kolb 86ac35bdc798173ca536e57c1e4541cef11d78983aMichael Kolb @Override 870241e7556501caae1f57d2bdf3677d7e4a619eb0Michael Kolb public void setUseQuickControls(boolean useQuickControls) { 88376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mUseQuickControls = useQuickControls; 897cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb mTitleBar.setUseQuickControls(mUseQuickControls); 90376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb if (useQuickControls) { 91376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb checkTabCount(); 920241e7556501caae1f57d2bdf3677d7e4a619eb0Michael Kolb mPieControl = new PieControlXLarge(mActivity, mUiController, this); 93376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mPieControl.attachToContainer(mContentView); 9446f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb WebView web = getWebView(); 9546f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb if (web != null) { 9646f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb web.setEmbeddedTitleBar(null); 970241e7556501caae1f57d2bdf3677d7e4a619eb0Michael Kolb 98376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 99376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } else { 100376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mActivity.getActionBar().show(); 101376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb if (mPieControl != null) { 102376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mPieControl.removeFromContainer(mContentView); 103376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 10446f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb WebView web = getWebView(); 1057cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb if (web != null) { 10652051eb9ec50f0d7375557996fc3b44c3896e5a1Michael Kolb if (mTitleBar.getParent() != null) { 10752051eb9ec50f0d7375557996fc3b44c3896e5a1Michael Kolb ViewGroup p = (ViewGroup) mTitleBar.getParent(); 10852051eb9ec50f0d7375557996fc3b44c3896e5a1Michael Kolb p.removeView(mTitleBar); 10952051eb9ec50f0d7375557996fc3b44c3896e5a1Michael Kolb } 110376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb web.setEmbeddedTitleBar(mTitleBar); 111376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 1128a4c38243de9d19162c883d3b20df65f8bcba81aMichael Kolb setTitleGravity(Gravity.NO_GRAVITY); 113376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 114376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mTabBar.setUseQuickControls(mUseQuickControls); 1151cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck // We need to update the tabs with this change 1161cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck for (Tab t : mTabControl.getTabs()) { 1171cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck t.updateShouldCaptureThumbnails(); 1181cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck } 119718a24d6c9671fe2da4112a3b5f30fd3939b38e8John Reck updateUrlBarAutoShowManagerTarget(); 120376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 121376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb 122376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb private void checkTabCount() { 123376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb if (mUseQuickControls) { 124eb95db48b01b3db935601f25bd1a2358674b76daMichael Kolb mHandler.post(new Runnable() { 125eb95db48b01b3db935601f25bd1a2358674b76daMichael Kolb public void run() { 126eb95db48b01b3db935601f25bd1a2358674b76daMichael Kolb mActionBar.hide(); 127eb95db48b01b3db935601f25bd1a2358674b76daMichael Kolb } 128eb95db48b01b3db935601f25bd1a2358674b76daMichael Kolb }); 129376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 1306670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1316670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1326670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 13367b8c1b4336a77414c74bce6152495502d4bde04Narayan Kamath public void onResume() { 13467b8c1b4336a77414c74bce6152495502d4bde04Narayan Kamath super.onResume(); 135f3174a588cdf63ef59055998c23aad4b36b7856eNarayan Kamath mNavBar.clearCompletions(); 13667b8c1b4336a77414c74bce6152495502d4bde04Narayan Kamath } 13767b8c1b4336a77414c74bce6152495502d4bde04Narayan Kamath 13867b8c1b4336a77414c74bce6152495502d4bde04Narayan Kamath @Override 1396670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb public void onDestroy() { 1407cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb hideTitleBar(); 1416670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1426670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1436670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb void stopWebViewScrolling() { 144b9a051bd9ed974c4d3d29a549bb7e00d8a95c33cJohn Reck BrowserWebView web = (BrowserWebView) mUiController.getCurrentWebView(); 1456670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb if (web != null) { 1466670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb web.stopScroll(); 1476670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1486670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1496670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1500d0245ffd51825f90a9df883667a71e500da03faMichael Kolb @Override 1510d0245ffd51825f90a9df883667a71e500da03faMichael Kolb public boolean onPrepareOptionsMenu(Menu menu) { 1520d0245ffd51825f90a9df883667a71e500da03faMichael Kolb MenuItem bm = menu.findItem(R.id.bookmarks_menu_id); 1530d0245ffd51825f90a9df883667a71e500da03faMichael Kolb if (bm != null) { 1540d0245ffd51825f90a9df883667a71e500da03faMichael Kolb bm.setVisible(false); 1550d0245ffd51825f90a9df883667a71e500da03faMichael Kolb } 1560d0245ffd51825f90a9df883667a71e500da03faMichael Kolb return true; 1570d0245ffd51825f90a9df883667a71e500da03faMichael Kolb } 1580d0245ffd51825f90a9df883667a71e500da03faMichael Kolb 1590d0245ffd51825f90a9df883667a71e500da03faMichael Kolb 1606670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb // WebView callbacks 1616670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1626670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 16330c714c853a4239e72ab1e238ce2a92472d06ab0John Reck public void onProgressChanged(Tab tab) { 16430c714c853a4239e72ab1e238ce2a92472d06ab0John Reck int progress = tab.getLoadProgress(); 1656670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb mTabBar.onProgress(tab, progress); 1666670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb if (tab.inForeground()) { 1677cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb mTitleBar.setProgress(progress); 1686670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1696670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1706670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1716670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 1726670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb public void addTab(Tab tab) { 1736670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb mTabBar.onNewTab(tab); 1748814d738ad840ea66f0e5a4733f53f2e3bd8d0ebMichael Kolb } 1758814d738ad840ea66f0e5a4733f53f2e3bd8d0ebMichael Kolb 1768814d738ad840ea66f0e5a4733f53f2e3bd8d0ebMichael Kolb protected void onAddTabCompleted(Tab tab) { 177376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb checkTabCount(); 1786670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1796670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1806670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 181377ea31324391e7878f6f5b7a991c74988c18403Michael Kolb public void setActiveTab(final Tab tab) { 18246f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb mTitleBar.cancelTitleBarAnimation(true); 18346f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb mTitleBar.setSkipTitleBarAnimations(true); 1845d43ce897758b7cb5deadc1203717b965334784cJohn Reck super.setActiveTab(tab); 185b9a051bd9ed974c4d3d29a549bb7e00d8a95c33cJohn Reck BrowserWebView view = (BrowserWebView) tab.getWebView(); 186376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb // TabControl.setCurrentTab has been called before this, 187376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb // so the tab is guaranteed to have a webview 188376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb if (view == null) { 189376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb Log.e(LOGTAG, "active tab with no webview detected"); 190376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb return; 191376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 192376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb // Request focus on the top window. 193376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb if (mUseQuickControls) { 194376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mPieControl.forceToTop(mContentView); 195376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } else { 196377ea31324391e7878f6f5b7a991c74988c18403Michael Kolb // check if title bar is already attached by animation 1970f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (mTitleBar.getParent() == null) { 198377ea31324391e7878f6f5b7a991c74988c18403Michael Kolb view.setEmbeddedTitleBar(mTitleBar); 199377ea31324391e7878f6f5b7a991c74988c18403Michael Kolb } 200376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 2016670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb mTabBar.onSetActiveTab(tab); 202376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb if (tab.isInVoiceSearchMode()) { 20311d1978d8d16004598347abc93918b54a5ef760bMichael Kolb showVoiceTitleBar(tab.getVoiceDisplayTitle(), tab.getVoiceSearchResults()); 204376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } else { 205376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb revertVoiceTitleBar(tab); 206376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 207376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb updateLockIconToLatest(tab); 208376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb tab.getTopWindow().requestFocus(); 2095d43ce897758b7cb5deadc1203717b965334784cJohn Reck mTitleBar.setSkipTitleBarAnimations(false); 2106670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 2116670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 2126670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 2136670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb public void updateTabs(List<Tab> tabs) { 2146670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb mTabBar.updateTabs(tabs); 215376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb checkTabCount(); 2166670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 2176670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 2186670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 2196670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb public void removeTab(Tab tab) { 22046f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb mTitleBar.cancelTitleBarAnimation(true); 22146f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb mTitleBar.setSkipTitleBarAnimations(true); 2226670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb super.removeTab(tab); 2236670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb mTabBar.onRemoveTab(tab); 22446f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb mTitleBar.setSkipTitleBarAnimations(false); 2258814d738ad840ea66f0e5a4733f53f2e3bd8d0ebMichael Kolb } 2268814d738ad840ea66f0e5a4733f53f2e3bd8d0ebMichael Kolb 2278814d738ad840ea66f0e5a4733f53f2e3bd8d0ebMichael Kolb protected void onRemoveTabCompleted(Tab tab) { 228376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb checkTabCount(); 2296670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 2306670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 231376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb int getContentWidth() { 232376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb if (mContentView != null) { 233376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb return mContentView.getWidth(); 2346670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 2356670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb return 0; 2366670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 2376670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 238dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb @Override 239dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb public void editUrl(boolean clearInput) { 24046f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb if (mUseQuickControls) { 2410f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mTitleBar.setShowProgressOnly(false); 242d72ea3bbab2a745a901c5bc18247c12fe8cfc0b4Michael Kolb } 24346f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb super.editUrl(clearInput); 244376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 245376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb 2467cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb void stopEditingUrl() { 2470f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mTitleBar.getNavigationBar().stopEditingUrl(); 248376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 249376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb 2506670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 2517cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb protected void showTitleBar() { 2527cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb if (canShowTitleBar()) { 25346f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb mTitleBar.show(); 2547cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb } 2556670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 2566670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 2576670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 2587cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb protected void hideTitleBar() { 2597cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb if (isTitleBarShowing()) { 26046f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb mTitleBar.hide(); 2616e8d2e9d32bc03ecd5ee2efffb0df260d10533d4John Reck } 262e5c21d900adadbae92fb395d3dce44a75e90a9e7John Reck } 263e5c21d900adadbae92fb395d3dce44a75e90a9e7John Reck 2646670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 2652a56ecaf153d788a1acebc54b670347a1a58d693Michael Kolb protected void setTitleGravity(int gravity) { 26646f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb if (!mUseQuickControls) { 2672a56ecaf153d788a1acebc54b670347a1a58d693Michael Kolb super.setTitleGravity(gravity); 2682a56ecaf153d788a1acebc54b670347a1a58d693Michael Kolb } 2692a56ecaf153d788a1acebc54b670347a1a58d693Michael Kolb } 2702a56ecaf153d788a1acebc54b670347a1a58d693Michael Kolb 2716670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb // action mode callbacks 2726670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 2736670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 2746670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb public void onActionModeStarted(ActionMode mode) { 2757cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb if (!mTitleBar.isEditingUrl()) { 276b2e91fdb56c13452c6c5e5fd39ce17e7db323bdcMichael Kolb // hide the title bar when CAB is shown 2777cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb hideTitleBar(); 2786670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 2796670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 2806670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 2816670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 282376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb public void onActionModeFinished(boolean inLoad) { 283376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb checkTabCount(); 284376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb if (inLoad) { 285376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb // the titlebar was removed when the CAB was shown 286376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb // if the page is loading, show it again 2871544f3b7494955d8a33b307fb2a96dd1841942c0Michael Kolb if (mUseQuickControls) { 2881544f3b7494955d8a33b307fb2a96dd1841942c0Michael Kolb mTitleBar.setShowProgressOnly(true); 289376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 2907cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb showTitleBar(); 291376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 292376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 293376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb 294376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb @Override 2955a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb protected void updateNavigationState(Tab tab) { 2960f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mNavBar.updateNavigationState(tab); 2975a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb } 2985a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb 2995a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb @Override 30030c714c853a4239e72ab1e238ce2a92472d06ab0John Reck public void setUrlTitle(Tab tab) { 30130c714c853a4239e72ab1e238ce2a92472d06ab0John Reck super.setUrlTitle(tab); 30230c714c853a4239e72ab1e238ce2a92472d06ab0John Reck mTabBar.onUrlAndTitle(tab, tab.getUrl(), tab.getTitle()); 3036670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 3046670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 3056670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb // Set the favicon in the title bar. 3066670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 30730c714c853a4239e72ab1e238ce2a92472d06ab0John Reck public void setFavicon(Tab tab) { 30830c714c853a4239e72ab1e238ce2a92472d06ab0John Reck super.setFavicon(tab); 30930c714c853a4239e72ab1e238ce2a92472d06ab0John Reck mTabBar.onFavicon(tab, tab.getFavicon()); 3106670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 3116670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 312cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb @Override 313d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reck public void onHideCustomView() { 314d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reck super.onHideCustomView(); 315d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reck if (mUseQuickControls) { 316d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reck checkTabCount(); 317d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reck } 318d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reck } 319a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb 320a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb @Override 321a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb public boolean dispatchKey(int code, KeyEvent event) { 322dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb if (mActiveTab != null) { 323dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb WebView web = mActiveTab.getWebView(); 324dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb if (event.getAction() == KeyEvent.ACTION_DOWN) { 325dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb switch (code) { 326dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb case KeyEvent.KEYCODE_TAB: 327dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb case KeyEvent.KEYCODE_DPAD_UP: 328dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb case KeyEvent.KEYCODE_DPAD_LEFT: 329dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb if ((web != null) && web.hasFocus() && !mTitleBar.hasFocus()) { 330dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb editUrl(false); 331dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb return true; 332dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb } 333dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb } 334dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb boolean ctrl = event.hasModifiers(KeyEvent.META_CTRL_ON); 335dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb if (!ctrl && isTypingKey(event) && !mTitleBar.isEditingUrl()) { 336dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb editUrl(true); 337dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb return mContentView.dispatchKeyEvent(event); 338dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb } 339dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb } 340a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb } 341a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb return false; 342a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb } 343a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb 344dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb private boolean isTypingKey(KeyEvent evt) { 345dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb return evt.getUnicodeChar() > 0; 346dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb } 347dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb 348dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb TabBar getTabBar() { 349dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb return mTabBar; 350dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb } 351dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb 3521cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck @Override 3531cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck public boolean shouldCaptureThumbnails() { 3541cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck return mUseQuickControls; 3551cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck } 3561cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck 357034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck private Drawable getFaviconBackground() { 358034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck if (mFaviconBackground == null) { 359034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck mFaviconBackground = new PaintDrawable(); 360034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck Resources res = mActivity.getResources(); 361034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck mFaviconBackground.getPaint().setColor( 362034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck res.getColor(R.color.tabFaviconBackground)); 363034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck mFaviconBackground.setCornerRadius( 364034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck res.getDimension(R.dimen.tab_favicon_corner_radius)); 365034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck } 366034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck return mFaviconBackground; 367034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck } 368034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck 369034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck @Override 370034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck public Drawable getFaviconDrawable(Bitmap icon) { 371034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck Drawable[] array = new Drawable[2]; 372034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck array[0] = getFaviconBackground(); 373034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck if (icon == null) { 374034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck array[1] = mGenericFavicon; 375034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck } else { 376034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck array[1] = new BitmapDrawable(mActivity.getResources(), icon); 377034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck } 378034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck LayerDrawable d = new LayerDrawable(array); 379034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck d.setLayerInset(1, 2, 2, 2, 2); 380034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck return d; 381034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck } 382034637c74e84153bd1f7cdd922daaeb9f6af9b8eJohn Reck 3836670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb} 384