Bug 817721/817735/817732 - New tabs tray layout with horizontal scrolling (r=mfinkle) (needs-clobber)
authorLucas Rocha <lucasr@mozilla.com>
Fri, 22 Feb 2013 07:23:16 +0000
changeset 122622 5445992580b1365c9f64fd0cb728526c68cda1bb
parent 122621 173822e8dd8374daf517038ee1ec370816b00f83
child 122623 181787e9d67049d65f34b0838e7442c7ce100ff1
push id24349
push userryanvm@gmail.com
push dateFri, 22 Feb 2013 17:43:12 +0000
treeherdermozilla-central@e36f42046452 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmfinkle
bugs817721, 817735, 817732
milestone22.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 817721/817735/817732 - New tabs tray layout with horizontal scrolling (r=mfinkle) (needs-clobber)
mobile/android/base/BrowserApp.java
mobile/android/base/BrowserToolbar.java
mobile/android/base/Makefile.in
mobile/android/base/TabsPanel.java
mobile/android/base/TabsTray.java
mobile/android/base/resources/drawable-large-hdpi-v11/menu.png
mobile/android/base/resources/drawable-large-hdpi-v11/tabs_carat_contracted.png
mobile/android/base/resources/drawable-large-hdpi-v11/tabs_carat_expanded.png
mobile/android/base/resources/drawable-large-hdpi-v11/tabs_menu.png
mobile/android/base/resources/drawable-large-land-v11/tabs_button.xml
mobile/android/base/resources/drawable-large-land-v11/tabs_level.xml
mobile/android/base/resources/drawable-large-mdpi-v11/menu.png
mobile/android/base/resources/drawable-large-mdpi-v11/tabs_carat_contracted.png
mobile/android/base/resources/drawable-large-mdpi-v11/tabs_carat_expanded.png
mobile/android/base/resources/drawable-large-mdpi-v11/tabs_menu.png
mobile/android/base/resources/drawable-large-xhdpi-v11/menu.png
mobile/android/base/resources/drawable-large-xhdpi-v11/tabs_carat_contracted.png
mobile/android/base/resources/drawable-large-xhdpi-v11/tabs_carat_expanded.png
mobile/android/base/resources/drawable-large-xhdpi-v11/tabs_menu.png
mobile/android/base/resources/drawable-xlarge-hdpi-v11/menu.png
mobile/android/base/resources/drawable-xlarge-hdpi-v11/tabs_carat_contracted.png
mobile/android/base/resources/drawable-xlarge-hdpi-v11/tabs_carat_expanded.png
mobile/android/base/resources/drawable-xlarge-hdpi-v11/tabs_menu.png
mobile/android/base/resources/drawable-xlarge-mdpi-v11/menu.png
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_button.xml
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_carat_contracted.png
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_carat_expanded.png
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_level.xml
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_menu.png
mobile/android/base/resources/drawable-xlarge-xhdpi-v11/menu.png
mobile/android/base/resources/drawable-xlarge-xhdpi-v11/tabs_carat_contracted.png
mobile/android/base/resources/drawable-xlarge-xhdpi-v11/tabs_carat_expanded.png
mobile/android/base/resources/drawable-xlarge-xhdpi-v11/tabs_menu.png
mobile/android/base/resources/layout-large-land-v11/tabs_panel.xml.in
mobile/android/base/resources/layout-large-land-v11/tabs_panel_footer.xml
mobile/android/base/resources/layout-large-land-v11/tabs_panel_header.xml
mobile/android/base/resources/layout-large-v11/browser_toolbar_menu.xml.in
mobile/android/base/resources/layout-xlarge-v11/browser_toolbar_menu.xml.in
mobile/android/base/resources/layout-xlarge-v11/tabs_panel.xml.in
mobile/android/base/resources/layout-xlarge-v11/tabs_panel_footer.xml
mobile/android/base/resources/layout-xlarge-v11/tabs_panel_header.xml
mobile/android/base/resources/layout-xlarge-v11/tabs_row.xml
mobile/android/base/resources/layout/tabs_item_cell.xml
mobile/android/base/resources/layout/tabs_item_row.xml
mobile/android/base/resources/layout/tabs_row.xml
mobile/android/base/resources/values-land/layout.xml
mobile/android/base/resources/values-land/styles.xml
mobile/android/base/resources/values-large-land-v11/styles.xml
mobile/android/base/resources/values-large-v11/layout.xml
mobile/android/base/resources/values-large-v11/styles.xml
mobile/android/base/resources/values/layout.xml
mobile/android/base/resources/values/styles.xml
--- a/mobile/android/base/BrowserApp.java
+++ b/mobile/android/base/BrowserApp.java
@@ -376,28 +376,59 @@ abstract public class BrowserApp extends
     }
 
     @Override
     public boolean hasTabsSideBar() {
         return (mTabsPanel != null && mTabsPanel.isSideBar());
     }
 
     private void updateSideBarState() {
-        boolean isSideBar = GeckoAppShell.isLargeTablet();
+        if (mMainLayoutAnimator != null)
+            mMainLayoutAnimator.stop();
+
+        boolean isSideBar = (GeckoAppShell.isTablet() && mOrientation == Configuration.ORIENTATION_LANDSCAPE);
 
         ViewGroup.LayoutParams lp = mTabsPanel.getLayoutParams();
         if (isSideBar) {
             lp.width = getResources().getDimensionPixelSize(R.dimen.tabs_sidebar_width);
         } else {
             lp.width = ViewGroup.LayoutParams.FILL_PARENT;
         }
         mTabsPanel.requestLayout();
 
-        mTabsPanel.setIsSideBar(isSideBar);
-        mBrowserToolbar.setIsSideBar(isSideBar);
+        final boolean changed = (mTabsPanel.isSideBar() != isSideBar);
+        final boolean needsRelayout = (changed && mTabsPanel.isShown());
+
+        if (needsRelayout) {
+            final int width;
+            final int scrollY;
+
+            if (isSideBar) {
+                width = lp.width;
+                mMainLayout.scrollTo(0, 0);
+            } else {
+                width = 0;
+            }
+
+            mBrowserToolbar.adjustForTabsLayout(width);
+
+            ((LinearLayout.LayoutParams) mGeckoLayout.getLayoutParams()).setMargins(width, 0, 0, 0);
+            mGeckoLayout.requestLayout();
+        }
+
+        if (changed) {
+            // Cancel state of previous sidebar state
+            mBrowserToolbar.updateTabs(false);
+
+            mTabsPanel.setIsSideBar(isSideBar);
+            mBrowserToolbar.setIsSideBar(isSideBar);
+
+            // Update with new sidebar state
+            mBrowserToolbar.updateTabs(mTabsPanel.isShown());
+        }
     }
 
     @Override
     public void handleMessage(String event, JSONObject message) {
         try {
             if (event.equals("Menu:Add")) {
                 MenuItemInfo info = new MenuItemInfo();
                 info.label = message.getString("name");
--- a/mobile/android/base/BrowserToolbar.java
+++ b/mobile/android/base/BrowserToolbar.java
@@ -503,17 +503,17 @@ public class BrowserToolbar implements V
 
         // Make the right edge visible to start the animation
         mAwesomeBarRightEdge.setVisibility(View.VISIBLE);
 
         return translation;
     }
 
     public void fromAwesomeBarSearch() {
-        if (mActivity.hasTabsSideBar() || Build.VERSION.SDK_INT < 11) {
+        if (mActivity.isTablet() || Build.VERSION.SDK_INT < 11) {
             return;
         }
 
         AnimatorProxy proxy = null;
 
         // If the awesomebar entry is not selected at this point, this means that
         // we had to reinflate the toolbar layout for some reason (device rotation
         // while in awesome screen, activity was killed in background, etc). In this
@@ -618,17 +618,17 @@ public class BrowserToolbar implements V
             public void run() {
                 contentAnimator.start();
             }
         }, 500);
     }
 
     private void onAwesomeBarSearch() {
         // This animation doesn't make much sense in a sidebar UI
-        if (mActivity.hasTabsSideBar() || Build.VERSION.SDK_INT < 11) {
+        if (mActivity.isTablet() || Build.VERSION.SDK_INT < 11) {
             mActivity.onSearchRequested();
             return;
         }
 
         final PropertyAnimator contentAnimator = new PropertyAnimator(250);
 
         int translation = prepareAwesomeBarAnimation();
 
@@ -818,16 +818,21 @@ public class BrowserToolbar implements V
 
         ((ViewGroup.MarginLayoutParams) mLayout.getLayoutParams()).leftMargin = reset ? mTabsPaneWidth : 0;
     }
 
     public void finishTabsAnimation() {
         setPageActionVisibility(mStop.getVisibility() == View.VISIBLE);
     }
 
+    public void adjustForTabsLayout(int width) {
+        mTabsPaneWidth = width;
+        adjustTabsAnimation(false);
+    }
+
     public void updateTabs(boolean areTabsShown) {
         if (areTabsShown) {
             mTabs.getBackground().setLevel(TABS_EXPANDED);
 
             if (!mActivity.hasTabsSideBar()) {
                 mTabs.setImageLevel(0);
                 mTabsCount.setVisibility(View.GONE);
                 mMenu.setImageLevel(TABS_EXPANDED);
@@ -848,16 +853,19 @@ public class BrowserToolbar implements V
 
         // A level change will not trigger onMeasure() for the tabs, where the path is created.
         // Manually requesting a layout to re-calculate the path.
         mTabs.requestLayout();
     }
 
     public void setIsSideBar(boolean isSideBar) {
         mTabs.setIsSideBar(isSideBar);
+
+        mTabs.setImageResource(R.drawable.tabs_level);
+        mTabs.setBackgroundResource(R.drawable.tabs_button);
     }
 
     public void setProgressVisibility(boolean visible) {
         // The "Throbber start" and "Throbber stop" log messages in this method
         // are needed by S1/S2 tests (http://mrcote.info/phonedash/#).
         // See discussion in Bug 804457. Bug 805124 tracks paring these down.
         if (visible) {
             mFavicon.setImageDrawable(mProgressSpinner);
--- a/mobile/android/base/Makefile.in
+++ b/mobile/android/base/Makefile.in
@@ -259,23 +259,22 @@ FENNEC_PP_XML_FILES = \
   res/layout/awesomebar_search.xml \
   res/layout/awesomebar_suggestion_row.xml \
   res/layout/browser_toolbar.xml \
   res/layout/browser_toolbar_menu.xml \
   res/layout-land-v14/browser_toolbar.xml \
   res/layout-land-v14/browser_toolbar_menu.xml \
   res/layout-large-v11/awesomebar_search.xml \
   res/layout-large-v11/browser_toolbar_menu.xml \
-  res/layout-xlarge-v11/browser_toolbar_menu.xml \
+  res/layout-large-land-v11/tabs_panel.xml \
   res/layout/gecko_app.xml \
   res/layout/tabs_panel.xml \
   res/layout/text_selection_handles.xml \
   res/layout-xlarge-land-v11/abouthome_content.xml \
   res/layout-xlarge-v11/awesomebar_search.xml \
-  res/layout-xlarge-v11/tabs_panel.xml \
   res/xml/preferences.xml \
   res/xml/searchable.xml \
   res/menu/browser_app_menu.xml \
   res/menu-v11/browser_app_menu.xml \
   res/menu-large-v11/browser_app_menu.xml \
   res/menu-xlarge-v11/browser_app_menu.xml \
   $(NULL)
 
@@ -427,70 +426,81 @@ RES_LAYOUT = \
   res/layout/setup_screen.xml \
   res/layout/shared_ui_components.xml \
   res/layout/site_identity_popup.xml \
   res/layout/remote_tabs_child.xml \
   res/layout/remote_tabs_group.xml \
   res/layout/tabs_counter.xml \
   res/layout/tabs_panel_header.xml \
   res/layout/tabs_panel_indicator.xml \
-  res/layout/tabs_row.xml \
+  res/layout/tabs_item_cell.xml \
+  res/layout/tabs_item_row.xml \
   res/layout/list_item_header.xml \
   res/layout/select_dialog_list.xml \
   res/layout/select_dialog_multichoice.xml \
   res/layout/abouthome_addon_row.xml \
   res/layout/abouthome_last_tabs_row.xml \
   res/layout/abouthome_section.xml \
   res/layout/abouthome_remote_tab_row.xml \
   res/layout/abouthome_topsite_item.xml \
   res/layout/validation_message.xml \
   $(NULL)
 
 RES_LAYOUT_LARGE_V11 = \
   res/layout-large-v11/doorhangerpopup.xml \
   res/layout-large-v11/site_identity_popup.xml \
   $(NULL)
 
+RES_LAYOUT_LARGE_LAND_V11 = \
+  res/layout-large-land-v11/tabs_panel_header.xml \
+  res/layout-large-land-v11/tabs_panel_footer.xml \
+  $(NULL)
+
 RES_LAYOUT_XLARGE_V11 = \
   res/layout-xlarge-v11/font_size_preference.xml \
   res/layout-xlarge-v11/remote_tabs_child.xml \
   res/layout-xlarge-v11/remote_tabs_group.xml \
-  res/layout-xlarge-v11/tabs_panel_header.xml \
-  res/layout-xlarge-v11/tabs_panel_footer.xml \
-  res/layout-xlarge-v11/tabs_row.xml \
   $(NULL)
 
 RES_VALUES = \
   $(SYNC_RES_VALUES) \
   res/values/attrs.xml \
   res/values/arrays.xml \
   res/values/colors.xml \
   res/values/dimens.xml \
   res/values/integers.xml \
+  res/values/layout.xml \
   res/values/styles.xml \
   res/values/themes.xml \
   $(NULL)
 
 RES_VALUES_LAND = \
   res/values-land/integers.xml \
+  res/values-land/layout.xml \
+  res/values-land/styles.xml \
   $(NULL)
 
 RES_VALUES_V11 = \
   res/values-v11/colors.xml \
   res/values-v11/dimens.xml \
   res/values-v11/styles.xml \
   res/values-v11/themes.xml \
   $(NULL)
 
 RES_VALUES_LARGE_V11 = \
   $(SYNC_RES_VALUES_LARGE_V11) \
   res/values-large-v11/dimens.xml \
+  res/values-large-v11/layout.xml \
   res/values-large-v11/styles.xml \
   $(NULL)
 
+RES_VALUES_LARGE_LAND_V11 = \
+  res/values-large-land-v11/styles.xml \
+  $(NULL)
+
 RES_VALUES_XLARGE_V11 = \
   res/values-xlarge-v11/dimens.xml \
   res/values-xlarge-v11/integers.xml \
   res/values-xlarge-v11/styles.xml \
   $(NULL)
 
 RES_VALUES_LAND_V14 = \
   res/values-land-v14/dimens.xml \
@@ -884,70 +894,73 @@ RES_DRAWABLE_LAND_MDPI_V14 = \
 RES_DRAWABLE_LAND_HDPI_V14 = \
   res/drawable-land-hdpi-v14/tabs_carat.png \
   $(NULL)
 
 RES_DRAWABLE_LAND_XHDPI_V14 = \
   res/drawable-land-xhdpi-v14/tabs_carat.png \
   $(NULL)
 
+RES_DRAWABLE_LARGE_LAND_V11 = \
+  res/drawable-large-land-v11/tabs_button.xml \
+  res/drawable-large-land-v11/tabs_level.xml \
+  $(NULL)
+
 RES_DRAWABLE_LARGE_MDPI_V11 = \
   res/drawable-large-mdpi-v11/ic_menu_reload.png \
   res/drawable-large-mdpi-v11/ic_menu_forward.png \
+  res/drawable-large-mdpi-v11/menu.png \
   res/drawable-large-mdpi-v11/tabs_carat.png \
+  res/drawable-large-mdpi-v11/tabs_carat_contracted.png \
+  res/drawable-large-mdpi-v11/tabs_carat_expanded.png \
+  res/drawable-large-mdpi-v11/tabs_menu.png \
   $(NULL)
 
 RES_DRAWABLE_LARGE_HDPI_V11 = \
   res/drawable-large-hdpi-v11/ic_menu_reload.png \
   res/drawable-large-hdpi-v11/ic_menu_forward.png \
+  res/drawable-large-hdpi-v11/menu.png \
   res/drawable-large-hdpi-v11/tabs_carat.png \
+  res/drawable-large-hdpi-v11/tabs_carat_contracted.png \
+  res/drawable-large-hdpi-v11/tabs_carat_expanded.png \
+  res/drawable-large-hdpi-v11/tabs_menu.png \
   $(NULL)
 
 RES_DRAWABLE_LARGE_XHDPI_V11 = \
   res/drawable-large-xhdpi-v11/ic_menu_reload.png \
   res/drawable-large-xhdpi-v11/ic_menu_forward.png \
+  res/drawable-large-xhdpi-v11/menu.png \
   res/drawable-large-xhdpi-v11/tabs_carat.png \
+  res/drawable-large-xhdpi-v11/tabs_carat_contracted.png \
+  res/drawable-large-xhdpi-v11/tabs_carat_expanded.png \
+  res/drawable-large-xhdpi-v11/tabs_menu.png \
   $(NULL)
 
 RES_DRAWABLE_XLARGE_MDPI_V11 = \
   res/drawable-xlarge-mdpi-v11/awesomebar_tab_center.9.png \
   res/drawable-xlarge-mdpi-v11/awesomebar_tab_left.9.png \
   res/drawable-xlarge-mdpi-v11/awesomebar_tab_right.9.png \
   res/drawable-xlarge-mdpi-v11/ic_menu_bookmark_add.png \
   res/drawable-xlarge-mdpi-v11/ic_menu_bookmark_remove.png \
-  res/drawable-xlarge-mdpi-v11/menu.png \
-  res/drawable-xlarge-mdpi-v11/tabs_button.xml \
-  res/drawable-xlarge-mdpi-v11/tabs_carat_contracted.png \
-  res/drawable-xlarge-mdpi-v11/tabs_carat_expanded.png \
-  res/drawable-xlarge-mdpi-v11/tabs_level.xml \
-  res/drawable-xlarge-mdpi-v11/tabs_menu.png \
   $(NULL)
 
 RES_DRAWABLE_XLARGE_HDPI_V11 = \
   res/drawable-xlarge-hdpi-v11/awesomebar_tab_center.9.png \
   res/drawable-xlarge-hdpi-v11/awesomebar_tab_left.9.png \
   res/drawable-xlarge-hdpi-v11/awesomebar_tab_right.9.png \
   res/drawable-xlarge-hdpi-v11/ic_menu_bookmark_add.png \
   res/drawable-xlarge-hdpi-v11/ic_menu_bookmark_remove.png \
-  res/drawable-xlarge-hdpi-v11/menu.png \
-  res/drawable-xlarge-hdpi-v11/tabs_carat_contracted.png \
-  res/drawable-xlarge-hdpi-v11/tabs_carat_expanded.png \
-  res/drawable-xlarge-hdpi-v11/tabs_menu.png \
   $(NULL)
 
 RES_DRAWABLE_XLARGE_XHDPI_V11 = \
   res/drawable-xlarge-xhdpi-v11/awesomebar_tab_center.9.png \
   res/drawable-xlarge-xhdpi-v11/awesomebar_tab_left.9.png \
   res/drawable-xlarge-xhdpi-v11/awesomebar_tab_right.9.png \
   res/drawable-xlarge-xhdpi-v11/ic_menu_bookmark_add.png \
   res/drawable-xlarge-xhdpi-v11/ic_menu_bookmark_remove.png \
-  res/drawable-xlarge-xhdpi-v11/menu.png \
-  res/drawable-xlarge-xhdpi-v11/tabs_carat_contracted.png \
-  res/drawable-xlarge-xhdpi-v11/tabs_carat_expanded.png \
-  res/drawable-xlarge-xhdpi-v11/tabs_menu.png \
   $(NULL)
 
 RES_COLOR = \
   res/color/menu_item_title.xml \
   res/color/select_item_multichoice.xml \
   $(NULL)
 
 RES_MENU = \
@@ -997,22 +1010,23 @@ MOZ_ANDROID_DRAWABLES += \
   mobile/android/base/resources/drawable/tabs_panel_indicator.xml               \
   mobile/android/base/resources/drawable/webapp_titlebar_bg.xml                 \
   $(NULL)
 
 MOZ_BRANDING_DRAWABLE_MDPI = $(shell if test -e $(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)/android-resources.mn; then cat $(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)/android-resources.mn | tr '\n' ' ';  fi)
 MOZ_BRANDING_DRAWABLE_HDPI = $(shell if test -e $(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)/android-resources-hdpi.mn; then cat $(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)/android-resources-hdpi.mn | tr '\n' ' ';  fi)
 MOZ_BRANDING_DRAWABLE_XHDPI = $(shell if test -e $(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)/android-resources-xhdpi.mn; then cat $(topsrcdir)/$(MOZ_BRANDING_DIRECTORY)/android-resources-xhdpi.mn | tr '\n' ' ';  fi)
 
-RESOURCES=$(RES_LAYOUT) $(RES_LAYOUT_LARGE_V11) $(RES_LAYOUT_XLARGE_V11) $(RES_VALUES) $(RES_VALUES_LAND) $(RES_VALUES_V11) $(RES_VALUES_LARGE_V11) $(RES_VALUES_XLARGE_V11) $(RES_VALUES_LAND_V14) $(RES_XML) $(RES_ANIM) $(RES_DRAWABLE_MDPI) $(RES_DRAWABLE_LDPI) $(RES_DRAWABLE_HDPI) $(RES_DRAWABLE_XHDPI) $(RES_DRAWABLE_MDPI_V11) $(RES_DRAWABLE_HDPI_V11) $(RES_DRAWABLE_XHDPI_V11) $(RES_DRAWABLE_LAND_MDPI_V14) $(RES_DRAWABLE_LAND_HDPI_V14) $(RES_DRAWABLE_LAND_XHDPI_V14) $(RES_DRAWABLE_LARGE_MDPI_V11) $(RES_DRAWABLE_LARGE_HDPI_V11) $(RES_DRAWABLE_LARGE_XHDPI_V11) $(RES_DRAWABLE_XLARGE_MDPI_V11) $(RES_DRAWABLE_XLARGE_HDPI_V11) $(RES_DRAWABLE_XLARGE_XHDPI_V11) $(RES_COLOR) $(RES_MENU)
+RESOURCES=$(RES_LAYOUT) $(RES_LAYOUT_LARGE_LAND_V11) $(RES_LAYOUT_LARGE_V11) $(RES_LAYOUT_XLARGE_V11) $(RES_VALUES) $(RES_VALUES_LAND) $(RES_VALUES_V11) $(RES_VALUES_LARGE_V11) $(RES_VALUES_LARGE_LAND_V11) $(RES_VALUES_XLARGE_V11) $(RES_VALUES_LAND_V14) $(RES_XML) $(RES_ANIM) $(RES_DRAWABLE_MDPI) $(RES_DRAWABLE_LDPI) $(RES_DRAWABLE_HDPI) $(RES_DRAWABLE_XHDPI) $(RES_DRAWABLE_MDPI_V11) $(RES_DRAWABLE_HDPI_V11) $(RES_DRAWABLE_XHDPI_V11) $(RES_DRAWABLE_LAND_MDPI_V14) $(RES_DRAWABLE_LAND_HDPI_V14) $(RES_DRAWABLE_LAND_XHDPI_V14) $(RES_DRAWABLE_LARGE_LAND_V11) $(RES_DRAWABLE_LARGE_MDPI_V11) $(RES_DRAWABLE_LARGE_HDPI_V11) $(RES_DRAWABLE_LARGE_XHDPI_V11) $(RES_DRAWABLE_XLARGE_MDPI_V11) $(RES_DRAWABLE_XLARGE_HDPI_V11) $(RES_DRAWABLE_XLARGE_XHDPI_V11) $(RES_COLOR) $(RES_MENU)
 
 RES_DIRS= \
   res/layout                    \
   res/layout-land-v14           \
   res/layout-large-v11          \
+  res/layout-large-land-v11     \
   res/layout-xlarge-v11         \
   res/layout-xlarge-land-v11    \
   res/values                    \
   res/values-v11                \
   res/values-large-v11          \
   res/values-xlarge-v11         \
   res/values-land-v14           \
   res/xml                       \
--- a/mobile/android/base/TabsPanel.java
+++ b/mobile/android/base/TabsPanel.java
@@ -147,21 +147,21 @@ public class TabsPanel extends LinearLay
             mMenu.findItem(R.id.close_all_tabs).setEnabled(true); 
 
         mPopupMenu.show();
     }
 
     @Override
     public void onTabChanged(int index) {
         if (index == 0)
-            show(Panel.NORMAL_TABS);
+            show(Panel.NORMAL_TABS, false);
         else if (index == 1)
-            show(Panel.PRIVATE_TABS);
+            show(Panel.PRIVATE_TABS, false);
         else
-            show(Panel.REMOTE_TABS);
+            show(Panel.REMOTE_TABS, false);
     }
 
     @Override
     public boolean onMenuItemClick(MenuItem item) {
         switch (item.getItemId()) {
             case R.id.close_all_tabs:
                 for (Tab tab : Tabs.getInstance().getTabsInOrder()) {
                     Tabs.getInstance().closeTab(tab);
@@ -318,16 +318,20 @@ public class TabsPanel extends LinearLay
         @Override
         protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
             super.onLayout(changed, left, top, right, bottom);
             onLightweightThemeChanged();
         }
     }
 
     public void show(Panel panel) {
+        show(panel, true);
+    }
+
+    public void show(Panel panel, boolean shouldResize) {
         if (!isShown())
             setVisibility(View.VISIBLE);
 
         if (mPanel != null) {
             // Hide the old panel.
             mPanel.hide();
         }
 
@@ -358,23 +362,25 @@ public class TabsPanel extends LinearLay
             if (mFooter != null)
                 mFooter.setVisibility(View.VISIBLE);
 
             mAddTab.setVisibility(View.VISIBLE);
             mAddTab.setImageLevel(index);
             mMenuButton.setVisibility(View.VISIBLE);
         }
 
-        if (isSideBar()) {
-            if (showAnimation)
-                dispatchLayoutChange(getWidth(), getHeight());
-        } else {
-            int actionBarHeight = mContext.getResources().getDimensionPixelSize(R.dimen.browser_toolbar_height);
-            int height = actionBarHeight + getTabContainerHeight(mTabsContainer);
-            dispatchLayoutChange(getWidth(), height);
+        if (shouldResize) {
+            if (isSideBar()) {
+                if (showAnimation)
+                    dispatchLayoutChange(getWidth(), getHeight());
+            } else {
+                int actionBarHeight = mContext.getResources().getDimensionPixelSize(R.dimen.browser_toolbar_height);
+                int height = actionBarHeight + getTabContainerHeight(mTabsContainer);
+                dispatchLayoutChange(getWidth(), height);
+            }
         }
     }
 
     public void hide() {
         if (mVisible) {
             mVisible = false;
             mPopupMenu.dismiss();
             dispatchLayoutChange(0, 0);
--- a/mobile/android/base/TabsTray.java
+++ b/mobile/android/base/TabsTray.java
@@ -116,20 +116,20 @@ public class TabsTray extends TwoWayView
     }
 
     // ViewHolder for a row in the list
     private class TabRow {
         int id;
         TextView title;
         ImageView thumbnail;
         ImageButton close;
-        LinearLayout info;
+        ViewGroup info;
 
         public TabRow(View view) {
-            info = (LinearLayout) view;
+            info = (ViewGroup) view;
             title = (TextView) view.findViewById(R.id.title);
             thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
             close = (ImageButton) view.findViewById(R.id.close);
         }
     }
 
     // Adapter to bind tabs into a list
     private class TabsAdapter extends BaseAdapter implements Tabs.OnTabsChangedListener {
rename from mobile/android/base/resources/drawable-xlarge-hdpi-v11/menu.png
rename to mobile/android/base/resources/drawable-large-hdpi-v11/menu.png
rename from mobile/android/base/resources/drawable-xlarge-hdpi-v11/tabs_carat_contracted.png
rename to mobile/android/base/resources/drawable-large-hdpi-v11/tabs_carat_contracted.png
rename from mobile/android/base/resources/drawable-xlarge-hdpi-v11/tabs_carat_expanded.png
rename to mobile/android/base/resources/drawable-large-hdpi-v11/tabs_carat_expanded.png
rename from mobile/android/base/resources/drawable-xlarge-hdpi-v11/tabs_menu.png
rename to mobile/android/base/resources/drawable-large-hdpi-v11/tabs_menu.png
rename from mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_button.xml
rename to mobile/android/base/resources/drawable-large-land-v11/tabs_button.xml
rename from mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_level.xml
rename to mobile/android/base/resources/drawable-large-land-v11/tabs_level.xml
rename from mobile/android/base/resources/drawable-xlarge-mdpi-v11/menu.png
rename to mobile/android/base/resources/drawable-large-mdpi-v11/menu.png
rename from mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_carat_contracted.png
rename to mobile/android/base/resources/drawable-large-mdpi-v11/tabs_carat_contracted.png
rename from mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_carat_expanded.png
rename to mobile/android/base/resources/drawable-large-mdpi-v11/tabs_carat_expanded.png
rename from mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_menu.png
rename to mobile/android/base/resources/drawable-large-mdpi-v11/tabs_menu.png
rename from mobile/android/base/resources/drawable-xlarge-xhdpi-v11/menu.png
rename to mobile/android/base/resources/drawable-large-xhdpi-v11/menu.png
rename from mobile/android/base/resources/drawable-xlarge-xhdpi-v11/tabs_carat_contracted.png
rename to mobile/android/base/resources/drawable-large-xhdpi-v11/tabs_carat_contracted.png
rename from mobile/android/base/resources/drawable-xlarge-xhdpi-v11/tabs_carat_expanded.png
rename to mobile/android/base/resources/drawable-large-xhdpi-v11/tabs_carat_expanded.png
rename from mobile/android/base/resources/drawable-xlarge-xhdpi-v11/tabs_menu.png
rename to mobile/android/base/resources/drawable-large-xhdpi-v11/tabs_menu.png
rename from mobile/android/base/resources/layout-xlarge-v11/tabs_panel.xml.in
rename to mobile/android/base/resources/layout-large-land-v11/tabs_panel.xml.in
rename from mobile/android/base/resources/layout-xlarge-v11/tabs_panel_footer.xml
rename to mobile/android/base/resources/layout-large-land-v11/tabs_panel_footer.xml
rename from mobile/android/base/resources/layout-xlarge-v11/tabs_panel_header.xml
rename to mobile/android/base/resources/layout-large-land-v11/tabs_panel_header.xml
--- a/mobile/android/base/resources/layout-large-v11/browser_toolbar_menu.xml.in
+++ b/mobile/android/base/resources/layout-large-v11/browser_toolbar_menu.xml.in
@@ -10,79 +10,113 @@
               style="@style/BrowserToolbar">
 
     <RelativeLayout android:id="@+id/address_bar"
                     style="@style/AddressBar">
 
         <org.mozilla.gecko.BrowserToolbarBackground android:id="@+id/address_bar_bg"
                                                     android:layout_width="fill_parent"
                                                     android:layout_height="fill_parent"
-                                                    android:layout_marginRight="77dip"
-                                                    android:layout_alignParentTop="true"
-                                                    android:layout_alignParentRight="true"
+                                                    android:layout_marginLeft="21dip"
+                                                    gecko:curveTowards="left"
                                                     android:background="@drawable/address_bar_bg"/>
 
-        <FrameLayout style="@style/AddressBar.Button"
-                     android:layout_toLeftOf="@id/menu_items"
-                     android:layout_alignParentLeft="true"
-                     android:layout_alignParentBottom="true"
-                     android:layout_centerVertical="true">
+        <org.mozilla.gecko.TabsButton android:id="@+id/tabs"
+                                      style="@style/AddressBar.ImageButton"
+                                      android:layout_width="84dip"
+                                      android:layout_alignParentLeft="true"
+                                      gecko:curveTowards="left"
+                                      gecko:cropped="true"
+                                      android:background="@drawable/tabs_button"
+                                      android:gravity="center_vertical"
+                                      android:src="@drawable/tabs_level"
+                                      android:paddingLeft="6dip"
+                                      android:paddingRight="38dip"/>
+
+        <Gecko.TextSwitcher android:id="@+id/tabs_count"
+                            style="@style/AddressBar.ImageButton"
+                            android:layout_width="52dip"
+                            android:layout_height="wrap_content"
+                            android:layout_marginTop="8dp"
+                            android:layout_alignLeft="@id/tabs"
+                            android:gravity="center_horizontal"/>
+
+        <Gecko.ImageButton android:id="@+id/menu"
+                           style="@style/AddressBar.ImageButton"
+                           android:layout_width="56dip"
+                           android:layout_alignParentRight="true"
+                           android:gravity="center_vertical"
+                           android:src="@drawable/menu_level"
+                           android:contentDescription="@string/menu"
+                           android:background="@drawable/action_bar_button"
+                           android:paddingLeft="14dip"
+                           android:paddingRight="14dip"
+                           android:visibility="gone"/>
+
+        <LinearLayout android:id="@+id/menu_items"
+                      android:layout_width="wrap_content"
+                      android:layout_height="fill_parent"
+                      android:orientation="horizontal"
+                      android:layout_toLeftOf="@id/menu"/>
+
+        <RelativeLayout style="@style/AddressBar.Button"
+                        android:layout_toRightOf="@id/tabs"
+                        android:layout_toLeftOf="@id/menu_items"
+                        android:layout_marginLeft="-28dp"
+                        android:layout_alignParentBottom="true"
+                        android:layout_centerVertical="true">
 
             <Gecko.RelativeLayout android:id="@+id/awesome_bar"
                                   style="@style/AddressBar.Button"
                                   android:layout_centerVertical="true"
                                   android:clickable="true"
                                   android:focusable="true">
 
-                <ImageView android:id="@+id/awesome_bar_entry"
-                           style="@style/AddressBar.Button"
-                           android:duplicateParentState="true"
-                           android:layout_marginLeft="6dp"
-                           android:layout_marginTop="7dp"
-                           android:layout_marginBottom="7dp"
-                           android:layout_marginRight="0dp"
-                           android:clickable="false"
-                           android:focusable="false"
-                           android:background="@drawable/address_bar_url"/>
+                <Gecko.ImageView style="@style/AddressBar.Button"
+                                 android:layout_marginLeft="20dp"
+                                 android:layout_marginRight="0dp"
+                                 android:layout_marginTop="7dp"
+                                 android:layout_marginBottom="7dp"
+                                 android:duplicateParentState="true"
+                                 android:clickable="false"
+                                 android:focusable="false"
+                                 android:background="@drawable/address_bar_url"/>
 
                 <view class="org.mozilla.gecko.BrowserToolbar$RightEdge"
                       android:id="@+id/awesome_bar_right_edge"
                       style="@style/AddressBar.ImageButton"
-                      android:layout_width="100dp"
+                      android:layout_width="25dp"
                       android:layout_height="fill_parent"
                       android:paddingTop="7dp"
                       android:paddingBottom="7dp"
                       android:layout_centerVertical="true"
                       android:layout_alignParentRight="true"
-                      android:duplicateParentState="true"
-                      android:visibility="invisible"
-                      android:background="@drawable/address_bar_bg">
+                      android:duplicateParentState="true">
 
-                    <ImageView android:layout_width="50dp"
-                               android:layout_height="fill_parent"
-                               android:scaleType="fitXY"
-                               android:layout_marginLeft="-26dp"
-                               android:duplicateParentState="true"
-                               android:clickable="false"
-                               android:focusable="false"
-                               android:src="@drawable/address_bar_url"/>
+                    <Gecko.ImageView android:layout_width="50dp"
+                                     android:layout_height="fill_parent"
+                                     android:scaleType="fitXY"
+                                     android:layout_marginLeft="-26dp"
+                                     android:duplicateParentState="true"
+                                     android:clickable="false"
+                                     android:focusable="false"
+                                     android:src="@drawable/address_bar_url"/>
 
                 </view>
 
             </Gecko.RelativeLayout>
 
             <org.mozilla.gecko.ForwardButton style="@style/AddressBar.ImageButton.Forward"
                                              android:id="@+id/forward"/>
 
             <org.mozilla.gecko.BackButton android:id="@+id/back"
                                           style="@style/AddressBar.ImageButton"
                                           android:layout_width="50dip"
                                           android:layout_height="50dip"
-                                          android:layout_marginLeft="1dp"
-                                          android:layout_gravity="center_vertical"
+                                          android:layout_centerVertical="true"
                                           android:padding="13dp"
                                           android:src="@drawable/ic_menu_back"
                                           android:contentDescription="@string/back"
                                           android:background="@drawable/address_bar_nav_button"/>
 
             <LinearLayout style="@style/AddressBar.Button.Container"
                           android:id="@+id/addressbar">
 
@@ -127,56 +161,17 @@
                 <ImageButton android:id="@+id/stop"
                              style="@style/AddressBar.ImageButton.Icon"
                              android:src="@drawable/urlbar_stop"
                              android:contentDescription="@string/stop"
                              android:visibility="gone"/>
 
             </LinearLayout>
 
-        </FrameLayout>
-
-        <org.mozilla.gecko.MenuButton android:id="@+id/menu"
-                                      style="@style/AddressBar.ImageButton"
-                                      android:layout_width="90dip"
-                                      android:layout_alignParentRight="true"
-                                      android:gravity="center_vertical"
-                                      android:src="@drawable/menu_level"
-                                      android:contentDescription="@string/menu"
-                                      android:background="@drawable/menu_button"
-                                      android:paddingLeft="48dip"
-                                      android:paddingRight="14dip"
-                                      android:visibility="gone"/>
-
-        <org.mozilla.gecko.TabsButton android:id="@+id/tabs"
-                                      style="@style/AddressBar.ImageButton"
-                                      android:layout_width="112dip"
-                                      android:layout_marginRight="28dip"
-                                      android:layout_alignParentRight="true"
-                                      gecko:curveTowards="right"
-                                      android:background="@drawable/tabs_button"
-                                      android:gravity="center_vertical"
-                                      android:src="@drawable/tabs_level"
-                                      android:paddingLeft="42dip"
-                                      android:paddingRight="42dip"/>
-
-        <Gecko.TextSwitcher android:id="@+id/tabs_count"
-                            style="@style/AddressBar.ImageButton"
-                            android:layout_width="112dip"
-                            android:layout_height="wrap_content"
-                            android:layout_marginTop="6dp"
-                            android:layout_alignRight="@id/tabs"
-                            android:gravity="center_horizontal"/>
-
-        <LinearLayout android:id="@+id/menu_items"
-                      android:layout_width="wrap_content"
-                      android:layout_height="fill_parent"
-                      android:orientation="horizontal"
-                      android:layout_marginRight="110dip"
-                      android:layout_alignParentRight="true"/>
+        </RelativeLayout>
 
          <ImageView android:id="@+id/shadow"
                     android:layout_width="fill_parent"
                     android:layout_height="2dp"
                     android:layout_alignParentBottom="true"
                     android:background="@drawable/address_bar_bg_shadow_repeat"
                     android:visibility="gone"/>
 
deleted file mode 100644
--- a/mobile/android/base/resources/layout-xlarge-v11/browser_toolbar_menu.xml.in
+++ /dev/null
@@ -1,179 +0,0 @@
-#filter substitution
-<?xml version="1.0" encoding="utf-8"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              xmlns:gecko="http://schemas.android.com/apk/res/@ANDROID_PACKAGE_NAME@"
-              android:id="@+id/browser_toolbar"
-              style="@style/BrowserToolbar">
-
-    <RelativeLayout android:id="@+id/address_bar"
-                    style="@style/AddressBar">
-
-        <org.mozilla.gecko.BrowserToolbarBackground android:id="@+id/address_bar_bg"
-                                                    android:layout_width="fill_parent"
-                                                    android:layout_height="fill_parent"
-                                                    gecko:curveTowards="left"
-                                                    android:background="@drawable/address_bar_bg"/>
-
-        <org.mozilla.gecko.TabsButton android:id="@+id/tabs"
-                                      style="@style/AddressBar.ImageButton"
-                                      android:layout_width="84dip"
-                                      android:layout_alignParentLeft="true"
-                                      gecko:curveTowards="left"
-                                      gecko:cropped="true"
-                                      android:background="@drawable/tabs_button"
-                                      android:gravity="center_vertical"
-                                      android:src="@drawable/tabs_level"
-                                      android:paddingLeft="6dip"
-                                      android:paddingRight="32dip"/>
-
-        <Gecko.TextSwitcher android:id="@+id/tabs_count"
-                            style="@style/AddressBar.ImageButton"
-                            android:layout_width="52dip"
-                            android:layout_height="wrap_content"
-                            android:layout_marginTop="8dp"
-                            android:layout_alignLeft="@id/tabs"
-                            android:gravity="center_horizontal"/>
-
-        <Gecko.ImageButton android:id="@+id/menu"
-                           style="@style/AddressBar.ImageButton"
-                           android:layout_width="56dip"
-                           android:layout_alignParentRight="true"
-                           android:gravity="center_vertical"
-                           android:src="@drawable/menu_level"
-                           android:contentDescription="@string/menu"
-                           android:background="@drawable/action_bar_button"
-                           android:paddingLeft="14dip"
-                           android:paddingRight="14dip"
-                           android:visibility="gone"/>
-
-        <LinearLayout android:id="@+id/menu_items"
-                      android:layout_width="wrap_content"
-                      android:layout_height="fill_parent"
-                      android:orientation="horizontal"
-                      android:layout_toLeftOf="@id/menu"/>
-
-        <RelativeLayout style="@style/AddressBar.Button"
-                        android:layout_toRightOf="@id/tabs"
-                        android:layout_toLeftOf="@id/menu_items"
-                        android:layout_marginLeft="-28dp"
-                        android:layout_alignParentBottom="true"
-                        android:layout_centerVertical="true">
-
-            <Gecko.RelativeLayout android:id="@+id/awesome_bar"
-                                  style="@style/AddressBar.Button"
-                                  android:layout_centerVertical="true"
-                                  android:clickable="true"
-                                  android:focusable="true">
-
-                <Gecko.ImageView style="@style/AddressBar.Button"
-                                 android:layout_marginLeft="20dp"
-                                 android:layout_marginRight="0dp"
-                                 android:layout_marginTop="7dp"
-                                 android:layout_marginBottom="7dp"
-                                 android:duplicateParentState="true"
-                                 android:clickable="false"
-                                 android:focusable="false"
-                                 android:background="@drawable/address_bar_url"/>
-
-                <view class="org.mozilla.gecko.BrowserToolbar$RightEdge"
-                      android:id="@+id/awesome_bar_right_edge"
-                      style="@style/AddressBar.ImageButton"
-                      android:layout_width="25dp"
-                      android:layout_height="fill_parent"
-                      android:paddingTop="7dp"
-                      android:paddingBottom="7dp"
-                      android:layout_centerVertical="true"
-                      android:layout_alignParentRight="true"
-                      android:duplicateParentState="true">
-
-                    <Gecko.ImageView android:layout_width="50dp"
-                                     android:layout_height="fill_parent"
-                                     android:scaleType="fitXY"
-                                     android:layout_marginLeft="-26dp"
-                                     android:duplicateParentState="true"
-                                     android:clickable="false"
-                                     android:focusable="false"
-                                     android:src="@drawable/address_bar_url"/>
-
-                </view>
-
-            </Gecko.RelativeLayout>
-
-            <org.mozilla.gecko.ForwardButton style="@style/AddressBar.ImageButton.Forward"
-                                             android:id="@+id/forward"/>
-
-            <org.mozilla.gecko.BackButton android:id="@+id/back"
-                                          style="@style/AddressBar.ImageButton"
-                                          android:layout_width="50dip"
-                                          android:layout_height="50dip"
-                                          android:layout_centerVertical="true"
-                                          android:padding="13dp"
-                                          android:src="@drawable/ic_menu_back"
-                                          android:contentDescription="@string/back"
-                                          android:background="@drawable/address_bar_nav_button"/>
-
-            <LinearLayout style="@style/AddressBar.Button.Container"
-                          android:id="@+id/addressbar">
-
-                <ImageButton android:id="@+id/favicon"
-                             style="@style/AddressBar.ImageButton"
-                             android:layout_width="@dimen/browser_toolbar_favicon_size"
-                             android:layout_height="fill_parent"
-                             android:scaleType="fitCenter"
-                             android:paddingLeft="8dip"
-                             android:layout_marginRight="4dip"
-                             android:layout_gravity="center_vertical"
-                             android:src="@drawable/favicon"/>
-
-                <ImageButton android:id="@+id/site_security"
-                             style="@style/AddressBar.ImageButton"
-                             android:layout_width="@dimen/browser_toolbar_lock_width"
-                             android:scaleType="fitCenter"
-                             android:layout_marginLeft="-4dip"
-                             android:src="@drawable/site_security_level"
-                             android:contentDescription="@string/site_security"
-                             android:visibility="gone"/>
-
-                <Gecko.TextView android:id="@+id/awesome_bar_title"
-                                style="@style/AddressBar.Button"
-                                android:layout_width="fill_parent"
-                                android:layout_height="fill_parent"
-                                android:layout_weight="1.0"
-                                android:singleLine="true"
-                                android:paddingRight="8dp"
-                                android:textColor="@color/awesome_bar_title"
-                                android:textColorHint="@color/awesome_bar_title_hint"
-                                android:gravity="center_vertical|left"
-                                android:hint="@string/awesomebar_default_text"
-                                android:layout_gravity="center_vertical"/>
-
-                <ImageButton android:id="@+id/reader"
-                             style="@style/AddressBar.ImageButton.Icon"
-                             android:src="@drawable/reader"
-                             android:contentDescription="@string/reader"
-                             android:visibility="gone"/>
-
-                <ImageButton android:id="@+id/stop"
-                             style="@style/AddressBar.ImageButton.Icon"
-                             android:src="@drawable/urlbar_stop"
-                             android:contentDescription="@string/stop"
-                             android:visibility="gone"/>
-
-            </LinearLayout>
-
-        </RelativeLayout>
-
-         <ImageView android:id="@+id/shadow"
-                    android:layout_width="fill_parent"
-                    android:layout_height="2dp"
-                    android:layout_alignParentBottom="true"
-                    android:background="@drawable/address_bar_bg_shadow_repeat"
-                    android:visibility="gone"/>
-
-    </RelativeLayout>
-
-</LinearLayout>
deleted file mode 100644
--- a/mobile/android/base/resources/layout-xlarge-v11/tabs_row.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<Gecko.TabRow xmlns:android="http://schemas.android.com/apk/res/android"
-              android:focusable="true"
-              android:nextFocusRight="@+id/close"
-              android:id="@+id/info"
-              android:layout_width="fill_parent"
-              android:layout_height="wrap_content"
-              android:padding="6dip"
-              android:gravity="center"
-              android:background="@drawable/tab_row">
-
-    <RelativeLayout android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_margin="6dip"
-                    android:padding="4dip"
-                    android:background="@drawable/tab_thumbnail"
-                    android:duplicateParentState="true">
-
-        <Gecko.ThumbnailView android:id="@+id/thumbnail"
-                             android:layout_width="@dimen/tab_thumbnail_width"
-                             android:layout_height="@dimen/tab_thumbnail_height"
-                             android:src="@drawable/tab_thumbnail_default"/>
-
-
-        <LinearLayout android:layout_width="@dimen/tab_thumbnail_width"
-                      android:layout_height="wrap_content"
-                      android:orientation="horizontal"
-                      android:background="#EFFF"
-                      android:layout_alignParentBottom="true"
-                      android:duplicateParentState="true">
-
-            <TextView android:id="@+id/title"
-                      android:layout_width="0dip"
-                      android:layout_height="wrap_content"
-                      android:layout_weight="1.0"
-                      android:padding="4dip"
-                      style="@style/TabRowTextAppearance"
-                      android:textSize="12sp"
-                      android:textColor="#FF222222"
-                      android:singleLine="true"
-                      android:duplicateParentState="true"/>
-
-            <ImageButton android:id="@+id/close"
-                         android:nextFocusLeft="@+id/info"
-                         android:layout_width="32dip"
-                         android:layout_height="fill_parent"
-                         android:background="@drawable/action_bar_button"
-                         android:scaleType="center"
-                         android:contentDescription="@string/close_tab"
-                         android:src="@drawable/tab_close"/>
-
-        </LinearLayout>
-
-    </RelativeLayout>
-
-</Gecko.TabRow>
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/resources/layout/tabs_item_cell.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<Gecko.TabRow xmlns:android="http://schemas.android.com/apk/res/android"
+              android:focusable="true"
+              android:nextFocusRight="@+id/close"
+              android:id="@+id/info"
+              android:layout_width="fill_parent"
+              android:layout_height="wrap_content"
+              android:padding="6dip"
+              android:gravity="center"
+              android:background="@drawable/tab_row">
+
+    <RelativeLayout android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_margin="6dip"
+                    android:padding="4dip"
+                    android:background="@drawable/tab_thumbnail"
+                    android:duplicateParentState="true">
+
+        <Gecko.ThumbnailView android:id="@+id/thumbnail"
+                             android:layout_width="@dimen/tab_thumbnail_width"
+                             android:layout_height="@dimen/tab_thumbnail_height"
+                             android:src="@drawable/tab_thumbnail_default"/>
+
+
+        <LinearLayout android:layout_width="@dimen/tab_thumbnail_width"
+                      android:layout_height="wrap_content"
+                      android:orientation="horizontal"
+                      android:background="#EFFF"
+                      android:layout_below="@id/thumbnail"
+                      android:duplicateParentState="true">
+
+            <TextView android:id="@+id/title"
+                      android:layout_width="0dip"
+                      android:layout_height="wrap_content"
+                      android:layout_weight="1.0"
+                      android:padding="4dip"
+                      style="@style/TabRowTextAppearance"
+                      android:textSize="12sp"
+                      android:textColor="#FF222222"
+                      android:singleLine="true"
+                      android:duplicateParentState="true"/>
+
+            <ImageButton android:id="@+id/close"
+                         android:nextFocusLeft="@+id/info"
+                         android:layout_width="32dip"
+                         android:layout_height="fill_parent"
+                         android:background="@drawable/action_bar_button"
+                         android:scaleType="center"
+                         android:contentDescription="@string/close_tab"
+                         android:src="@drawable/tab_close"/>
+
+        </LinearLayout>
+
+    </RelativeLayout>
+
+</Gecko.TabRow>
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/resources/layout/tabs_item_row.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<Gecko.TabRow xmlns:android="http://schemas.android.com/apk/res/android"
+              android:focusable="true"
+              android:nextFocusRight="@+id/close"
+              android:id="@+id/info"
+              android:layout_width="fill_parent"
+              android:layout_height="wrap_content"
+              android:paddingLeft="12dip"
+              android:paddingTop="6dip"
+              android:paddingBottom="6dip"
+              android:background="@drawable/tab_row">
+
+    <LinearLayout android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:padding="4dip"
+                  android:background="@drawable/tab_thumbnail"
+                  android:duplicateParentState="true">
+
+        <Gecko.ThumbnailView android:id="@+id/thumbnail"
+                             android:layout_width="@dimen/tab_thumbnail_width"
+                             android:layout_height="@dimen/tab_thumbnail_height"
+                             android:src="@drawable/tab_thumbnail_default"/>
+
+    </LinearLayout>
+
+    <TextView android:id="@+id/title"
+              android:layout_width="0dip"
+              android:layout_height="fill_parent"
+              android:layout_weight="1.0"
+              android:paddingTop="4dip"
+              android:paddingLeft="8dip"
+              android:paddingRight="4dip"
+              style="@style/TabRowTextAppearance"
+              android:textColor="#FFFFFFFF"
+              android:textSize="14sp"
+              android:singleLine="false"
+              android:maxLines="4"
+              android:duplicateParentState="true"/>
+
+    <ImageButton android:id="@+id/close"
+                 android:nextFocusLeft="@+id/info"
+                 android:layout_width="34dip"
+                 android:layout_height="fill_parent"
+                 android:background="@drawable/action_bar_button"
+                 android:scaleType="center"
+                 android:contentDescription="@string/close_tab"
+                 android:src="@drawable/tab_close"/>
+
+</Gecko.TabRow>
deleted file mode 100644
--- a/mobile/android/base/resources/layout/tabs_row.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<Gecko.TabRow xmlns:android="http://schemas.android.com/apk/res/android"
-              android:focusable="true"
-              android:nextFocusRight="@+id/close"
-              android:id="@+id/info"
-              android:layout_width="fill_parent"
-              android:layout_height="wrap_content"
-              android:paddingLeft="12dip"
-              android:paddingTop="6dip"
-              android:paddingBottom="6dip"
-              android:background="@drawable/tab_row">
-
-    <LinearLayout android:layout_width="wrap_content"
-                  android:layout_height="wrap_content"
-                  android:padding="4dip"
-                  android:background="@drawable/tab_thumbnail"
-                  android:duplicateParentState="true">
-
-        <Gecko.ThumbnailView android:id="@+id/thumbnail"
-                             android:layout_width="@dimen/tab_thumbnail_width"
-                             android:layout_height="@dimen/tab_thumbnail_height"
-                             android:src="@drawable/tab_thumbnail_default"/>
-
-    </LinearLayout>
-
-    <TextView android:id="@+id/title"
-              android:layout_width="0dip"
-              android:layout_height="fill_parent"
-              android:layout_weight="1.0"
-              android:paddingTop="4dip"
-              android:paddingLeft="8dip"
-              android:paddingRight="4dip"
-              style="@style/TabRowTextAppearance"
-              android:textColor="#FFFFFFFF"
-              android:textSize="14sp"
-              android:singleLine="false"
-              android:maxLines="4"
-              android:duplicateParentState="true"/>
-
-    <ImageButton android:id="@+id/close"
-                 android:nextFocusLeft="@+id/info"
-                 android:layout_width="34dip"
-                 android:layout_height="fill_parent"
-                 android:background="@drawable/action_bar_button"
-                 android:scaleType="center"
-                 android:contentDescription="@string/close_tab"
-                 android:src="@drawable/tab_close"/>
-
-</Gecko.TabRow>
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/resources/values-land/layout.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<resources>
+    <item type="layout" name="tabs_row">@layout/tabs_item_cell</item>
+</resources>
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/resources/values-land/styles.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<resources>
+
+    <style name="TabsList" parent="TabsListBase">
+         <item name="android:orientation">horizontal</item>
+    </style>
+
+</resources>
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/resources/values-large-land-v11/styles.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<resources>
+
+    <style name="TabsList" parent="TabsListBase">
+         <item name="android:orientation">vertical</item>
+    </style>
+
+</resources>
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/resources/values-large-v11/layout.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<resources>
+    <item type="layout" name="tabs_row">@layout/tabs_item_cell</item>
+</resources>
--- a/mobile/android/base/resources/values-large-v11/styles.xml
+++ b/mobile/android/base/resources/values-large-v11/styles.xml
@@ -51,9 +51,13 @@
         <item name="android:layout_marginTop">6dp</item>
         <item name="android:layout_marginBottom">6dp</item>
         <item name="android:layout_marginRight">0dp</item>
         <!-- Start with forward hidden -->
         <item name="android:layout_marginLeft">@dimen/addressbar_offset_left_noforward</item>
         <item name="android:orientation">horizontal</item>
     </style>
 
+    <style name="TabsList" parent="TabsListBase">
+         <item name="android:orientation">horizontal</item>
+    </style>
+
 </resources>
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/resources/values/layout.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<resources>
+    <item type="layout" name="tabs_row">@layout/tabs_item_row</item>
+</resources>
--- a/mobile/android/base/resources/values/styles.xml
+++ b/mobile/android/base/resources/values/styles.xml
@@ -131,19 +131,22 @@
     </style>
 
     <!-- AwesomeBar Tab Indicator Curve Right -->
     <style name="AwesomeBarTabIndicatorCurve.Right">
          <item name="android:layout_width">20dp</item>
     </style>
 
     <!-- TabsTray List -->
-    <style name="TabsList">
+    <style name="TabsListBase">
          <item name="android:background">@android:color/transparent</item>
          <item name="android:listSelector">@android:color/transparent</item>
+    </style>
+
+    <style name="TabsList" parent="TabsListBase">
          <item name="android:orientation">vertical</item>
     </style>
 
     <!-- RemoteTabsList -->
     <style name="RemoteTabsList" parent="android:style/Widget.ListView">
          <item name="android:listSelector">@android:color/transparent</item>
          <item name="android:cacheColorHint">@android:color/transparent</item>
          <item name="android:divider">@android:color/transparent</item>