diff options
-rw-r--r-- | res/menu/browser.xml | 72 | ||||
-rw-r--r-- | res/values-xlarge/dimensions.xml | 8 | ||||
-rw-r--r-- | res/values/dimensions.xml | 12 | ||||
-rw-r--r-- | res/xml/lab_preferences.xml | 5 | ||||
-rw-r--r-- | src/com/android/browser/BaseUi.java | 23 | ||||
-rw-r--r-- | src/com/android/browser/PhoneUi.java | 119 | ||||
-rw-r--r-- | src/com/android/browser/PieControl.java | 4 | ||||
-rw-r--r-- | src/com/android/browser/TitleBarBase.java | 12 | ||||
-rw-r--r-- | src/com/android/browser/TitleBarPhone.java | 50 | ||||
-rw-r--r-- | src/com/android/browser/TitleBarXLarge.java | 4 | ||||
-rw-r--r-- | src/com/android/browser/XLargeUi.java | 9 |
11 files changed, 244 insertions, 74 deletions
diff --git a/res/menu/browser.xml b/res/menu/browser.xml index abe3716..d9e884b 100644 --- a/res/menu/browser.xml +++ b/res/menu/browser.xml @@ -15,55 +15,73 @@ --> <menu xmlns:android="http://schemas.android.com/apk/res/android"> - <group android:id="@+id/MAIN_MENU"> - <item android:id="@+id/new_tab_menu_id" - android:title="@string/new_tab" - android:icon="@drawable/ic_menu_new_window" - android:alphabeticShortcut="n" /> - <item android:id="@+id/bookmarks_menu_id" - android:title="@string/bookmarks" - android:alphabeticShortcut="b" - android:icon="@drawable/ic_bookmarks_holo_dark" /> - <item android:id="@+id/active_tabs_menu_id" - android:title="@string/active_tabs" - android:icon="@drawable/ic_windows_holo_dark" - android:alphabeticShortcut="t" /> - <item android:id="@+id/stop_reload_menu_id" - android:alphabeticShortcut="r" /> - <item android:id="@+id/forward_menu_id" - android:title="@string/forward" - android:icon="@*android:drawable/ic_menu_forward" /> - <item android:id="@+id/add_bookmark_menu_id" + <group + android:id="@+id/MAIN_MENU"> + <group + android:id="@+id/NAV_MENU"> + <item + android:id="@+id/new_tab_menu_id" + android:title="@string/new_tab" + android:icon="@drawable/ic_menu_new_window" + android:alphabeticShortcut="n" /> + <item + android:id="@+id/bookmarks_menu_id" + android:title="@string/bookmarks" + android:alphabeticShortcut="b" + android:icon="@drawable/ic_bookmarks_holo_dark" /> + <item + android:id="@+id/active_tabs_menu_id" + android:title="@string/active_tabs" + android:icon="@drawable/ic_windows_holo_dark" + android:alphabeticShortcut="t" /> + <item + android:id="@+id/stop_reload_menu_id" + android:alphabeticShortcut="r" /> + <item + android:id="@+id/forward_menu_id" + android:title="@string/forward" + android:icon="@*android:drawable/ic_menu_forward" /> + </group> + <item + android:id="@+id/add_bookmark_menu_id" android:title="@string/save_to_bookmarks" android:icon="@drawable/ic_bookmark_on_holo_dark" android:alphabeticShortcut="d" /> - <item android:id="@+id/find_menu_id" + <item + android:id="@+id/find_menu_id" android:title="@*android:string/find_on_page" android:icon="@*android:drawable/ic_menu_find" android:alphabeticShortcut="f" /> - <item android:id="@+id/share_page_menu_id" + <item + android:id="@+id/share_page_menu_id" android:title="@string/share_page" android:icon="@drawable/ic_share_holo_dark" android:alphabeticShortcut="s" /> - <item android:id="@+id/save_webarchive_menu_id" + <item + android:id="@+id/save_webarchive_menu_id" android:title="@string/menu_save_webarchive" /> - <item android:id="@+id/page_info_menu_id" + <item + android:id="@+id/page_info_menu_id" android:title="@string/page_info" android:icon="@drawable/ic_pageinfo_holo_dark" android:alphabeticShortcut="g" /> - <item android:id="@+id/view_downloads_menu_id" + <item + android:id="@+id/view_downloads_menu_id" android:title="@string/menu_view_download" android:icon="@drawable/ic_downloads_holo_dark" android:alphabeticShortcut="j" /> - <item android:id="@+id/preferences_menu_id" + <item + android:id="@+id/preferences_menu_id" android:title="@string/menu_preferences" android:icon="@drawable/ic_settings_holo_dark" android:alphabeticShortcut="p" /> <!-- followings are debug only --> - <item android:id="@+id/dump_nav_menu_id" + <item + android:id="@+id/dump_nav_menu_id" android:title="@string/dump_nav" android:visible="false" /> - <item android:id="@+id/dump_counters_menu_id" + <item + android:id="@+id/dump_counters_menu_id" android:title="@string/dump_counters" android:visible="false" /> </group> diff --git a/res/values-xlarge/dimensions.xml b/res/values-xlarge/dimensions.xml index 2549818..eae9b0e 100644 --- a/res/values-xlarge/dimensions.xml +++ b/res/values-xlarge/dimensions.xml @@ -27,4 +27,12 @@ <dimen name="combo_paddingTop">50dip</dimen> <dimen name="combo_paddingLeftRight">134dip</dimen> <dimen name="combo_horizontalSpacing">20dip</dimen> + <dimen name="qc_radius_start">50dip</dimen> + <dimen name="qc_radius_increment">70dip</dimen> + <dimen name="qc_slop">15dip</dimen> + <dimen name="qc_touch_offset">15dip</dimen> + <dimen name="qc_tab_title_height">30dip</dimen> + <dimen name="qc_thumb_width">240dip</dimen> + <dimen name="qc_thumb_height">160dip</dimen> + <dimen name="qc_item_size">48dip</dimen> </resources> diff --git a/res/values/dimensions.xml b/res/values/dimensions.xml index 2f1a91e..38a7802 100644 --- a/res/values/dimensions.xml +++ b/res/values/dimensions.xml @@ -30,14 +30,14 @@ <dimen name="widgetItemMinHeight">48dip</dimen> <dimen name="favicon_size">16dip</dimen> <dimen name="favicon_padded_size">20dip</dimen> - <dimen name="qc_radius_start">50dip</dimen> - <dimen name="qc_radius_increment">70dip</dimen> - <dimen name="qc_slop">15dip</dimen> + <dimen name="qc_radius_start">30dip</dimen> + <dimen name="qc_radius_increment">60dip</dimen> + <dimen name="qc_slop">10dip</dimen> <dimen name="qc_touch_offset">15dip</dimen> <dimen name="qc_tab_title_height">30dip</dimen> - <dimen name="qc_thumb_width">240dip</dimen> - <dimen name="qc_thumb_height">160dip</dimen> - <dimen name="qc_item_size">48dip</dimen> + <dimen name="qc_thumb_width">160dip</dimen> + <dimen name="qc_thumb_height">120dip</dimen> + <dimen name="qc_item_size">40dip</dimen> <dimen name="bookmark_widget_thumb_size">32dip</dimen> <dimen name="bookmark_widget_favicon_size">26dip</dimen> <!-- For the most visited page (we use px as these are adjusted by the browser) --> diff --git a/res/xml/lab_preferences.xml b/res/xml/lab_preferences.xml index 3a384f1..b33052f 100644 --- a/res/xml/lab_preferences.xml +++ b/res/xml/lab_preferences.xml @@ -17,6 +17,11 @@ <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <CheckBoxPreference + android:key="enable_quick_controls" + android:defaultValue="false" + android:title="@string/pref_lab_quick_controls" + android:summary="@string/pref_lab_quick_controls_summary" /> + <CheckBoxPreference android:key="use_most_visited_homepage" android:defaultValue="false" android:title="@string/pref_lab_most_visited_homepage" diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java index c3549b3..c00e6fc 100644 --- a/src/com/android/browser/BaseUi.java +++ b/src/com/android/browser/BaseUi.java @@ -17,10 +17,7 @@ package com.android.browser; import com.android.browser.Tab.LockIcon; -import com.android.browser.UI.DropdownChangeListener; -import android.animation.Animator; -import android.animation.Animator.AnimatorListener; import android.animation.ObjectAnimator; import android.app.Activity; import android.content.pm.PackageManager; @@ -42,7 +39,6 @@ import android.view.ViewGroup.LayoutParams; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.webkit.WebChromeClient; -import android.webkit.WebSettings.ZoomDensity; import android.webkit.WebView; import android.widget.FrameLayout; import android.widget.ImageButton; @@ -748,4 +744,23 @@ public abstract class BaseUi implements UI, WebViewFactory { warning.show(); } + 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); + } + + void showTitleBarAndEdit() { + showTitleBar(); + getTitleBar().startEditingUrl(false); + } + } diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java index efd6c43..9cc5a2f 100644 --- a/src/com/android/browser/PhoneUi.java +++ b/src/com/android/browser/PhoneUi.java @@ -18,12 +18,10 @@ package com.android.browser; import android.app.Activity; import android.content.Context; -import android.graphics.Bitmap; import android.graphics.PixelFormat; import android.os.Handler; import android.util.Log; import android.view.ActionMode; -import android.view.Display; import android.view.Gravity; import android.view.KeyEvent; import android.view.Menu; @@ -31,6 +29,7 @@ import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.webkit.WebView; +import android.widget.FrameLayout; /** * Ui for regular phone screen sizes @@ -42,6 +41,8 @@ public class PhoneUi extends BaseUi { private TitleBarPhone mTitleBar; private ActiveTabsPage mActiveTabsPage; private TouchProxy mTitleOverlay; + private boolean mUseQuickControls; + private PieControl mPieControl; boolean mExtendedMenuOpen; boolean mOptionsMenuOpen; @@ -57,6 +58,7 @@ public class PhoneUi extends BaseUi { // phone mTitleBar.setProgress(100); mActivity.getActionBar().hide(); + setUseQuickControls(BrowserSettings.getInstance().useQuickControls()); } @Override @@ -102,6 +104,7 @@ public class PhoneUi extends BaseUi { @Override public void onProgressChanged(Tab tab) { + if (mUseQuickControls) return; if (tab.inForeground()) { int progress = tab.getLoadProgress(); mTitleBar.setProgress(progress); @@ -118,42 +121,48 @@ public class PhoneUi extends BaseUi { } @Override - public void setActiveTab(Tab tab) { + public void setActiveTab(final Tab tab) { captureTab(mActiveTab); - super.setActiveTab(tab); - WebView view = tab.getWebView(); + super.setActiveTab(tab, true); + setActiveTab(tab, true); + } + + @Override + void setActiveTab(Tab tab, boolean needsAttaching) { + 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; } - view.setEmbeddedTitleBar(getTitleBar()); + // Request focus on the top window. + if (mUseQuickControls) { + mPieControl.forceToTop(mContentView); + view.setScrollListener(null); + } else { + // check if title bar is already attached by animation + if (mTitleBar.getParent() == null) { + view.setEmbeddedTitleBar(mTitleBar); + } + } if (tab.isInVoiceSearchMode()) { - showVoiceTitleBar(tab.getVoiceDisplayTitle(), - tab.getVoiceSearchResults()); + showVoiceTitleBar(tab.getVoiceDisplayTitle(), tab.getVoiceSearchResults()); } else { revertVoiceTitleBar(tab); } + updateLockIconToLatest(tab); tab.getTopWindow().requestFocus(); } - public void captureTab(final Tab tab) { - if (tab == null) return; - if (tab.getWebView() == null) return; - - Display display = mActivity.getWindowManager().getDefaultDisplay(); - float height = mActivity.getResources() - .getDimension(R.dimen.tab_view_thumbnail_height); - Bitmap sshot = Controller.createScreenshot(tab, - display.getWidth(), (int) height); - tab.setScreenshot(sshot); - } - @Override protected void showTitleBar() { if (canShowTitleBar()) { - setTitleGravity(Gravity.TOP); + if (mUseQuickControls) { + mContentView.addView(mTitleBar); + } else { + setTitleGravity(Gravity.TOP); + } super.showTitleBar(); } } @@ -161,7 +170,11 @@ public class PhoneUi extends BaseUi { @Override protected void hideTitleBar() { if (isTitleBarShowing()) { - setTitleGravity(Gravity.NO_GRAVITY); + if (mUseQuickControls) { + mContentView.removeView(mTitleBar); + } else { + setTitleGravity(Gravity.NO_GRAVITY); + } super.hideTitleBar(); } } @@ -233,7 +246,9 @@ public class PhoneUi extends BaseUi { @Override public void onExtendedMenuClosed(boolean inLoad) { mExtendedMenuOpen = false; - showTitleBar(); + if (!mUseQuickControls) { + showTitleBar(); + } } @Override @@ -300,4 +315,62 @@ public class PhoneUi extends BaseUi { } } + @Override + protected void setTitleGravity(int gravity) { + if (mUseQuickControls) { + FrameLayout.LayoutParams lp = + (FrameLayout.LayoutParams) getTitleBar().getLayoutParams(); + lp.gravity = gravity; + getTitleBar().setLayoutParams(lp); + } else { + super.setTitleGravity(gravity); + } + } + + private void setUseQuickControls(boolean useQuickControls) { + mUseQuickControls = useQuickControls; + getTitleBar().setUseQuickControls(mUseQuickControls); + if (useQuickControls) { +// checkTabCount(); + mPieControl = new PieControl(mActivity, mUiController, this); + mPieControl.attachToContainer(mContentView); + Tab tab = getActiveTab(); + if ((tab != null) && (tab.getWebView() != null)) { + tab.getWebView().setEmbeddedTitleBar(null); + } + } else { + mActivity.getActionBar().show(); + if (mPieControl != null) { + mPieControl.removeFromContainer(mContentView); + } + WebView web = mTabControl.getCurrentWebView(); + if (web != null) { + web.setEmbeddedTitleBar(mTitleBar); + } + setTitleGravity(Gravity.NO_GRAVITY); + } + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + if (mUseQuickControls) { + menu.setGroupVisible(R.id.NAV_MENU, false); + mPieControl.onMenuOpened(menu); + return false; + } else { + return true; + } + } + + @Override + protected void captureTab(final Tab tab) { + if (mUseQuickControls) { + super.captureTab(tab); + } else { + captureTab(tab, + mActivity.getWindowManager().getDefaultDisplay().getWidth(), + (int) mActivity.getResources() + .getDimension(R.dimen.tab_view_thumbnail_height)); + } + } } diff --git a/src/com/android/browser/PieControl.java b/src/com/android/browser/PieControl.java index 38ed1bb..82e26c4 100644 --- a/src/com/android/browser/PieControl.java +++ b/src/com/android/browser/PieControl.java @@ -50,7 +50,7 @@ public class PieControl implements OnClickListener, PieMenu.PieController { private Activity mActivity; private UiController mUiController; - private XLargeUi mUi; + private BaseUi mUi; private PieMenu mPie; private PieItem mBack; private PieItem mForward; @@ -66,7 +66,7 @@ public class PieControl implements OnClickListener, PieMenu.PieController { private TextView mTabsCount; private int mItemSize; - public PieControl(Activity activity, UiController controller, XLargeUi ui) { + public PieControl(Activity activity, UiController controller, BaseUi ui) { mActivity = activity; mUiController = controller; mUi = ui; diff --git a/src/com/android/browser/TitleBarBase.java b/src/com/android/browser/TitleBarBase.java index 7e8ea1a..d34d18d 100644 --- a/src/com/android/browser/TitleBarBase.java +++ b/src/com/android/browser/TitleBarBase.java @@ -84,7 +84,7 @@ public class TitleBarBase extends RelativeLayout protected ImageButton mAutoLoginCancel; protected DeviceAccountLogin mAutoLoginHandler; protected ArrayAdapter<String> mAccountsAdapter; - + protected boolean mUseQuickControls; public TitleBarBase(Context context, UiController controller, BaseUi ui) { super(context, null); @@ -118,6 +118,10 @@ public class TitleBarBase extends RelativeLayout protected void setupUrlInput() { } + protected void setUseQuickControls(boolean use) { + mUseQuickControls = use; + } + /* package */ void setProgress(int newProgress) {} /* package */ void setLock(Drawable d) { @@ -429,4 +433,10 @@ public class TitleBarBase extends RelativeLayout mUrlInput.registerDropdownChangeListener(d); } + /** + * called from the Ui when the user wants to edit + * @param clearInput clear the input field + */ + void startEditingUrl(boolean clearInput) {}; + } diff --git a/src/com/android/browser/TitleBarPhone.java b/src/com/android/browser/TitleBarPhone.java index bcf8d53..d6b5f4d 100644 --- a/src/com/android/browser/TitleBarPhone.java +++ b/src/com/android/browser/TitleBarPhone.java @@ -26,7 +26,11 @@ import android.view.MenuInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnFocusChangeListener; +import android.view.ViewGroup; +import android.widget.AbsoluteLayout; +import android.widget.FrameLayout; import android.widget.ImageView; +import android.widget.RelativeLayout.LayoutParams; import java.util.List; @@ -148,6 +152,9 @@ public class TitleBarPhone extends TitleBarBase implements OnFocusChangeListener } } super.onFocusChange(v, hasFocus); + if (mUseQuickControls && !hasFocus) { + mBaseUi.hideTitleBar(); + } } @Override @@ -161,4 +168,47 @@ public class TitleBarPhone extends TitleBarBase implements OnFocusChangeListener } } + @Override + void startEditingUrl(boolean clearInput) { + // editing takes preference of progress + mContainer.setVisibility(View.VISIBLE); + if (!mUrlInput.hasFocus()) { + mUrlInput.requestFocus(); + } + if (clearInput) { + mUrlInput.setText(""); + } else if (mInVoiceMode) { + mUrlInput.showDropDown(); + } + } + + @Override + void setTitleGravity(int gravity) { + if (mUseQuickControls) { + FrameLayout.LayoutParams lp = + (FrameLayout.LayoutParams) getLayoutParams(); + lp.gravity = gravity; + setLayoutParams(lp); + } else { + super.setTitleGravity(gravity); + } + } + + @Override + protected void setUseQuickControls(boolean useQuickControls) { + mUseQuickControls = useQuickControls; + setLayoutParams(makeLayoutParams()); + } + + private ViewGroup.LayoutParams makeLayoutParams() { + if (mUseQuickControls) { + return new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, + LayoutParams.WRAP_CONTENT); + } else { + return new AbsoluteLayout.LayoutParams( + LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, + 0, 0); + } + } + } diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/TitleBarXLarge.java index db36fc0..7a8d984 100644 --- a/src/com/android/browser/TitleBarXLarge.java +++ b/src/com/android/browser/TitleBarXLarge.java @@ -65,7 +65,6 @@ public class TitleBarXLarge extends TitleBarBase private Drawable mUnfocusDrawable; private boolean mInLoad; - private boolean mUseQuickControls; public TitleBarXLarge(Activity activity, UiController controller, XLargeUi ui) { @@ -159,7 +158,8 @@ public class TitleBarXLarge extends TitleBarBase return height; } - void setUseQuickControls(boolean useQuickControls) { + @Override + protected void setUseQuickControls(boolean useQuickControls) { mUseQuickControls = useQuickControls; setLayoutParams(makeLayoutParams()); } diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java index c763bb0..7e78f0d 100644 --- a/src/com/android/browser/XLargeUi.java +++ b/src/com/android/browser/XLargeUi.java @@ -23,7 +23,6 @@ import android.animation.Animator.AnimatorListener; import android.animation.ObjectAnimator; import android.app.ActionBar; import android.app.Activity; -import android.graphics.Bitmap; import android.os.Bundle; import android.os.Handler; import android.util.Log; @@ -256,14 +255,6 @@ public class XLargeUi extends BaseUi implements ScrollListener { tab.getTopWindow().requestFocus(); } - public void captureTab(final Tab tab) { - Bitmap sshot = Controller.createScreenshot(tab, - (int) mActivity.getResources() - .getDimension(R.dimen.qc_thumb_width), - (int) mActivity.getResources() - .getDimension(R.dimen.qc_thumb_height)); - tab.setScreenshot(sshot); - } @Override public void updateTabs(List<Tab> tabs) { |