diff options
Diffstat (limited to 'src/com/android/browser/BaseUi.java')
-rw-r--r-- | src/com/android/browser/BaseUi.java | 146 |
1 files changed, 116 insertions, 30 deletions
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java index 4f80e9d..7530732 100644 --- a/src/com/android/browser/BaseUi.java +++ b/src/com/android/browser/BaseUi.java @@ -17,14 +17,20 @@ package com.android.browser; import com.android.browser.Tab.LockIcon; +import com.android.internal.view.menu.MenuBuilder; import android.animation.ObjectAnimator; import android.app.Activity; +import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.Color; +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.text.TextUtils; import android.util.Log; @@ -72,10 +78,11 @@ public abstract class BaseUi implements UI, WebViewFactory { private Drawable mSecLockIcon; private Drawable mMixLockIcon; + protected Drawable mGenericFavicon; private FrameLayout mBrowserFrameLayout; protected FrameLayout mContentView; - private FrameLayout mCustomViewContainer; + protected FrameLayout mCustomViewContainer; private View mCustomView; private WebChromeClient.CustomViewCallback mCustomViewCallback; @@ -86,7 +93,6 @@ public abstract class BaseUi implements UI, WebViewFactory { private Toast mStopToast; - private boolean mTitleShowing; // the default <video> poster private Bitmap mDefaultVideoPoster; @@ -116,7 +122,23 @@ public abstract class BaseUi implements UI, WebViewFactory { mCustomViewContainer = (FrameLayout) mBrowserFrameLayout .findViewById(R.id.fullscreen_custom_content); frameLayout.addView(mBrowserFrameLayout, COVER_SCREEN_PARAMS); - mTitleShowing = false; + setFullscreen(BrowserSettings.getInstance().useFullscreen()); + mGenericFavicon = res.getDrawable( + R.drawable.app_web_browser_sm); + } + + @Override + public WebView createWebView(boolean privateBrowsing) { + // Create a new WebView + BrowserWebView w = new BrowserWebView(mActivity, null, + android.R.attr.webViewStyle, privateBrowsing); + initWebViewSettings(w); + return w; + } + + @Override + public WebView createSubWebView(boolean privateBrowsing) { + return createWebView(privateBrowsing); } /** @@ -129,11 +151,15 @@ public abstract class BaseUi implements UI, WebViewFactory { w.setMapTrackballToArrowKeys(false); // use trackball directly // Enable the built-in zoom w.getSettings().setBuiltInZoomControls(true); + boolean supportsMultiTouch = mActivity.getPackageManager() + .hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH); + w.getSettings().setDisplayZoomControls(!supportsMultiTouch); + w.setExpandedTileBounds(true); // smoother scrolling // Add this WebView to the settings observer list and update the // settings final BrowserSettings s = BrowserSettings.getInstance(); - s.addObserver(w.getSettings()).update(s, null); + s.startManagingSettings(w.getSettings()); } private void cancelStopToast() { @@ -164,8 +190,6 @@ public abstract class BaseUi implements UI, WebViewFactory { public void onConfigurationChanged(Configuration config) { } - public abstract void editUrl(boolean clearInput); - // key handling @Override @@ -212,7 +236,7 @@ public abstract class BaseUi implements UI, WebViewFactory { @Override public boolean needsRestoreAllTabs() { - return false; + return true; } @Override @@ -300,8 +324,6 @@ public abstract class BaseUi implements UI, WebViewFactory { Log.w(LOGTAG, "mContainer is already attached to content in" + " attachTabToContentView!"); } - mainView.setNextFocusUpId(R.id.url_focused); - mainView.setNextFocusDownId(R.id.url_focused); mUiController.attachSubWindow(tab); } @@ -395,24 +417,43 @@ public abstract class BaseUi implements UI, WebViewFactory { mContentView.addView(container, COVER_SCREEN_PARAMS); } + protected void refreshWebView() { + WebView web = getWebView(); + if (web != null) { + web.invalidate(); + } + } + + public void editUrl(boolean clearInput) { + if (mUiController.isInCustomActionMode()) { + mUiController.endActionMode(); + } + showTitleBar(); + getTitleBar().startEditingUrl(clearInput); + } + boolean canShowTitleBar() { return !isTitleBarShowing() && !isActivityPaused() && (getActiveTab() != null) - && (getActiveTab().getWebView() != null) + && (getWebView() != null) && !mUiController.isInCustomActionMode(); } void showTitleBar() { - mTitleShowing = true; + if (canShowTitleBar()) { + getTitleBar().show(); + } } protected void hideTitleBar() { - mTitleShowing = false; + if (getTitleBar().isShowing()) { + getTitleBar().hide(); + } } protected boolean isTitleBarShowing() { - return mTitleShowing; + return getTitleBar().isShowing(); } protected abstract TitleBarBase getTitleBar(); @@ -421,24 +462,28 @@ public abstract class BaseUi implements UI, WebViewFactory { WebView web = getWebView(); if (web != null) { web.setTitleBarGravity(gravity); - web.invalidate(); } } @Override - public void showVoiceTitleBar(String title) { - getTitleBar().setInVoiceMode(true); + public void showVoiceTitleBar(String title, List<String> results) { + getTitleBar().setInVoiceMode(true, results); getTitleBar().setDisplayTitle(title); } @Override public void revertVoiceTitleBar(Tab tab) { - getTitleBar().setInVoiceMode(false); + getTitleBar().setInVoiceMode(false, null); String url = tab.getUrl(); getTitleBar().setDisplayTitle(url); } @Override + public void registerDropdownChangeListener(DropdownChangeListener d) { + getTitleBar().registerDropdownChangeListener(d); + } + + @Override public void showComboView(boolean startWithHistory, Bundle extras) { if (mComboView != null) { return; @@ -452,8 +497,9 @@ public abstract class BaseUi implements UI, WebViewFactory { FrameLayout wrapper = (FrameLayout) mContentView.findViewById(R.id.webview_wrapper); wrapper.setVisibility(View.GONE); - hideTitleBar(); + getTitleBar().stopEditingUrl(); dismissIME(); + hideTitleBar(); if (mActiveTab != null) { WebView web = mActiveTab.getWebView(); mActiveTab.putInBackground(); @@ -559,7 +605,9 @@ public abstract class BaseUi implements UI, WebViewFactory { protected void updateNavigationState(Tab tab) { } - protected void updateAutoLogin(Tab tab, boolean animate) {} + protected void updateAutoLogin(Tab tab, boolean animate) { + getTitleBar().updateAutoLogin(tab, animate); + } /** * Update the lock icon to correspond to our latest state. @@ -605,11 +653,6 @@ public abstract class BaseUi implements UI, WebViewFactory { @Override public void onActionModeFinished(boolean inLoad) { - if (inLoad) { - // the titlebar was removed when the CAB was shown - // if the page is loading, show it again - showTitleBar(); - } } // active tabs page @@ -718,16 +761,59 @@ public abstract class BaseUi implements UI, WebViewFactory { warning.show(); } - @Override - public void registerDropdownChangeListener(DropdownChangeListener d) { + protected void captureTab(final Tab tab) { + captureTab(tab, + (int) mActivity.getResources() + .getDimension(R.dimen.qc_thumb_width), + (int) mActivity.getResources() + .getDimension(R.dimen.qc_thumb_height)); + } + + protected void captureTab(final Tab tab, int width, int height) { + if ((tab == null) || (tab.getWebView() == null)) return; + Bitmap sshot = Controller.createScreenshot(tab, width, height); + tab.setScreenshot(sshot); } protected WebView getWebView() { - Tab tab = getActiveTab(); - if (tab != null) { - return tab.getWebView(); + if (mActiveTab != null) { + return mActiveTab.getWebView(); + } else { + return null; + } + } + + protected Menu getMenu() { + MenuBuilder menu = new MenuBuilder(mActivity); + mActivity.getMenuInflater().inflate(R.menu.browser, menu); + return menu; + } + + public void setFullscreen(boolean enabled) { + if (enabled) { + mActivity.getWindow().setFlags( + WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + } else { + mActivity.getWindow().clearFlags( + WindowManager.LayoutParams.FLAG_FULLSCREEN); + } + } + + protected Drawable getFaviconDrawable(Bitmap icon) { + Drawable[] array = new Drawable[3]; + array[0] = new PaintDrawable(Color.BLACK); + PaintDrawable p = new PaintDrawable(Color.WHITE); + array[1] = p; + if (icon == null) { + array[2] = mGenericFavicon; + } else { + array[2] = new BitmapDrawable(icon); } - return null; + LayerDrawable d = new LayerDrawable(array); + d.setLayerInset(1, 1, 1, 1, 1); + d.setLayerInset(2, 2, 2, 2, 2); + return d; } } |