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