diff options
Diffstat (limited to 'src/com/android/swe/browser/XLargeUi.java')
-rw-r--r-- | src/com/android/swe/browser/XLargeUi.java | 307 |
1 files changed, 307 insertions, 0 deletions
diff --git a/src/com/android/swe/browser/XLargeUi.java b/src/com/android/swe/browser/XLargeUi.java new file mode 100644 index 00000000..df7a586e --- /dev/null +++ b/src/com/android/swe/browser/XLargeUi.java @@ -0,0 +1,307 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.browser; + +import android.app.ActionBar; +import android.app.Activity; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.LayerDrawable; +import android.graphics.drawable.PaintDrawable; +import android.os.Bundle; +import android.os.Handler; +import android.util.Log; +import android.view.ActionMode; +import android.view.KeyEvent; +import android.view.Menu; +import android.view.MenuItem; +import android.webkit.WebView; +import android.webkit.WebViewClassic; + +import java.util.List; + +/** + * Ui for xlarge screen sizes + */ +public class XLargeUi extends BaseUi { + + private static final String LOGTAG = "XLargeUi"; + + private PaintDrawable mFaviconBackground; + + private ActionBar mActionBar; + private TabBar mTabBar; + + private NavigationBarTablet mNavBar; + + private Handler mHandler; + + /** + * @param browser + * @param controller + */ + public XLargeUi(Activity browser, UiController controller) { + super(browser, controller); + mHandler = new Handler(); + mNavBar = (NavigationBarTablet) mTitleBar.getNavigationBar(); + mTabBar = new TabBar(mActivity, mUiController, this); + mActionBar = mActivity.getActionBar(); + setupActionBar(); + setUseQuickControls(BrowserSettings.getInstance().useQuickControls()); + } + + private void setupActionBar() { + mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); + mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); + mActionBar.setCustomView(mTabBar); + } + + public void showComboView(ComboViews startWith, Bundle extras) { + super.showComboView(startWith, extras); + if (mUseQuickControls) { + mActionBar.show(); + } + } + + @Override + public void setUseQuickControls(boolean useQuickControls) { + super.setUseQuickControls(useQuickControls); + checkHideActionBar(); + if (!useQuickControls) { + mActionBar.show(); + } + mTabBar.setUseQuickControls(mUseQuickControls); + // We need to update the tabs with this change + for (Tab t : mTabControl.getTabs()) { + t.updateShouldCaptureThumbnails(); + } + } + + private void checkHideActionBar() { + if (mUseQuickControls) { + mHandler.post(new Runnable() { + public void run() { + mActionBar.hide(); + } + }); + } + } + + @Override + public void onResume() { + super.onResume(); + mNavBar.clearCompletions(); + checkHideActionBar(); + } + + @Override + public void onDestroy() { + hideTitleBar(); + } + + void stopWebViewScrolling() { + BrowserWebView web = (BrowserWebView) mUiController.getCurrentWebView(); + if (web != null && BrowserWebView.isClassic()) { + WebViewClassic.fromWebView(web).stopScroll(); + } + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + MenuItem bm = menu.findItem(R.id.bookmarks_menu_id); + if (bm != null) { + bm.setVisible(false); + } + return true; + } + + + // WebView callbacks + + @Override + public void addTab(Tab tab) { + mTabBar.onNewTab(tab); + } + + protected void onAddTabCompleted(Tab tab) { + checkHideActionBar(); + } + + @Override + public void setActiveTab(final Tab tab) { + mTitleBar.cancelTitleBarAnimation(true); + mTitleBar.setSkipTitleBarAnimations(true); + super.setActiveTab(tab); + BrowserWebView view = (BrowserWebView) tab.getWebView(); + // TabControl.setCurrentTab has been called before this, + // so the tab is guaranteed to have a webview + if (view == null) { + Log.e(LOGTAG, "active tab with no webview detected"); + return; + } + mTabBar.onSetActiveTab(tab); + updateLockIconToLatest(tab); + mTitleBar.setSkipTitleBarAnimations(false); + } + + @Override + public void updateTabs(List<Tab> tabs) { + mTabBar.updateTabs(tabs); + checkHideActionBar(); + } + + @Override + public void removeTab(Tab tab) { + mTitleBar.cancelTitleBarAnimation(true); + mTitleBar.setSkipTitleBarAnimations(true); + super.removeTab(tab); + mTabBar.onRemoveTab(tab); + mTitleBar.setSkipTitleBarAnimations(false); + } + + protected void onRemoveTabCompleted(Tab tab) { + checkHideActionBar(); + } + + int getContentWidth() { + if (mContentView != null) { + return mContentView.getWidth(); + } + return 0; + } + + @Override + public void editUrl(boolean clearInput, boolean forceIME) { + if (mUseQuickControls) { + mTitleBar.setShowProgressOnly(false); + } + super.editUrl(clearInput, forceIME); + } + + // action mode callbacks + + @Override + public void onActionModeStarted(ActionMode mode) { + if (!mTitleBar.isEditingUrl()) { + // hide the title bar when CAB is shown + hideTitleBar(); + } + } + + @Override + public void onActionModeFinished(boolean inLoad) { + checkHideActionBar(); + if (inLoad) { + // the titlebar was removed when the CAB was shown + // if the page is loading, show it again + if (mUseQuickControls) { + mTitleBar.setShowProgressOnly(true); + } + showTitleBar(); + } + } + + @Override + protected void updateNavigationState(Tab tab) { + mNavBar.updateNavigationState(tab); + } + + @Override + public void setUrlTitle(Tab tab) { + super.setUrlTitle(tab); + mTabBar.onUrlAndTitle(tab, tab.getUrl(), tab.getTitle()); + } + + // Set the favicon in the title bar. + @Override + public void setFavicon(Tab tab) { + super.setFavicon(tab); + mTabBar.onFavicon(tab, tab.getFavicon()); + } + + @Override + public void onHideCustomView() { + super.onHideCustomView(); + checkHideActionBar(); + } + + @Override + public boolean dispatchKey(int code, KeyEvent event) { + if (mActiveTab != null) { + WebView web = mActiveTab.getWebView(); + if (event.getAction() == KeyEvent.ACTION_DOWN) { + switch (code) { + case KeyEvent.KEYCODE_TAB: + case KeyEvent.KEYCODE_DPAD_UP: + case KeyEvent.KEYCODE_DPAD_LEFT: + if ((web != null) && web.hasFocus() && !mTitleBar.hasFocus()) { + editUrl(false, false); + return true; + } + } + boolean ctrl = event.hasModifiers(KeyEvent.META_CTRL_ON); + if (!ctrl && isTypingKey(event) && !mTitleBar.isEditingUrl()) { + editUrl(true, false); + return mContentView.dispatchKeyEvent(event); + } + } + } + return false; + } + + private boolean isTypingKey(KeyEvent evt) { + return evt.getUnicodeChar() > 0; + } + + TabBar getTabBar() { + return mTabBar; + } + + @Override + public boolean shouldCaptureThumbnails() { + return mUseQuickControls; + } + + private Drawable getFaviconBackground() { + if (mFaviconBackground == null) { + mFaviconBackground = new PaintDrawable(); + Resources res = mActivity.getResources(); + mFaviconBackground.getPaint().setColor( + res.getColor(R.color.tabFaviconBackground)); + mFaviconBackground.setCornerRadius( + res.getDimension(R.dimen.tab_favicon_corner_radius)); + } + return mFaviconBackground; + } + + @Override + public Drawable getFaviconDrawable(Bitmap icon) { + Drawable[] array = new Drawable[2]; + array[0] = getFaviconBackground(); + if (icon == null) { + array[1] = mGenericFavicon; + } else { + array[1] = new BitmapDrawable(mActivity.getResources(), icon); + } + LayerDrawable d = new LayerDrawable(array); + d.setLayerInset(1, 2, 2, 2, 2); + return d; + } + +} |