XLargeUi.java revision 1cf4b79a0020bc18c83ca8bde0e318ecd5252bc2
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; 21ac35bdc798173ca536e57c1e4541cef11d78983aMichael Kolbimport android.os.Bundle; 22ba23870babf7041e72f7d1119ad59d9bb32c6634Michael Kolbimport android.os.Handler; 23376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolbimport android.util.Log; 246670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolbimport android.view.ActionMode; 25376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolbimport android.view.Gravity; 26a418306e08e008da99cef929c48e05d2a101ceafMichael Kolbimport android.view.KeyEvent; 27d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reckimport android.view.View; 28d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reckimport android.webkit.WebChromeClient.CustomViewCallback; 296670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolbimport android.webkit.WebView; 306670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 316670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolbimport java.util.List; 326670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 336670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb/** 346670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * Ui for xlarge screen sizes 356670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb */ 36b14ff2febe4b6a07a73c875858437c89cf43fc72Michael Kolbpublic class XLargeUi extends BaseUi { 376670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 386670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb private static final String LOGTAG = "XLargeUi"; 396670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 40376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb private ActionBar mActionBar; 416670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb private TabBar mTabBar; 426670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 430f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck private NavigationBarTablet mNavBar; 446670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 450241e7556501caae1f57d2bdf3677d7e4a619eb0Michael Kolb private PieControlXLarge mPieControl; 46ba23870babf7041e72f7d1119ad59d9bb32c6634Michael Kolb private Handler mHandler; 47376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb 486670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb /** 496670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * @param browser 506670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb * @param controller 516670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb */ 526670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb public XLargeUi(Activity browser, UiController controller) { 536670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb super(browser, controller); 54ba23870babf7041e72f7d1119ad59d9bb32c6634Michael Kolb mHandler = new Handler(); 550f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mNavBar = (NavigationBarTablet) mTitleBar.getNavigationBar(); 566670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb mTabBar = new TabBar(mActivity, mUiController, this); 57376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mActionBar = mActivity.getActionBar(); 58b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck setupActionBar(); 59b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck setUseQuickControls(BrowserSettings.getInstance().useQuickControls()); 60b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck } 61b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck 62b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck private void setupActionBar() { 63b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 64376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 65376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mActionBar.setCustomView(mTabBar); 66b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck } 67b3417f0a68a1efc64604ea354ae7f856ce79cb16John Reck 682bc8042224be51966d748b870768ec1b376a1621John Reck public void showComboView(ComboViews startWith, Bundle extras) { 692bc8042224be51966d748b870768ec1b376a1621John Reck super.showComboView(startWith, extras); 70ac35bdc798173ca536e57c1e4541cef11d78983aMichael Kolb if (mUseQuickControls) { 71ac35bdc798173ca536e57c1e4541cef11d78983aMichael Kolb mActionBar.show(); 72ac35bdc798173ca536e57c1e4541cef11d78983aMichael Kolb } 73ac35bdc798173ca536e57c1e4541cef11d78983aMichael Kolb } 74ac35bdc798173ca536e57c1e4541cef11d78983aMichael Kolb 75ac35bdc798173ca536e57c1e4541cef11d78983aMichael Kolb @Override 760241e7556501caae1f57d2bdf3677d7e4a619eb0Michael Kolb public void setUseQuickControls(boolean useQuickControls) { 77376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mUseQuickControls = useQuickControls; 787cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb mTitleBar.setUseQuickControls(mUseQuickControls); 79376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb if (useQuickControls) { 80376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb checkTabCount(); 810241e7556501caae1f57d2bdf3677d7e4a619eb0Michael Kolb mPieControl = new PieControlXLarge(mActivity, mUiController, this); 82376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mPieControl.attachToContainer(mContentView); 8346f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb WebView web = getWebView(); 8446f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb if (web != null) { 8546f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb web.setEmbeddedTitleBar(null); 860241e7556501caae1f57d2bdf3677d7e4a619eb0Michael Kolb // don't show url bar on scrolling 870241e7556501caae1f57d2bdf3677d7e4a619eb0Michael Kolb web.setOnTouchListener(null); 880241e7556501caae1f57d2bdf3677d7e4a619eb0Michael Kolb 89376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 90376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } else { 91376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mActivity.getActionBar().show(); 92376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb if (mPieControl != null) { 93376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mPieControl.removeFromContainer(mContentView); 94376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 9546f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb WebView web = getWebView(); 967cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb if (web != null) { 97376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb web.setEmbeddedTitleBar(mTitleBar); 980241e7556501caae1f57d2bdf3677d7e4a619eb0Michael Kolb // show url bar on scrolling 990241e7556501caae1f57d2bdf3677d7e4a619eb0Michael Kolb web.setOnTouchListener(this); 100376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 1018a4c38243de9d19162c883d3b20df65f8bcba81aMichael Kolb setTitleGravity(Gravity.NO_GRAVITY); 102376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 103376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mTabBar.setUseQuickControls(mUseQuickControls); 1041cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck // We need to update the tabs with this change 1051cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck for (Tab t : mTabControl.getTabs()) { 1061cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck t.updateShouldCaptureThumbnails(); 1071cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck } 108376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 109376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb 110376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb private void checkTabCount() { 111376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb if (mUseQuickControls) { 112eb95db48b01b3db935601f25bd1a2358674b76daMichael Kolb mHandler.post(new Runnable() { 113eb95db48b01b3db935601f25bd1a2358674b76daMichael Kolb public void run() { 114eb95db48b01b3db935601f25bd1a2358674b76daMichael Kolb mActionBar.hide(); 115eb95db48b01b3db935601f25bd1a2358674b76daMichael Kolb } 116eb95db48b01b3db935601f25bd1a2358674b76daMichael Kolb }); 117376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 1186670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1196670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1206670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 12167b8c1b4336a77414c74bce6152495502d4bde04Narayan Kamath public void onResume() { 12267b8c1b4336a77414c74bce6152495502d4bde04Narayan Kamath super.onResume(); 12335e9dd6283a2d65687104eb0b3a459c02dcb150bJohn Reck if (!BrowserSettings.getInstance().useInstantSearch()) { 1240f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mNavBar.clearCompletions(); 12567b8c1b4336a77414c74bce6152495502d4bde04Narayan Kamath } 12667b8c1b4336a77414c74bce6152495502d4bde04Narayan Kamath } 12767b8c1b4336a77414c74bce6152495502d4bde04Narayan Kamath 12867b8c1b4336a77414c74bce6152495502d4bde04Narayan Kamath @Override 1296670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb public void onDestroy() { 1307cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb hideTitleBar(); 1316670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1326670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1336670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb void stopWebViewScrolling() { 134b9a051bd9ed974c4d3d29a549bb7e00d8a95c33cJohn Reck BrowserWebView web = (BrowserWebView) mUiController.getCurrentWebView(); 1356670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb if (web != null) { 1366670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb web.stopScroll(); 1376670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1386670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1396670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1406670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb // WebView callbacks 1416670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1426670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 14330c714c853a4239e72ab1e238ce2a92472d06ab0John Reck public void onProgressChanged(Tab tab) { 14430c714c853a4239e72ab1e238ce2a92472d06ab0John Reck int progress = tab.getLoadProgress(); 1456670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb mTabBar.onProgress(tab, progress); 1466670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb if (tab.inForeground()) { 1477cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb mTitleBar.setProgress(progress); 1486670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1496670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1506670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1516670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 1526670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb public void addTab(Tab tab) { 1536670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb mTabBar.onNewTab(tab); 1548814d738ad840ea66f0e5a4733f53f2e3bd8d0ebMichael Kolb } 1558814d738ad840ea66f0e5a4733f53f2e3bd8d0ebMichael Kolb 1568814d738ad840ea66f0e5a4733f53f2e3bd8d0ebMichael Kolb protected void onAddTabCompleted(Tab tab) { 157376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb checkTabCount(); 1586670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1596670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1606670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 161377ea31324391e7878f6f5b7a991c74988c18403Michael Kolb public void setActiveTab(final Tab tab) { 16246f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb mTitleBar.cancelTitleBarAnimation(true); 16346f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb mTitleBar.setSkipTitleBarAnimations(true); 1645d43ce897758b7cb5deadc1203717b965334784cJohn Reck super.setActiveTab(tab); 165b9a051bd9ed974c4d3d29a549bb7e00d8a95c33cJohn Reck BrowserWebView view = (BrowserWebView) tab.getWebView(); 166376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb // TabControl.setCurrentTab has been called before this, 167376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb // so the tab is guaranteed to have a webview 168376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb if (view == null) { 169376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb Log.e(LOGTAG, "active tab with no webview detected"); 170376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb return; 171376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 172376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb // Request focus on the top window. 173376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb if (mUseQuickControls) { 174376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb mPieControl.forceToTop(mContentView); 175376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } else { 176377ea31324391e7878f6f5b7a991c74988c18403Michael Kolb // check if title bar is already attached by animation 1770f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck if (mTitleBar.getParent() == null) { 178377ea31324391e7878f6f5b7a991c74988c18403Michael Kolb view.setEmbeddedTitleBar(mTitleBar); 179377ea31324391e7878f6f5b7a991c74988c18403Michael Kolb } 180376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 1816670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb mTabBar.onSetActiveTab(tab); 182376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb if (tab.isInVoiceSearchMode()) { 18311d1978d8d16004598347abc93918b54a5ef760bMichael Kolb showVoiceTitleBar(tab.getVoiceDisplayTitle(), tab.getVoiceSearchResults()); 184376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } else { 185376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb revertVoiceTitleBar(tab); 186376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 187376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb updateLockIconToLatest(tab); 188376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb tab.getTopWindow().requestFocus(); 1895d43ce897758b7cb5deadc1203717b965334784cJohn Reck mTitleBar.setSkipTitleBarAnimations(false); 1906670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1916670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1926670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 1936670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb public void updateTabs(List<Tab> tabs) { 1946670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb mTabBar.updateTabs(tabs); 195376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb checkTabCount(); 1966670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 1976670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 1986670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 1996670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb public void removeTab(Tab tab) { 20046f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb mTitleBar.cancelTitleBarAnimation(true); 20146f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb mTitleBar.setSkipTitleBarAnimations(true); 2026670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb super.removeTab(tab); 2036670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb mTabBar.onRemoveTab(tab); 20446f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb mTitleBar.setSkipTitleBarAnimations(false); 2058814d738ad840ea66f0e5a4733f53f2e3bd8d0ebMichael Kolb } 2068814d738ad840ea66f0e5a4733f53f2e3bd8d0ebMichael Kolb 2078814d738ad840ea66f0e5a4733f53f2e3bd8d0ebMichael Kolb protected void onRemoveTabCompleted(Tab tab) { 208376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb checkTabCount(); 2096670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 2106670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 211376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb int getContentWidth() { 212376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb if (mContentView != null) { 213376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb return mContentView.getWidth(); 2146670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 2156670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb return 0; 2166670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 2176670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 218dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb @Override 219dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb public void editUrl(boolean clearInput) { 22046f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb if (mUseQuickControls) { 2210f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mTitleBar.setShowProgressOnly(false); 222d72ea3bbab2a745a901c5bc18247c12fe8cfc0b4Michael Kolb } 22346f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb super.editUrl(clearInput); 224376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 225376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb 2267cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb void stopEditingUrl() { 2270f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mTitleBar.getNavigationBar().stopEditingUrl(); 228376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 229376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb 2306670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 2317cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb protected void showTitleBar() { 2327cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb if (canShowTitleBar()) { 23346f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb mTitleBar.show(); 2347cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb } 2356670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 2366670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 2376670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 2387cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb protected void hideTitleBar() { 2397cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb if (isTitleBarShowing()) { 24046f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb mTitleBar.hide(); 2416e8d2e9d32bc03ecd5ee2efffb0df260d10533d4John Reck } 242e5c21d900adadbae92fb395d3dce44a75e90a9e7John Reck } 243e5c21d900adadbae92fb395d3dce44a75e90a9e7John Reck 2446670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 2452a56ecaf153d788a1acebc54b670347a1a58d693Michael Kolb protected void setTitleGravity(int gravity) { 24646f987eca738a36e2c8382aaec6c7ef2ae2482aeMichael Kolb if (!mUseQuickControls) { 2472a56ecaf153d788a1acebc54b670347a1a58d693Michael Kolb super.setTitleGravity(gravity); 2482a56ecaf153d788a1acebc54b670347a1a58d693Michael Kolb } 2492a56ecaf153d788a1acebc54b670347a1a58d693Michael Kolb } 2502a56ecaf153d788a1acebc54b670347a1a58d693Michael Kolb 2516670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb // action mode callbacks 2526670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 2536670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 2546670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb public void onActionModeStarted(ActionMode mode) { 2557cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb if (!mTitleBar.isEditingUrl()) { 2566670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb // hide the fake title bar when CAB is shown 2577cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb hideTitleBar(); 2586670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 2596670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 2606670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 2616670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 262376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb public void onActionModeFinished(boolean inLoad) { 263376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb checkTabCount(); 264376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb if (inLoad) { 265376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb // the titlebar was removed when the CAB was shown 266376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb // if the page is loading, show it again 2671544f3b7494955d8a33b307fb2a96dd1841942c0Michael Kolb if (mUseQuickControls) { 2681544f3b7494955d8a33b307fb2a96dd1841942c0Michael Kolb mTitleBar.setShowProgressOnly(true); 269376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 2707cdc4906fc5852297a9a254c3251ad2f4dead6eeMichael Kolb showTitleBar(); 271376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 272376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb } 273376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb 274376b54116e38b3b94c4d64663d1bff38352b0e59Michael Kolb @Override 2755a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb protected void updateNavigationState(Tab tab) { 2760f602f3933dcd88702fdb514b6611e3066ca7a2bJohn Reck mNavBar.updateNavigationState(tab); 2775a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb } 2785a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb 2795a72f1858c2f73be3558c6cdaa2c84b4c36fa748Michael Kolb @Override 28030c714c853a4239e72ab1e238ce2a92472d06ab0John Reck public void setUrlTitle(Tab tab) { 28130c714c853a4239e72ab1e238ce2a92472d06ab0John Reck super.setUrlTitle(tab); 28230c714c853a4239e72ab1e238ce2a92472d06ab0John Reck mTabBar.onUrlAndTitle(tab, tab.getUrl(), tab.getTitle()); 2836670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 2846670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 2856670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb // Set the favicon in the title bar. 2866670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb @Override 28730c714c853a4239e72ab1e238ce2a92472d06ab0John Reck public void setFavicon(Tab tab) { 28830c714c853a4239e72ab1e238ce2a92472d06ab0John Reck super.setFavicon(tab); 28930c714c853a4239e72ab1e238ce2a92472d06ab0John Reck mTabBar.onFavicon(tab, tab.getFavicon()); 2906670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb } 2916670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb 292cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb @Override 2932d4f1e2553dee6bce5a12162ff6d4459babe2512Derek Sollenberger public void showCustomView(View view, int requestedOrientation, 2942d4f1e2553dee6bce5a12162ff6d4459babe2512Derek Sollenberger CustomViewCallback callback) { 2952d4f1e2553dee6bce5a12162ff6d4459babe2512Derek Sollenberger super.showCustomView(view, requestedOrientation, callback); 296d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reck mActivity.getActionBar().hide(); 297d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reck } 298cfa3af5c59abb38c895416a80ef16da0ec1b5287Michael Kolb 299d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reck @Override 300d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reck public void onHideCustomView() { 301d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reck super.onHideCustomView(); 302d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reck if (mUseQuickControls) { 303d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reck checkTabCount(); 304d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reck } else { 305d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reck mActivity.getActionBar().show(); 306d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reck } 307d73c5a2bd0cee6801dce425c31d0c3e027588bcaJohn Reck } 308a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb 309a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb @Override 310a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb public boolean dispatchKey(int code, KeyEvent event) { 311dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb if (mActiveTab != null) { 312dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb WebView web = mActiveTab.getWebView(); 313dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb if (event.getAction() == KeyEvent.ACTION_DOWN) { 314dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb switch (code) { 315dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb case KeyEvent.KEYCODE_TAB: 316dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb case KeyEvent.KEYCODE_DPAD_UP: 317dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb case KeyEvent.KEYCODE_DPAD_LEFT: 318dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb if ((web != null) && web.hasFocus() && !mTitleBar.hasFocus()) { 319dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb editUrl(false); 320dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb return true; 321dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb } 322dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb } 323dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb boolean ctrl = event.hasModifiers(KeyEvent.META_CTRL_ON); 324dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb if (!ctrl && isTypingKey(event) && !mTitleBar.isEditingUrl()) { 325dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb editUrl(true); 326dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb return mContentView.dispatchKeyEvent(event); 327dfe99a1ad8fa39277b0b8279f42e4380db4bf674Michael Kolb } 328dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb } 329a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb } 330a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb return false; 331a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb } 332a418306e08e008da99cef929c48e05d2a101ceafMichael Kolb 333dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb private boolean isTypingKey(KeyEvent evt) { 334dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb return evt.getUnicodeChar() > 0; 335dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb } 336dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb 337dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb TabBar getTabBar() { 338dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb return mTabBar; 339dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb } 340dc2ee1bfb50b7bec0cf3215e3d298b246dc71101Michael Kolb 3411cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck @Override 3421cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck public boolean shouldCaptureThumbnails() { 3431cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck return mUseQuickControls; 3441cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck } 3451cf4b79a0020bc18c83ca8bde0e318ecd5252bc2John Reck 3466670653d355fea0ae20dc51f6c693f994c4cbb54Michael Kolb} 347