diff options
author | Leon Scroggins <scroggo@google.com> | 2010-05-26 10:25:01 -0400 |
---|---|---|
committer | Leon Scroggins <scroggo@google.com> | 2010-06-16 12:51:50 -0400 |
commit | 571b3762a5eb9e492283e0a1e437edd209fdc0de (patch) | |
tree | 63d46b30d4587db0b204dc7fb10fde7679e01488 /src/com/android | |
parent | 11bd45d76c27dd02646669ca117e9b3ca7afe244 (diff) | |
download | packages_apps_Browser-571b3762a5eb9e492283e0a1e437edd209fdc0de.zip packages_apps_Browser-571b3762a5eb9e492283e0a1e437edd209fdc0de.tar.gz packages_apps_Browser-571b3762a5eb9e492283e0a1e437edd209fdc0de.tar.bz2 |
Initial work on new browser bar
Bug 2712871
Change-Id: Id1c76b05a5f126a4a68369a32dda8975fc1d2e6b
Diffstat (limited to 'src/com/android')
-rw-r--r-- | src/com/android/browser/BrowserActivity.java | 27 | ||||
-rw-r--r-- | src/com/android/browser/TitleBar.java | 60 | ||||
-rw-r--r-- | src/com/android/browser/TitleBarBase.java | 78 | ||||
-rw-r--r-- | src/com/android/browser/TitleBarXLarge.java | 170 |
4 files changed, 268 insertions, 67 deletions
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java index b2d7d82..e6982c9 100644 --- a/src/com/android/browser/BrowserActivity.java +++ b/src/com/android/browser/BrowserActivity.java @@ -220,17 +220,18 @@ public class BrowserActivity extends Activity mCustomViewContainer = (FrameLayout) mBrowserFrameLayout .findViewById(R.id.fullscreen_custom_content); frameLayout.addView(mBrowserFrameLayout, COVER_SCREEN_PARAMS); - mTitleBar = new TitleBar(this); mXLargeScreenSize = (getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE; if (mXLargeScreenSize) { + mTitleBar = new TitleBarXLarge(this); LinearLayout layout = (LinearLayout) mBrowserFrameLayout. findViewById(R.id.vertical_layout); layout.addView(mTitleBar, 0, new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); } else { + mTitleBar = new TitleBar(this); // mTitleBar will be always be shown in the fully loaded mode on // phone mTitleBar.setProgress(100); @@ -1343,14 +1344,7 @@ public class BrowserActivity extends Activity break; case R.id.add_bookmark_menu_id: - Intent i = new Intent(BrowserActivity.this, - AddBookmarkPage.class); - WebView w = getTopWindow(); - i.putExtra("url", w.getUrl()); - i.putExtra("title", w.getTitle()); - i.putExtra("touch_icon_url", w.getTouchIconUrl()); - i.putExtra("thumbnail", createScreenshot(w)); - startActivity(i); + bookmarkCurrentPage(); break; case R.id.stop_reload_menu_id: @@ -1490,6 +1484,17 @@ public class BrowserActivity extends Activity return true; } + /* package */ void bookmarkCurrentPage() { + Intent i = new Intent(BrowserActivity.this, + AddBookmarkPage.class); + WebView w = getTopWindow(); + i.putExtra("url", w.getUrl()); + i.putExtra("title", w.getTitle()); + i.putExtra("touch_icon_url", w.getTouchIconUrl()); + i.putExtra("thumbnail", createScreenshot(w)); + startActivity(i); + } + /* * Remove the FindDialog. */ @@ -1588,7 +1593,7 @@ public class BrowserActivity extends Activity @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { - if (v instanceof TitleBar) { + if (v instanceof TitleBarBase) { return; } WebView webview = (WebView) v; @@ -4029,7 +4034,7 @@ public class BrowserActivity extends Activity private Toast mStopToast; - private TitleBar mTitleBar; + private TitleBarBase mTitleBar; private LinearLayout mErrorConsoleContainer = null; private boolean mShouldShowErrorConsole = false; diff --git a/src/com/android/browser/TitleBar.java b/src/com/android/browser/TitleBar.java index dc4979b..4e76334 100644 --- a/src/com/android/browser/TitleBar.java +++ b/src/com/android/browser/TitleBar.java @@ -21,14 +21,8 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.res.Resources; -import android.graphics.Bitmap; -import android.graphics.Color; -import android.graphics.Rect; import android.graphics.drawable.Animatable; -import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; -import android.graphics.drawable.LayerDrawable; -import android.graphics.drawable.PaintDrawable; import android.os.Handler; import android.os.Message; import android.speech.RecognizerIntent; @@ -45,7 +39,6 @@ import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; import android.widget.ImageView; -import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; @@ -55,21 +48,16 @@ import com.android.common.speech.LoggingEvents; * This class represents a title bar for a particular "tab" or "window" in the * browser. */ -public class TitleBar extends LinearLayout { +public class TitleBar extends TitleBarBase { private TextView mTitle; - private Drawable mCloseDrawable; private ImageView mRtButton; private Drawable mCircularProgress; private ProgressBar mHorizontalProgress; - private ImageView mFavicon; - private ImageView mLockIcon; private ImageView mStopButton; private Drawable mBookmarkDrawable; private Drawable mVoiceDrawable; private boolean mInLoad; private BrowserActivity mBrowserActivity; - private Drawable mGenericFavicon; - private int mIconDimension; private View mTitleBg; private MyHandler mHandler; private Intent mVoiceSearchIntent; @@ -84,7 +72,7 @@ public class TitleBar extends LinearLayout { private static int LONG_PRESS = 1; public TitleBar(BrowserActivity context) { - super(context, null); + super(context); mHandler = new MyHandler(); LayoutInflater factory = LayoutInflater.from(context); factory.inflate(R.layout.title_bar, this); @@ -107,13 +95,11 @@ public class TitleBar extends LinearLayout { TypedValue.COMPLEX_UNIT_DIP, 8f, metrics); mRightMargin = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 6f, metrics); - mIconDimension = (int) TypedValue.applyDimension( + int iconDimension = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 20f, metrics); - mCircularProgress.setBounds(0, 0, mIconDimension, mIconDimension); + mCircularProgress.setBounds(0, 0, iconDimension, iconDimension); mHorizontalProgress = (ProgressBar) findViewById( R.id.progress_horizontal); - mGenericFavicon = context.getResources().getDrawable( - R.drawable.app_web_browser_sm); mVoiceSearchIntent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH); mVoiceSearchIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH); @@ -248,25 +234,6 @@ public class TitleBar extends LinearLayout { } /** - * Set a new Bitmap for the Favicon. - */ - /* package */ void setFavicon(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); - } - LayerDrawable d = new LayerDrawable(array); - d.setLayerInset(1, 1, 1, 1, 1); - d.setLayerInset(2, 2, 2, 2, 2); - mFavicon.setImageDrawable(d); - } - - /** * Change the TitleBar to or from voice mode. If there is no package to * handle voice search, the TitleBar cannot be set to voice mode. */ @@ -302,18 +269,6 @@ public class TitleBar extends LinearLayout { } /** - * Set the Drawable for the lock icon, or null to hide it. - */ - /* package */ void setLock(Drawable d) { - if (null == d) { - mLockIcon.setVisibility(View.GONE); - } else { - mLockIcon.setImageDrawable(d); - mLockIcon.setVisibility(View.VISIBLE); - } - } - - /** * Update the progress, from 0 to 100. */ /* package */ void setProgress(int newProgress) { @@ -374,11 +329,4 @@ public class TitleBar extends LinearLayout { } } } - - /* package */ void setToTabPicker() { - mTitle.setText(R.string.tab_picker_title); - setFavicon(null); - setLock(null); - mHorizontalProgress.setVisibility(View.GONE); - } } diff --git a/src/com/android/browser/TitleBarBase.java b/src/com/android/browser/TitleBarBase.java new file mode 100644 index 0000000..3d234e8 --- /dev/null +++ b/src/com/android/browser/TitleBarBase.java @@ -0,0 +1,78 @@ +/* + * 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.content.Context; +import android.graphics.Bitmap; +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.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; + +/** + * Base class for a title bar used by the browser. + */ +public class TitleBarBase extends LinearLayout { + // These need to be set by the subclass. + protected ImageView mFavicon; + protected ImageView mLockIcon; + + private Drawable mGenericFavicon; + + public TitleBarBase(Context context) { + super(context, null); + mGenericFavicon = context.getResources().getDrawable( + R.drawable.app_web_browser_sm); + } + + /* package */ void setProgress(int newProgress) {} + /* package */ void setDisplayTitle(String title) {} + + /* package */ void setLock(Drawable d) { + assert mLockIcon != null; + if (null == d) { + mLockIcon.setVisibility(View.GONE); + } else { + mLockIcon.setImageDrawable(d); + mLockIcon.setVisibility(View.VISIBLE); + } + } + + /* package */ void setFavicon(Bitmap icon) { + assert mFavicon != null; + 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); + } + LayerDrawable d = new LayerDrawable(array); + d.setLayerInset(1, 1, 1, 1, 1); + d.setLayerInset(2, 2, 2, 2, 2); + mFavicon.setImageDrawable(d); + } + + /* package */ void setInVoiceMode(boolean inVoiceMode) {} + +} diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/TitleBarXLarge.java new file mode 100644 index 0000000..5296ed1 --- /dev/null +++ b/src/com/android/browser/TitleBarXLarge.java @@ -0,0 +1,170 @@ +/* + * 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.content.Context; +import android.content.res.Resources; +import android.graphics.drawable.Animatable; +import android.graphics.drawable.Drawable; +import android.util.DisplayMetrics; +import android.util.TypedValue; +import android.view.ContextMenu; +import android.view.LayoutInflater; +import android.view.MenuInflater; +import android.view.View; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; + +import com.android.common.speech.LoggingEvents; + +/** + * This class represents a title bar for a particular "tab" or "window" in the + * browser. + */ +public class TitleBarXLarge extends TitleBarBase { + private Drawable mCircularProgress; + private ProgressBar mHorizontalProgress; + private Drawable mStopDrawable; + private Drawable mReloadDrawable; + private boolean mInLoad; + private BrowserActivity mBrowserActivity; + + private final View mBackButton; + private final View mForwardButton; + private final View mStar; + private final View mMenu; + private final ImageView mStopButton; + private final TextView mTitle; + private final View mAllButton; + + public TitleBarXLarge(BrowserActivity context) { + super(context); + Resources resources = context.getResources(); + LayoutInflater factory = LayoutInflater.from(context); + factory.inflate(R.layout.title_bar_xlarge, this); + mBrowserActivity = context; + + mTitle = (TextView) findViewById(R.id.title); + mTitle.setCompoundDrawablePadding(5); + mTitle.setLongClickable(true); + + mLockIcon = (ImageView) findViewById(R.id.lock); + mFavicon = (ImageView) findViewById(R.id.favicon); + mStopButton = (ImageView) findViewById(R.id.stop); + mStopDrawable = mStopButton.getDrawable(); + mReloadDrawable = resources.getDrawable(R.drawable.ic_reload); + + mAllButton = (ImageView) findViewById(R.id.all_btn); + mCircularProgress = (Drawable) resources.getDrawable( + com.android.internal.R.drawable.search_spinner); + DisplayMetrics metrics = resources.getDisplayMetrics(); + int iconDimension = (int) TypedValue.applyDimension( + TypedValue.COMPLEX_UNIT_DIP, 20f, metrics); + mCircularProgress.setBounds(0, 0, iconDimension, iconDimension); + mHorizontalProgress = (ProgressBar) findViewById( + R.id.progress_horizontal); + + // FIXME: Change enabled states based on whether you can go + // back/forward. Probably should be done inside onPageStarted. + mBackButton = findViewById(R.id.back); + mForwardButton = findViewById(R.id.forward); + mStar = findViewById(R.id.star); + mMenu = findViewById(R.id.menu); + View.OnClickListener listener = new View.OnClickListener() { + public void onClick(View v) { + if (mBackButton == v) { + mBrowserActivity.getTopWindow().goBack(); + } else if (mForwardButton == v) { + mBrowserActivity.getTopWindow().goForward(); + } else if (mStar == v) { + // FIXME: Show a menu with option to bookmark or + // save to home page + mBrowserActivity.bookmarkCurrentPage(); + } else if (mMenu == v) { + mBrowserActivity.openOptionsMenu(); + } else if (mStopButton == v) { + if (mInLoad) { + mBrowserActivity.stopLoading(); + } else { + mBrowserActivity.getTopWindow().reload(); + } + } else if (mTitle == v) { + mBrowserActivity.editUrl(); + } else if (mAllButton == v) { + // FIXME: Show the new bookmarks/windows view. + mBrowserActivity.bookmarksOrHistoryPicker(false); + } + } + }; + mBackButton.setOnClickListener(listener); + mForwardButton.setOnClickListener(listener); + mStar.setOnClickListener(listener); + mStopButton.setOnClickListener(listener); + mTitle.setOnClickListener(listener); + mAllButton.setOnClickListener(listener); + mMenu.setOnClickListener(listener); + } + + @Override + public void createContextMenu(ContextMenu menu) { + MenuInflater inflater = mBrowserActivity.getMenuInflater(); + inflater.inflate(R.menu.title_context, menu); + mBrowserActivity.onCreateContextMenu(menu, this, null); + } + + /** + * Update the progress, from 0 to 100. + */ + /* package */ void setProgress(int newProgress) { + if (newProgress >= mHorizontalProgress.getMax()) { + mTitle.setCompoundDrawables(null, null, null, null); + ((Animatable) mCircularProgress).stop(); + mHorizontalProgress.setVisibility(View.GONE); + mInLoad = false; + mStopButton.setImageDrawable(mReloadDrawable); + } else { + mHorizontalProgress.setProgress(newProgress); + if (!mInLoad && getWindowToken() != null) { + // checking the window token lets us be sure that we + // are attached to a window before starting the animation, + // preventing a potential race condition + // (fix for bug http://b/2115736) + mTitle.setCompoundDrawables(null, null, mCircularProgress, + null); + ((Animatable) mCircularProgress).start(); + mHorizontalProgress.setVisibility(View.VISIBLE); + mInLoad = true; + mStopButton.setImageDrawable(mStopDrawable); + } + } + } + + /** + * Update the text displayed in the title bar. + * @param title String to display. If null, the loading string will be + * shown. + */ + /* package */ void setDisplayTitle(String title) { + if (title == null) { + mTitle.setText(R.string.title_bar_loading); + } else { + mTitle.setText(title); + } + } + +} |