Bug 785246: Replace curves on tabs button. [r=mfinkle]
authorSriram Ramasubramanian <sriram@mozilla.com>
Fri, 31 Aug 2012 12:00:24 -0700
changeset 104045 987945f36cbc373998c56139f06be1a4dcf8199b
parent 104044 dbb57b1e7917d3b5cad3a5b5550ce3cb53eeb01f
child 104046 d58c3359c4220fabeea52c54c5b71ef006e855d5
push id14311
push usersramasubramanian@mozilla.com
push dateFri, 31 Aug 2012 19:13:07 +0000
treeherdermozilla-inbound@98e88977a4b8 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmfinkle
bugs785246
milestone18.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 785246: Replace curves on tabs button. [r=mfinkle]
mobile/android/base/CanvasDelegate.java
mobile/android/base/GeckoViewsFactory.java
mobile/android/base/Makefile.in
mobile/android/base/TabsButton.java
mobile/android/base/resources/drawable-hdpi/tabs_crop_normal.png
mobile/android/base/resources/drawable-hdpi/tabs_crop_pressed.png
mobile/android/base/resources/drawable-hdpi/tabs_full_normal.png
mobile/android/base/resources/drawable-hdpi/tabs_full_pressed.png
mobile/android/base/resources/drawable-land-hdpi-v14/tabs_crop_normal.png
mobile/android/base/resources/drawable-land-hdpi-v14/tabs_crop_pressed.png
mobile/android/base/resources/drawable-land-hdpi-v14/tabs_full_normal.png
mobile/android/base/resources/drawable-land-hdpi-v14/tabs_full_pressed.png
mobile/android/base/resources/drawable-land-mdpi-v14/tabs_crop_normal.png
mobile/android/base/resources/drawable-land-mdpi-v14/tabs_crop_pressed.png
mobile/android/base/resources/drawable-land-mdpi-v14/tabs_full_normal.png
mobile/android/base/resources/drawable-land-mdpi-v14/tabs_full_pressed.png
mobile/android/base/resources/drawable-land-xhdpi-v14/tabs_crop_normal.png
mobile/android/base/resources/drawable-land-xhdpi-v14/tabs_crop_pressed.png
mobile/android/base/resources/drawable-land-xhdpi-v14/tabs_full_normal.png
mobile/android/base/resources/drawable-land-xhdpi-v14/tabs_full_pressed.png
mobile/android/base/resources/drawable-large-hdpi-v11/tabs_crop_normal.png
mobile/android/base/resources/drawable-large-hdpi-v11/tabs_crop_pressed.png
mobile/android/base/resources/drawable-large-hdpi-v11/tabs_full_normal.png
mobile/android/base/resources/drawable-large-hdpi-v11/tabs_full_pressed.png
mobile/android/base/resources/drawable-large-mdpi-v11/tabs_crop_normal.png
mobile/android/base/resources/drawable-large-mdpi-v11/tabs_crop_pressed.png
mobile/android/base/resources/drawable-large-mdpi-v11/tabs_full_normal.png
mobile/android/base/resources/drawable-large-mdpi-v11/tabs_full_pressed.png
mobile/android/base/resources/drawable-large-xhdpi-v11/tabs_crop_normal.png
mobile/android/base/resources/drawable-large-xhdpi-v11/tabs_crop_pressed.png
mobile/android/base/resources/drawable-large-xhdpi-v11/tabs_full_normal.png
mobile/android/base/resources/drawable-large-xhdpi-v11/tabs_full_pressed.png
mobile/android/base/resources/drawable-xhdpi/tabs_crop_normal.png
mobile/android/base/resources/drawable-xhdpi/tabs_crop_pressed.png
mobile/android/base/resources/drawable-xhdpi/tabs_full_normal.png
mobile/android/base/resources/drawable-xhdpi/tabs_full_pressed.png
mobile/android/base/resources/drawable-xlarge-hdpi-v11/tabs_crop_expanded_normal.png
mobile/android/base/resources/drawable-xlarge-hdpi-v11/tabs_crop_expanded_pressed.png
mobile/android/base/resources/drawable-xlarge-hdpi-v11/tabs_crop_normal.png
mobile/android/base/resources/drawable-xlarge-hdpi-v11/tabs_crop_pressed.png
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_button.xml
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_crop_button.xml
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_crop_expanded_normal.png
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_crop_expanded_pressed.png
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_crop_normal.png
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_crop_pressed.png
mobile/android/base/resources/drawable-xlarge-xhdpi-v11/tabs_crop_expanded_normal.png
mobile/android/base/resources/drawable-xlarge-xhdpi-v11/tabs_crop_expanded_pressed.png
mobile/android/base/resources/drawable-xlarge-xhdpi-v11/tabs_crop_normal.png
mobile/android/base/resources/drawable-xlarge-xhdpi-v11/tabs_crop_pressed.png
mobile/android/base/resources/drawable/tabs_button.xml
mobile/android/base/resources/drawable/tabs_crop_button.xml
mobile/android/base/resources/drawable/tabs_crop_button_contracted.xml
mobile/android/base/resources/drawable/tabs_crop_button_expanded.xml
mobile/android/base/resources/drawable/tabs_crop_normal.png
mobile/android/base/resources/drawable/tabs_crop_pressed.png
mobile/android/base/resources/drawable/tabs_full_button.xml
mobile/android/base/resources/drawable/tabs_full_button_contracted.xml
mobile/android/base/resources/drawable/tabs_full_normal.png
mobile/android/base/resources/drawable/tabs_full_pressed.png
mobile/android/base/resources/layout-land-v14/browser_toolbar.xml
mobile/android/base/resources/layout-land-v14/browser_toolbar.xml.in
mobile/android/base/resources/layout-land-v14/browser_toolbar_menu.xml
mobile/android/base/resources/layout-land-v14/browser_toolbar_menu.xml.in
mobile/android/base/resources/layout-large-v11/browser_toolbar_menu.xml
mobile/android/base/resources/layout-large-v11/browser_toolbar_menu.xml.in
mobile/android/base/resources/layout-xlarge-v11/awesomebar_search.xml
mobile/android/base/resources/layout-xlarge-v11/awesomebar_search.xml.in
mobile/android/base/resources/layout-xlarge-v11/browser_toolbar_menu.xml
mobile/android/base/resources/layout-xlarge-v11/browser_toolbar_menu.xml.in
mobile/android/base/resources/layout/browser_toolbar.xml
mobile/android/base/resources/layout/browser_toolbar.xml.in
mobile/android/base/resources/layout/browser_toolbar_menu.xml
mobile/android/base/resources/layout/browser_toolbar_menu.xml.in
mobile/android/base/resources/values-land-v14/dimens.xml
mobile/android/base/resources/values-large-v11/dimens.xml
mobile/android/base/resources/values/attrs.xml
mobile/android/base/resources/values/dimens.xml
--- a/mobile/android/base/CanvasDelegate.java
+++ b/mobile/android/base/CanvasDelegate.java
@@ -1,18 +1,18 @@
 /* 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/. */
 
 package org.mozilla.gecko;
 
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
+import android.graphics.Paint;
 import android.graphics.Path;
-import android.graphics.Paint;
 import android.graphics.PorterDuffXfermode;
 import android.graphics.PorterDuff.Mode;
 import android.os.Build;
 
 public class CanvasDelegate { 
     Paint mPaint;
     PorterDuffXfermode mMode;
     DrawManager mDrawManager;
--- a/mobile/android/base/GeckoViewsFactory.java
+++ b/mobile/android/base/GeckoViewsFactory.java
@@ -47,16 +47,18 @@ public final class GeckoViewsFactory imp
             else if (TextUtils.equals(viewName, "BrowserToolbarBackground"))
                 return new BrowserToolbarBackground(context, attrs);
             else if (TextUtils.equals(viewName, "FormAssistPopup"))
                 return new FormAssistPopup(context, attrs);
             else if (TextUtils.equals(viewName, "LinkTextView"))
                 return new LinkTextView(context, attrs);
             else if (TextUtils.equals(viewName, "FindInPageBar"))
                 return new FindInPageBar(context, attrs);
+            else if (TextUtils.equals(viewName, "TabsButton"))
+                return new TabsButton(context, attrs);
             else if (TextUtils.equals(viewName, "TabsPanel"))
                 return new TabsPanel(context, attrs);
             else if (TextUtils.equals(viewName, "TextSelectionHandle"))
                 return new TextSelectionHandle(context, attrs);
             else if (TextUtils.equals(viewName, "gfx.LayerView"))
                 return new LayerView(context, attrs);
             else
                 Log.e(LOGTAG, "Error: unknown custom view: " + viewName);
--- a/mobile/android/base/Makefile.in
+++ b/mobile/android/base/Makefile.in
@@ -106,16 +106,17 @@ FENNEC_JAVA_FILES = \
   RemoteTabs.java \
   RobocopAPI.java \
   SetupScreen.java \
   SiteIdentityPopup.java \
   SuggestClient.java \
   SurfaceBits.java \
   Tab.java \
   Tabs.java \
+  TabsButton.java \
   TabsPanel.java \
   TabsTray.java \
   TabsAccessor.java \
   Telemetry.java \
   TextSelection.java \
   TextSelectionHandle.java \
   WebAppAllocator.java \
   ZoomConstraints.java \
@@ -184,20 +185,27 @@ FENNEC_PP_JAVA_FILES = \
   db/FormHistoryProvider.java \
   db/TabsProvider.java \
   db/GeckoProvider.java \
   SmsManager.java \
   $(NULL)
 
 FENNEC_PP_XML_FILES = \
   res/layout/abouthome_content.xml \
-  res/layout-xlarge-land-v11/abouthome_content.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/browser_toolbar_menu.xml \
+  res/layout-xlarge-v11/browser_toolbar_menu.xml \
   res/layout/gecko_app.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/gecko_app.xml \
-  res/layout/text_selection_handles.xml \
   res/xml/preferences.xml \
   res/menu/browser_app_menu.xml \
   res/menu-v11/browser_app_menu.xml \
   res/menu-v11/gecko_app_menu.xml \
   res/menu-v11/titlebar_contextmenu.xml \
   res/menu-large-v11/browser_app_menu.xml \
   res/menu-xlarge-v11/browser_app_menu.xml \
   $(NULL)
@@ -302,18 +310,16 @@ RES_LAYOUT = \
   res/layout/awesomebar_list.xml \
   res/layout/awesomebar_row.xml \
   res/layout/awesomebar_suggestion_item.xml \
   res/layout/awesomebar_suggestion_row.xml \
   res/layout/awesomebar_search.xml \
   res/layout/awesomebar_tab_indicator.xml \
   res/layout/awesomebar_tabs.xml \
   res/layout/bookmark_edit.xml \
-  res/layout/browser_toolbar.xml \
-  res/layout/browser_toolbar_menu.xml \
   res/layout/doorhangerpopup.xml \
   res/layout/doorhanger.xml \
   res/layout/find_in_page_content.xml \
   res/layout/font_size_preference.xml \
   res/layout/web_app.xml \
   res/layout/launch_app_list.xml \
   res/layout/launch_app_listitem.xml \
   res/layout/menu_item.xml \
@@ -341,33 +347,28 @@ RES_LAYOUT = \
   res/layout/abouthome_promo_box.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_LAND_V14 = \
-  res/layout-land-v14/browser_toolbar.xml \
-  res/layout-land-v14/browser_toolbar_menu.xml \
   res/layout-land-v14/tabs_panel_toolbar.xml \
   res/layout-land-v14/tabs_panel_toolbar_menu.xml \
   $(NULL)
 
 RES_LAYOUT_LARGE_V11 = \
   res/layout-large-v11/awesomebar_search.xml \
-  res/layout-large-v11/browser_toolbar_menu.xml \
   res/layout-large-v11/doorhangerpopup.xml \
   res/layout-large-v11/site_identity_popup.xml \
   res/layout-large-v11/tabs_panel_toolbar_menu.xml \
   $(NULL)
 
 RES_LAYOUT_XLARGE_V11 = \
-  res/layout-xlarge-v11/awesomebar_search.xml \
-  res/layout-xlarge-v11/browser_toolbar_menu.xml \
   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_toolbar_menu.xml \
   res/layout-xlarge-v11/tabs_row.xml \
   $(NULL)
 
 RES_VALUES = \
@@ -454,20 +455,16 @@ RES_DRAWABLE_BASE = \
   res/drawable/ic_menu_forward.png \
   res/drawable/remote_tabs_off.png \
   res/drawable/remote_tabs_on.png \
   res/drawable/tab_new.png \
   res/drawable/tab_close.png \
   res/drawable/tab_thumbnail_default.png \
   res/drawable/tab_thumbnail_shadow.png \
   res/drawable/tabs_carat.png \
-  res/drawable/tabs_crop_normal.png \
-  res/drawable/tabs_crop_pressed.png \
-  res/drawable/tabs_full_normal.png \
-  res/drawable/tabs_full_pressed.png \
   res/drawable/address_bar_back_button.xml \
   res/drawable/address_bar_back_button_bg.xml \
   res/drawable/address_bar_back_button_pressed_bg.xml \
   res/drawable/address_bar_forward_button.xml \
   res/drawable/address_bar_texture_port.png \
   res/drawable/address_bar_url.xml \
   res/drawable/address_bar_url_default.9.png \
   res/drawable/address_bar_url_pressed.9.png \
@@ -537,20 +534,16 @@ RES_DRAWABLE_HDPI = \
   res/drawable-hdpi/ic_menu_share.png \
   res/drawable-hdpi/remote_tabs_off.png \
   res/drawable-hdpi/remote_tabs_on.png \
   res/drawable-hdpi/tab_new.png \
   res/drawable-hdpi/tab_close.png \
   res/drawable-hdpi/tab_thumbnail_default.png \
   res/drawable-hdpi/tab_thumbnail_shadow.png \
   res/drawable-hdpi/tabs_carat.png \
-  res/drawable-hdpi/tabs_crop_normal.png \
-  res/drawable-hdpi/tabs_crop_pressed.png \
-  res/drawable-hdpi/tabs_full_normal.png \
-  res/drawable-hdpi/tabs_full_pressed.png \
   res/drawable-hdpi/address_bar_texture_port.png \
   res/drawable-hdpi/address_bar_url_default.9.png \
   res/drawable-hdpi/address_bar_url_pressed.9.png \
   res/drawable-hdpi/doorhanger_arrow.png \
   res/drawable-hdpi/doorhanger_bg.9.png \
   res/drawable-hdpi/doorhanger_shadow_bg.9.png \
   res/drawable-hdpi/doorhanger_popup_bg.9.png \
   res/drawable-hdpi/find_close.png \
@@ -604,20 +597,16 @@ RES_DRAWABLE_XHDPI = \
   res/drawable-xhdpi/ic_menu_reload.png \
   res/drawable-xhdpi/ic_menu_save_as_pdf.png \
   res/drawable-xhdpi/ic_menu_share.png \
   res/drawable-xhdpi/tab_new.png \
   res/drawable-xhdpi/tab_close.png \
   res/drawable-xhdpi/tab_thumbnail_default.png \
   res/drawable-xhdpi/tab_thumbnail_shadow.png \
   res/drawable-xhdpi/tabs_carat.png \
-  res/drawable-xhdpi/tabs_crop_normal.png \
-  res/drawable-xhdpi/tabs_crop_pressed.png \
-  res/drawable-xhdpi/tabs_full_normal.png \
-  res/drawable-xhdpi/tabs_full_pressed.png \
   res/drawable-xhdpi/doorhanger_arrow.png \
   res/drawable-xhdpi/doorhanger_bg.9.png \
   res/drawable-xhdpi/doorhanger_shadow_bg.9.png \
   res/drawable-xhdpi/doorhanger_popup_bg.9.png \
   res/drawable-xhdpi/find_close.png \
   res/drawable-xhdpi/find_next.png \
   res/drawable-xhdpi/find_prev.png \
   res/drawable-xhdpi/urlbar_stop.png \
@@ -731,20 +720,16 @@ RES_DRAWABLE_LAND_MDPI_V14 = \
   res/drawable-land-mdpi-v14/address_bar_url_default.9.png \
   res/drawable-land-mdpi-v14/address_bar_url_pressed.9.png \
   res/drawable-land-mdpi-v14/remote_tabs_off.png \
   res/drawable-land-mdpi-v14/remote_tabs_on.png \
   res/drawable-land-mdpi-v14/tab_new.png \
   res/drawable-land-mdpi-v14/tab_new_normal.png \
   res/drawable-land-mdpi-v14/tab_new_pressed.png \
   res/drawable-land-mdpi-v14/tabs_carat.png \
-  res/drawable-land-mdpi-v14/tabs_crop_normal.png \
-  res/drawable-land-mdpi-v14/tabs_crop_pressed.png \
-  res/drawable-land-mdpi-v14/tabs_full_normal.png \
-  res/drawable-land-mdpi-v14/tabs_full_pressed.png \
   res/drawable-land-mdpi-v14/urlbar_stop.png \
   res/drawable-land-mdpi-v14/menu.png \
   res/drawable-land-mdpi-v14/menu_normal.png \
   res/drawable-land-mdpi-v14/menu_pressed.png \
   res/drawable-land-mdpi-v14/reader.png \
   res/drawable-land-mdpi-v14/site_security_identified.png \
   res/drawable-land-mdpi-v14/site_security_verified.png \
   $(NULL)
@@ -756,20 +741,16 @@ RES_DRAWABLE_LAND_HDPI_V14 = \
   res/drawable-land-hdpi-v14/address_bar_url_default.9.png \
   res/drawable-land-hdpi-v14/address_bar_url_pressed.9.png \
   res/drawable-land-hdpi-v14/remote_tabs_off.png \
   res/drawable-land-hdpi-v14/remote_tabs_on.png \
   res/drawable-land-hdpi-v14/tab_new.png \
   res/drawable-land-hdpi-v14/tab_new_normal.png \
   res/drawable-land-hdpi-v14/tab_new_pressed.png \
   res/drawable-land-hdpi-v14/tabs_carat.png \
-  res/drawable-land-hdpi-v14/tabs_crop_normal.png \
-  res/drawable-land-hdpi-v14/tabs_crop_pressed.png \
-  res/drawable-land-hdpi-v14/tabs_full_normal.png \
-  res/drawable-land-hdpi-v14/tabs_full_pressed.png \
   res/drawable-land-hdpi-v14/urlbar_stop.png \
   res/drawable-land-hdpi-v14/menu.png \
   res/drawable-land-hdpi-v14/menu_normal.png \
   res/drawable-land-hdpi-v14/menu_pressed.png \
   res/drawable-land-hdpi-v14/reader.png \
   res/drawable-land-hdpi-v14/site_security_identified.png \
   res/drawable-land-hdpi-v14/site_security_verified.png \
   $(NULL)
@@ -781,20 +762,16 @@ RES_DRAWABLE_LAND_XHDPI_V14 = \
   res/drawable-land-xhdpi-v14/address_bar_url_default.9.png \
   res/drawable-land-xhdpi-v14/address_bar_url_pressed.9.png \
   res/drawable-land-xhdpi-v14/remote_tabs_off.png \
   res/drawable-land-xhdpi-v14/remote_tabs_on.png \
   res/drawable-land-xhdpi-v14/tab_new.png \
   res/drawable-land-xhdpi-v14/tab_new_normal.png \
   res/drawable-land-xhdpi-v14/tab_new_pressed.png \
   res/drawable-land-xhdpi-v14/tabs_carat.png \
-  res/drawable-land-xhdpi-v14/tabs_crop_normal.png \
-  res/drawable-land-xhdpi-v14/tabs_crop_pressed.png \
-  res/drawable-land-xhdpi-v14/tabs_full_normal.png \
-  res/drawable-land-xhdpi-v14/tabs_full_pressed.png \
   res/drawable-land-xhdpi-v14/urlbar_stop.png \
   res/drawable-land-xhdpi-v14/menu.png \
   res/drawable-land-xhdpi-v14/menu_normal.png \
   res/drawable-land-xhdpi-v14/menu_pressed.png \
   res/drawable-land-xhdpi-v14/reader.png \
   res/drawable-land-xhdpi-v14/site_security_identified.png \
   res/drawable-land-xhdpi-v14/site_security_verified.png \
   $(NULL)
@@ -820,20 +797,16 @@ RES_DRAWABLE_LARGE_MDPI_V11 = \
   res/drawable-large-mdpi-v11/urlbar_stop.png \
   res/drawable-large-mdpi-v11/reader.png \
   res/drawable-large-mdpi-v11/site_security_identified.png \
   res/drawable-large-mdpi-v11/site_security_verified.png \
   res/drawable-large-mdpi-v11/menu.png \
   res/drawable-large-mdpi-v11/menu_normal.png \
   res/drawable-large-mdpi-v11/menu_pressed.png \
   res/drawable-large-mdpi-v11/tabs_carat.png \
-  res/drawable-large-mdpi-v11/tabs_crop_normal.png \
-  res/drawable-large-mdpi-v11/tabs_crop_pressed.png \
-  res/drawable-large-mdpi-v11/tabs_full_normal.png \
-  res/drawable-large-mdpi-v11/tabs_full_pressed.png \
   $(NULL)
 
 RES_DRAWABLE_LARGE_HDPI_V11 = \
   res/drawable-large-hdpi-v11/address_bar_texture_tablet.png \
   res/drawable-large-hdpi-v11/address_bar_back_button_bg.png \
   res/drawable-large-hdpi-v11/address_bar_back_button_pressed_bg.png \
   res/drawable-large-hdpi-v11/address_bar_url_default.9.png \
   res/drawable-large-hdpi-v11/address_bar_url_pressed.9.png \
@@ -851,20 +824,16 @@ RES_DRAWABLE_LARGE_HDPI_V11 = \
   res/drawable-large-hdpi-v11/urlbar_stop.png \
   res/drawable-large-hdpi-v11/reader.png \
   res/drawable-large-hdpi-v11/site_security_identified.png \
   res/drawable-large-hdpi-v11/site_security_verified.png \
   res/drawable-large-hdpi-v11/menu.png \
   res/drawable-large-hdpi-v11/menu_normal.png \
   res/drawable-large-hdpi-v11/menu_pressed.png \
   res/drawable-large-hdpi-v11/tabs_carat.png \
-  res/drawable-large-hdpi-v11/tabs_crop_normal.png \
-  res/drawable-large-hdpi-v11/tabs_crop_pressed.png \
-  res/drawable-large-hdpi-v11/tabs_full_normal.png \
-  res/drawable-large-hdpi-v11/tabs_full_pressed.png \
   $(NULL)
 
 RES_DRAWABLE_LARGE_XHDPI_V11 = \
   res/drawable-large-xhdpi-v11/address_bar_texture_tablet.png \
   res/drawable-large-xhdpi-v11/address_bar_back_button_bg.png \
   res/drawable-large-xhdpi-v11/address_bar_back_button_pressed_bg.png \
   res/drawable-large-xhdpi-v11/address_bar_url_default.9.png \
   res/drawable-large-xhdpi-v11/address_bar_url_pressed.9.png \
@@ -882,61 +851,45 @@ RES_DRAWABLE_LARGE_XHDPI_V11 = \
   res/drawable-large-xhdpi-v11/urlbar_stop.png \
   res/drawable-large-xhdpi-v11/reader.png \
   res/drawable-large-xhdpi-v11/site_security_identified.png \
   res/drawable-large-xhdpi-v11/site_security_verified.png \
   res/drawable-large-xhdpi-v11/menu.png \
   res/drawable-large-xhdpi-v11/menu_normal.png \
   res/drawable-large-xhdpi-v11/menu_pressed.png \
   res/drawable-large-xhdpi-v11/tabs_carat.png \
-  res/drawable-large-xhdpi-v11/tabs_crop_normal.png \
-  res/drawable-large-xhdpi-v11/tabs_crop_pressed.png \
-  res/drawable-large-xhdpi-v11/tabs_full_normal.png \
-  res/drawable-large-xhdpi-v11/tabs_full_pressed.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/menu.png \
-  res/drawable-xlarge-mdpi-v11/tabs_crop_button.xml \
+  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_crop_expanded_normal.png \
-  res/drawable-xlarge-mdpi-v11/tabs_crop_expanded_pressed.png \
   res/drawable-xlarge-mdpi-v11/tabs_level.xml \
-  res/drawable-xlarge-mdpi-v11/tabs_crop_normal.png \
-  res/drawable-xlarge-mdpi-v11/tabs_crop_pressed.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/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_crop_expanded_normal.png \
-  res/drawable-xlarge-hdpi-v11/tabs_crop_expanded_pressed.png \
-  res/drawable-xlarge-hdpi-v11/tabs_crop_normal.png \
-  res/drawable-xlarge-hdpi-v11/tabs_crop_pressed.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/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_crop_expanded_normal.png \
-  res/drawable-xlarge-xhdpi-v11/tabs_crop_expanded_pressed.png \
-  res/drawable-xlarge-xhdpi-v11/tabs_crop_normal.png \
-  res/drawable-xlarge-xhdpi-v11/tabs_crop_pressed.png \
   $(NULL)
 
 RES_COLOR = \
   res/color/menu_item_title.xml \
   $(NULL)
 
 RES_MENU = \
   res/menu/awesomebar_contextmenu.xml \
@@ -981,21 +934,17 @@ MOZ_ANDROID_DRAWABLES += \
   mobile/android/base/resources/drawable/progress_spinner_10.png                \
   mobile/android/base/resources/drawable/progress_spinner_11.png                \
   mobile/android/base/resources/drawable/progress_spinner_12.png                \
   mobile/android/base/resources/drawable/remote_tabs_level.xml                  \
   mobile/android/base/resources/drawable/start.png                              \
   mobile/android/base/resources/drawable/site_security_level.xml                \
   mobile/android/base/resources/drawable/suggestion_selector.xml                \
   mobile/android/base/resources/drawable/tab_new_button.xml                     \
-  mobile/android/base/resources/drawable/tabs_crop_button.xml                   \
-  mobile/android/base/resources/drawable/tabs_full_button.xml                   \
-  mobile/android/base/resources/drawable/tabs_crop_button_contracted.xml        \
-  mobile/android/base/resources/drawable/tabs_full_button_contracted.xml        \
-  mobile/android/base/resources/drawable/tabs_crop_button_expanded.xml          \
+  mobile/android/base/resources/drawable/tabs_button.xml                        \
   mobile/android/base/resources/drawable/tabs_level.xml                         \
   mobile/android/base/resources/drawable/tabs_tray_bg_repeat.xml                \
   mobile/android/base/resources/drawable/tabs_tray_selected_bg_repeat.xml       \
   mobile/android/base/resources/drawable/tabs_tray_active_selector.xml          \
   mobile/android/base/resources/drawable/tabs_tray_default_selector.xml         \
   mobile/android/base/resources/drawable/tabs_tray_list_divider.xml             \
   mobile/android/base/resources/drawable/tabs_shadow.xml                        \
   mobile/android/base/resources/drawable/shadow.png                             \
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/TabsButton.java
@@ -0,0 +1,163 @@
+/* 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/. */
+
+package org.mozilla.gecko;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.PorterDuffXfermode;
+import android.graphics.PorterDuff.Mode;
+import android.util.AttributeSet;
+import android.widget.ImageButton;
+
+public class TabsButton extends ImageButton 
+                        implements CanvasDelegate.DrawManager { 
+    Paint mPaint;
+
+    Path mPath;
+    Path mBackgroundPath;
+    Path mLeftCurve;
+    Path mRightCurve;
+
+    boolean mCropped;
+    int mFullWidth;
+    CurveTowards mSide;
+    CanvasDelegate mCanvasDelegate;
+
+    private enum CurveTowards { NONE, LEFT, RIGHT };
+
+    public TabsButton(Context context, AttributeSet attrs) {
+        super(context, attrs);
+
+        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.BrowserToolbarCurve);
+        int curveTowards = a.getInt(R.styleable.BrowserToolbarCurve_curveTowards, 0x02);
+        a.recycle();
+
+        a = context.obtainStyledAttributes(attrs, R.styleable.TabsButton);
+        mCropped = a.getBoolean(R.styleable.TabsButton_cropped, false);
+        a.recycle();
+
+        if (curveTowards == 0x00)
+            mSide = CurveTowards.NONE;
+        else if (curveTowards == 0x01)
+            mSide = CurveTowards.LEFT;
+        else
+            mSide = CurveTowards.RIGHT;
+
+        // Paint to draw the background.
+        mPaint = new Paint();
+        mPaint.setAntiAlias(true);
+        mPaint.setColor(0xFF000000);
+
+        // Path is masked.
+        mPath = new Path();
+        mBackgroundPath = new Path();
+        mLeftCurve = new Path();
+        mRightCurve = new Path();
+        mCanvasDelegate = new CanvasDelegate(this, Mode.DST_IN);
+
+        // Path might extend beyond the screen for smaller tabs button.
+        mFullWidth = (int) context.getResources().getDimension(R.dimen.tabs_button_full_width);
+    }
+
+    @Override
+    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+
+        int width = getMeasuredWidth();
+        int height = getMeasuredHeight();
+        float curve = height * 1.125f;
+
+        // The bounds for the rectangle to carve the curves.
+        float left;
+        float right;
+        float top;
+        float bottom;
+
+        if (mSide == CurveTowards.RIGHT) {
+            left = 0;
+            right = mFullWidth;
+            top = 0;
+            bottom = height;
+        } else {
+            left = width - mFullWidth;
+            right = width;
+            top = height;
+            bottom = 0;
+        }
+
+        mLeftCurve.reset();
+        mLeftCurve.moveTo(left, top);
+        mLeftCurve.cubicTo(left + (curve * 0.75f), top,
+                           left + (curve * 0.25f), bottom,
+                           left + curve, bottom);
+
+        mRightCurve.reset();
+        mRightCurve.moveTo(right, bottom);
+        mRightCurve.cubicTo(right - (curve * 0.75f), bottom,
+                            right - (curve * 0.25f), top,
+                            right - curve, top);
+
+        mPath.reset();
+
+        // Level 2: for phones: transparent.
+        //          for tablets: only one curve.
+        Drawable background = getBackground();
+
+        if (!(background.getCurrent() instanceof ColorDrawable)) {
+            if (background.getLevel() == 2) {
+                mPath.moveTo(left, top);
+                mPath.lineTo(left, bottom);
+                mPath.lineTo(right, bottom);
+                mPath.addPath(mRightCurve);
+                mPath.lineTo(left, top);
+            } else {
+                mPath.moveTo(left, top);
+                mPath.addPath(mLeftCurve);
+                mPath.lineTo(right, bottom);
+                mPath.addPath(mRightCurve);
+                mPath.lineTo(left, top);
+            }
+        }
+
+        if (mCropped) {
+            mBackgroundPath.reset();
+
+            if (mSide == CurveTowards.RIGHT) {
+                mBackgroundPath.moveTo(right, bottom);
+                mBackgroundPath.addPath(mRightCurve);
+                mBackgroundPath.lineTo(right, top);
+                mBackgroundPath.lineTo(right, bottom);
+            } else {
+                mBackgroundPath.moveTo(left, top);
+                mBackgroundPath.addPath(mLeftCurve);
+                mBackgroundPath.lineTo(left, bottom);
+                mBackgroundPath.lineTo(left, top);
+            }
+        }
+    }
+
+    @Override
+    public void draw(Canvas canvas) {
+        mCanvasDelegate.draw(canvas, mPath, getWidth(), getHeight());
+
+        Drawable background = getBackground();
+        if (background.getCurrent() instanceof ColorDrawable)
+            return;
+
+        // Additionally draw a black curve for cropped button's default level.
+        if (mCropped && background.getLevel() != 2)
+            canvas.drawPath(mBackgroundPath, mPaint);
+    }
+
+    @Override
+    public void defaultDraw(Canvas canvas) {
+        super.draw(canvas);
+    }
+}
deleted file mode 100644
index 86c42b1c405568f7655a2811c67b865bfd83185e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index dfd61eec0f1a9781481ab139e9d2ed7e1a395127..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 67f08841de29bb317b22a856d2cf92fde577b2a8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a0c1566bdb064abc5881bc6ebb4644984faa2829..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 736ac9979eb5d0591a1c1c3a0af0534b60c11d43..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 22693b3b6a839ecb8347848171b886cf5ff05861..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index dd63b3617626a42b3da2b951f2acdf8db199aa85..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index b43cfa5cfef2802fda0ca05a9d882fc07d47b6b9..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index fcd82c97bbae257650b800286b7c1ae3a51cbd19..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index bf051955574d7559d69e285c23f80500a3b85406..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index ae9da954d2326fd3a2fc6232051a51b07c524e44..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 5f434e1672104f7b10763645eae028cd92ea8987..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 566247d550e7548910ea5180eb5940dae225af5c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index c122e58b55e99a3652cb3795422efc1a3c23a492..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 6e961057047843478ee04070035de4ab8ae5c9f9..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 01acadf3e24121d31358cd9f4fd6abe734a528c3..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 62a065c1180e5230c3d121e38f0acd2e8cc8ec1d..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index fa796f8dc85cd1741a63e336bb82e57e3edff31e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 71e33b9f3f572519d2927a8d1db8c9a59c69814f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index cd785ee57aa84c82cd89bb85a9c1691a5006d1a2..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index ff2095151ac12d17c4a51aa9d3002799b5c7e893..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 592b15f159db6d568eb27ca06cb93bf967157a96..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 6102d718919aedf10edb11f54fb84a2848fca4d3..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d45a133503bd41f9689b174b8e5fc51264b064bb..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 0c48078d2d28c1cbc00abe8deb4105519d892265..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d419956a7f85e36c2f3bf0ee63b779d12307f091..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index ace26457690a151308cb19fe189f248ee1e47d38..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 085ecc26d48ac3b933441e7057379d9b22aaa2ef..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 52fb1e5dc3f56e171a568a2b42198e701f4bdf7d..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 70e1d68beedae071980a50d60e3059bcf796237d..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a94b452b2a0d0e0f1df1944535e31f28f038cc6f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 38159e74828e1df7fbfa861fe02c16a92a06998f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 8a9348013a7d1f2445b694402b62e5a0c6a68eab..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 4a0b0a0f189acbd7b597b52c9f6d48700de2d2cc..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 0bb1f267f2e93b6d6b98309e22da3206d4ee8432..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index aba9614a2907d013a30a896b98a9e93ae368b818..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_button.xml
@@ -0,0 +1,22 @@
+<?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/. -->
+
+<level-list xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item android:maxLevel="1">
+        <selector>
+            <item android:state_pressed="true" android:drawable="@drawable/highlight"/>
+            <item android:drawable="@drawable/tabs_tray_bg_repeat"/>
+        </selector>
+    </item>
+
+    <item android:maxLevel="2">
+        <selector>
+            <item android:state_pressed="true" android:drawable="@drawable/highlight"/>
+            <item android:drawable="@drawable/tabs_tray_bg_repeat"/>
+        </selector>
+    </item>
+
+</level-list>
deleted file mode 100644
--- a/mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_crop_button.xml
+++ /dev/null
@@ -1,11 +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/. -->
-
-<level-list xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item android:maxLevel="1" android:drawable="@drawable/tabs_crop_button_contracted"/>
-    <item android:maxLevel="2" android:drawable="@drawable/tabs_crop_button_expanded"/>
-
-</level-list>
deleted file mode 100644
index 18411a354a7b95ba2870ef389f1692829a80713b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 8f04068205e027182f9eb4f9f97cba8743e70efb..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 29eb6930393da5072d7ac97ebe3eb9a81904a6d2..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 0fbc66ca6533e5cc89a648e139660a45cc4e0a48..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2dd10b8539c6e5518726e036011c19b450968a76..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index e97d35d2e852ce6f87dce249db7ca39f5a3e280a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 05d9975a2ed4c4fe903a323d9b9a1577db8aa96f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 73e745cb25fb213b58389dd75d408312fb2ea34f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
rename from mobile/android/base/resources/drawable/tabs_full_button.xml
rename to mobile/android/base/resources/drawable/tabs_button.xml
--- a/mobile/android/base/resources/drawable/tabs_full_button.xml
+++ b/mobile/android/base/resources/drawable/tabs_button.xml
@@ -1,11 +1,17 @@
 <?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/. -->
 
 <level-list xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <item android:maxLevel="1" android:drawable="@drawable/tabs_full_button_contracted"/>
+    <item android:maxLevel="1">
+        <selector>
+            <item android:state_pressed="true" android:drawable="@drawable/highlight"/>
+            <item android:drawable="@drawable/tabs_tray_bg_repeat"/>
+        </selector>
+    </item>
+
     <item android:maxLevel="2" android:drawable="@android:color/transparent"/>
 
 </level-list>
deleted file mode 100644
--- a/mobile/android/base/resources/drawable/tabs_crop_button.xml
+++ /dev/null
@@ -1,11 +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/. -->
-
-<level-list xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item android:maxLevel="1" android:drawable="@drawable/tabs_crop_button_contracted"/>
-    <item android:maxLevel="2" android:drawable="@android:color/transparent"/>
-
-</level-list>
deleted file mode 100644
--- a/mobile/android/base/resources/drawable/tabs_crop_button_contracted.xml
+++ /dev/null
@@ -1,11 +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/. -->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item android:state_pressed="true" android:drawable="@drawable/tabs_crop_pressed"/>
-    <item android:drawable="@drawable/tabs_crop_normal"/>
-
-</selector>
deleted file mode 100644
--- a/mobile/android/base/resources/drawable/tabs_crop_button_expanded.xml
+++ /dev/null
@@ -1,11 +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/. -->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item android:state_pressed="true" android:drawable="@drawable/tabs_crop_expanded_pressed"/>
-    <item android:drawable="@drawable/tabs_crop_expanded_normal"/>
-
-</selector>
deleted file mode 100644
index f89aaa57b38fb1d9183edcdc6cbc968722c9cbf1..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 7e90d95e8c0bdebf5be0768d333bb51b691edb59..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/mobile/android/base/resources/drawable/tabs_full_button_contracted.xml
+++ /dev/null
@@ -1,11 +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/. -->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item android:state_pressed="true" android:drawable="@drawable/tabs_full_pressed"/>
-    <item android:drawable="@drawable/tabs_full_normal"/>
-
-</selector>
deleted file mode 100644
index 9ce78641436c1fcb54479b16483ce96ebfc94c69..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 3d037ec79ce80b22c0db34a447f769f089a3701c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
rename from mobile/android/base/resources/layout-land-v14/browser_toolbar.xml
rename to mobile/android/base/resources/layout-land-v14/browser_toolbar.xml.in
--- a/mobile/android/base/resources/layout-land-v14/browser_toolbar.xml
+++ b/mobile/android/base/resources/layout-land-v14/browser_toolbar.xml.in
@@ -1,14 +1,16 @@
+#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">
 
         <ImageButton android:id="@+id/back"
                      android:contentDescription="@string/back"
@@ -28,25 +30,27 @@
                                                     android:layout_marginRight="14dip"
                                                     android:layout_alignParentTop="true"
                                                     android:layout_alignParentRight="true"
                                                     android:background="@drawable/address_bar_bg"/>
 
         <ImageButton android:id="@+id/menu"
                      style="@style/AddressBar.ImageButton.Unused"/>
 
-        <ImageButton android:id="@+id/tabs"
-                     style="@style/AddressBar.ImageButton"
-                     android:layout_width="60dip"
-                     android:layout_alignParentRight="true"
-                     android:background="@drawable/tabs_crop_button"
-                     android:gravity="center_vertical"
-                     android:src="@drawable/tabs_level"
-                     android:paddingLeft="30dip"
-                     android:paddingRight="10dip"/>
+        <org.mozilla.gecko.TabsButton android:id="@+id/tabs"
+                                      style="@style/AddressBar.ImageButton"
+                                      android:layout_width="60dip"
+                                      android:layout_alignParentRight="true"
+                                      gecko:curveTowards="right"
+                                      gecko:cropped="true"
+                                      android:background="@drawable/tabs_button"
+                                      android:gravity="center_vertical"
+                                      android:src="@drawable/tabs_level"
+                                      android:paddingLeft="30dip"
+                                      android:paddingRight="10dip"/>
 
         <TextSwitcher android:id="@+id/tabs_count"
                      style="@style/AddressBar.ImageButton"
                      android:layout_width="39dip"
                      android:layout_height="wrap_content"
                      android:layout_marginTop="4.5dp"
                      android:layout_alignRight="@id/tabs"
                      android:gravity="center_horizontal"/>
rename from mobile/android/base/resources/layout-land-v14/browser_toolbar_menu.xml
rename to mobile/android/base/resources/layout-land-v14/browser_toolbar_menu.xml.in
--- a/mobile/android/base/resources/layout-land-v14/browser_toolbar_menu.xml
+++ b/mobile/android/base/resources/layout-land-v14/browser_toolbar_menu.xml.in
@@ -1,14 +1,16 @@
+#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">
 
         <ImageButton android:id="@+id/back"
                      android:contentDescription="@string/back"
@@ -36,26 +38,27 @@
                      android:layout_alignParentRight="true"
                      android:gravity="center_vertical"
                      android:src="@drawable/menu_level"
                      android:contentDescription="@string/menu"
                      android:background="@drawable/menu_button"
                      android:paddingLeft="35dip"
                      android:paddingRight="10dip"/>
 
-        <ImageButton android:id="@+id/tabs"
-                     style="@style/AddressBar.ImageButton"
-                     android:layout_width="80dip"
-                     android:layout_marginRight="15dip"
-                     android:layout_alignParentRight="true"
-                     android:background="@drawable/tabs_full_button"
-                     android:gravity="center_vertical"
-                     android:src="@drawable/tabs_level"
-                     android:paddingLeft="30dip"
-                     android:paddingRight="30dip"/>
+        <org.mozilla.gecko.TabsButton android:id="@+id/tabs"
+                                      style="@style/AddressBar.ImageButton"
+                                      android:layout_width="80dip"
+                                      android:layout_marginRight="15dip"
+                                      android:layout_alignParentRight="true"
+                                      gecko:curveTowards="right"
+                                      android:background="@drawable/tabs_button"
+                                      android:gravity="center_vertical"
+                                      android:src="@drawable/tabs_level"
+                                      android:paddingLeft="30dip"
+                                      android:paddingRight="30dip"/>
 
         <TextSwitcher android:id="@+id/tabs_count"
                      style="@style/AddressBar.ImageButton"
                      android:layout_width="80dip"
                      android:layout_height="wrap_content"
                      android:layout_marginTop="4.5dp"
                      android:layout_alignRight="@id/tabs"
                      android:gravity="center_horizontal"/>
rename from mobile/android/base/resources/layout-large-v11/browser_toolbar_menu.xml
rename to mobile/android/base/resources/layout-large-v11/browser_toolbar_menu.xml.in
--- a/mobile/android/base/resources/layout-large-v11/browser_toolbar_menu.xml
+++ b/mobile/android/base/resources/layout-large-v11/browser_toolbar_menu.xml.in
@@ -1,14 +1,16 @@
+#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:layout_width="fill_parent"
                                                     android:layout_height="fill_parent"
@@ -24,26 +26,27 @@
                      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"/>
 
-        <ImageButton android:id="@+id/tabs"
-                     style="@style/AddressBar.ImageButton"
-                     android:layout_width="112dip"
-                     android:layout_marginRight="28dip"
-                     android:layout_alignParentRight="true"
-                     android:background="@drawable/tabs_full_button"
-                     android:gravity="center_vertical"
-                     android:src="@drawable/tabs_level"
-                     android:paddingLeft="42dip"
-                     android:paddingRight="42dip"/>
+        <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"/>
 
         <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"/>
rename from mobile/android/base/resources/layout-xlarge-v11/awesomebar_search.xml
rename to mobile/android/base/resources/layout-xlarge-v11/awesomebar_search.xml.in
--- a/mobile/android/base/resources/layout-xlarge-v11/awesomebar_search.xml
+++ b/mobile/android/base/resources/layout-xlarge-v11/awesomebar_search.xml.in
@@ -1,23 +1,27 @@
+#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/. -->
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+                xmlns:gecko="http://schemas.android.com/apk/res/@ANDROID_PACKAGE_NAME@"
                 style="@style/AwesomeBar"
                 android:background="@drawable/address_bar_bg">
 
-    <ImageView android:id="@+id/dummy_tab"
-               style="@style/AddressBar.ImageButton"
-               android:layout_width="84dip"
-               android:layout_alignParentLeft="true"
-               android:background="@drawable/tabs_crop_normal"
-               android:gravity="center_vertical"/>
+    <org.mozilla.gecko.TabsButton android:id="@+id/dummy_tab"
+                                  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"/>
 
     <view class="org.mozilla.gecko.CustomEditText"
           android:id="@+id/awesomebar_text"
           style="@style/AddressBar.Button"
           android:background="@drawable/address_bar_url"
           android:layout_marginLeft="0dip"
           android:layout_marginRight="56dip"
           android:layout_marginTop="6dip"
rename from mobile/android/base/resources/layout-xlarge-v11/browser_toolbar_menu.xml
rename to mobile/android/base/resources/layout-xlarge-v11/browser_toolbar_menu.xml.in
--- a/mobile/android/base/resources/layout-xlarge-v11/browser_toolbar_menu.xml
+++ b/mobile/android/base/resources/layout-xlarge-v11/browser_toolbar_menu.xml.in
@@ -1,30 +1,34 @@
+#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"
                     android:background="@drawable/address_bar_bg">
 
-        <ImageButton android:id="@+id/tabs"
-                     style="@style/AddressBar.ImageButton"
-                     android:layout_width="84dip"
-                     android:layout_alignParentLeft="true"
-                     android:background="@drawable/tabs_crop_button"
-                     android:gravity="center_vertical"
-                     android:src="@drawable/tabs_level"
-                     android:paddingLeft="6dip"
-                     android:paddingRight="32dip"/>
+        <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"/>
 
         <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"/>
rename from mobile/android/base/resources/layout/browser_toolbar.xml
rename to mobile/android/base/resources/layout/browser_toolbar.xml.in
--- a/mobile/android/base/resources/layout/browser_toolbar.xml
+++ b/mobile/android/base/resources/layout/browser_toolbar.xml.in
@@ -1,14 +1,16 @@
+#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">
 
         <ImageButton android:id="@+id/back"
                      android:contentDescription="@string/back"
@@ -28,25 +30,27 @@
                                                     android:layout_marginRight="17dip"
                                                     android:layout_alignParentTop="true"
                                                     android:layout_alignParentRight="true"
                                                     android:background="@drawable/address_bar_bg"/>
 
         <ImageButton android:id="@+id/menu"
                      style="@style/AddressBar.ImageButton.Unused"/>
 
-        <ImageButton android:id="@+id/tabs"
-                     style="@style/AddressBar.ImageButton"
-                     android:layout_width="72dip"
-                     android:layout_alignParentRight="true"
-                     android:background="@drawable/tabs_crop_button"
-                     android:gravity="center_vertical"
-                     android:src="@drawable/tabs_level"
-                     android:paddingLeft="38dip"
-                     android:paddingRight="10dip"/>
+        <org.mozilla.gecko.TabsButton android:id="@+id/tabs"
+                                      style="@style/AddressBar.ImageButton"
+                                      android:layout_width="72dip"
+                                      android:layout_alignParentRight="true"
+                                      gecko:curveTowards="right"
+                                      gecko:cropped="true"
+                                      android:background="@drawable/tabs_button"
+                                      android:gravity="center_vertical"
+                                      android:src="@drawable/tabs_level"
+                                      android:paddingLeft="38dip"
+                                      android:paddingRight="10dip"/>
 
         <TextSwitcher android:id="@+id/tabs_count"
                      style="@style/AddressBar.ImageButton"
                      android:layout_width="44.5dip"
                      android:layout_height="wrap_content"
                      android:layout_marginTop="5dp"
                      android:layout_alignRight="@id/tabs"
                      android:gravity="center_horizontal"/>
rename from mobile/android/base/resources/layout/browser_toolbar_menu.xml
rename to mobile/android/base/resources/layout/browser_toolbar_menu.xml.in
--- a/mobile/android/base/resources/layout/browser_toolbar_menu.xml
+++ b/mobile/android/base/resources/layout/browser_toolbar_menu.xml.in
@@ -1,14 +1,16 @@
+#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">
 
         <ImageButton android:id="@+id/back"
                      android:contentDescription="@string/back"
@@ -29,34 +31,35 @@
                                                     android:layout_alignParentTop="true"
                                                     android:layout_alignParentRight="true"
                                                     android:background="@drawable/address_bar_bg"/>
 
         <ImageButton android:id="@+id/menu"
                      style="@style/AddressBar.ImageButton"
                      android:layout_width="78dip"
                      android:layout_alignParentRight="true"
+                     gecko:curveTowards="right"
                      android:gravity="center_vertical"
                      android:src="@drawable/menu_level"
                      android:contentDescription="@string/menu"
                      android:background="@drawable/menu_button"
                      android:paddingLeft="42dip"
                      android:paddingRight="12dip"
                      android:visibility="gone"/>
 
-        <ImageButton android:id="@+id/tabs"
-                     style="@style/AddressBar.ImageButton"
-                     android:layout_width="98dip"
-                     android:layout_marginRight="22dip"
-                     android:layout_alignParentRight="true"
-                     android:background="@drawable/tabs_full_button"
-                     android:gravity="center_vertical"
-                     android:src="@drawable/tabs_level"
-                     android:paddingLeft="38dip"
-                     android:paddingRight="36dip"/>
+        <org.mozilla.gecko.TabsButton android:id="@+id/tabs"
+                                      style="@style/AddressBar.ImageButton"
+                                      android:layout_width="98dip"
+                                      android:layout_marginRight="22dip"
+                                      android:layout_alignParentRight="true"
+                                      android:background="@drawable/tabs_button"
+                                      android:gravity="center_vertical"
+                                      android:src="@drawable/tabs_level"
+                                      android:paddingLeft="38dip"
+                                      android:paddingRight="36dip"/>
 
         <TextSwitcher android:id="@+id/tabs_count"
                      style="@style/AddressBar.ImageButton"
                      android:layout_width="98dip"
                      android:layout_height="wrap_content"
                      android:layout_marginTop="5dp"
                      android:layout_alignRight="@id/tabs"
                      android:gravity="center_horizontal"/>
--- a/mobile/android/base/resources/values-land-v14/dimens.xml
+++ b/mobile/android/base/resources/values-land-v14/dimens.xml
@@ -3,10 +3,11 @@
    - 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>
 
     <dimen name="browser_toolbar_height">40dp</dimen>
     <dimen name="browser_toolbar_icon_width">46dp</dimen>
     <dimen name="tabs_counter_size">18sp</dimen>
+    <dimen name="tabs_button_full_width">80dp</dimen>
 
 </resources>
--- a/mobile/android/base/resources/values-large-v11/dimens.xml
+++ b/mobile/android/base/resources/values-large-v11/dimens.xml
@@ -3,10 +3,11 @@
    - 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>
 
     <dimen name="browser_toolbar_height">56dp</dimen>
     <dimen name="browser_toolbar_icon_width">45dp</dimen>
     <dimen name="tabs_counter_size">26sp</dimen>
+    <dimen name="tabs_button_full_width">112dp</dimen>
 
 </resources>
--- a/mobile/android/base/resources/values/attrs.xml
+++ b/mobile/android/base/resources/values/attrs.xml
@@ -1,45 +1,57 @@
 <?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>
 
     <declare-styleable name="AboutHomeSection">
-         <attr name="title" format="string"/>
-         <attr name="subtitle" format="string"/>
-         <attr name="more_text" format="string"/>
+        <attr name="title" format="string"/>
+        <attr name="subtitle" format="string"/>
+        <attr name="more_text" format="string"/>
     </declare-styleable>
 
     <declare-styleable name="MenuItem">
         <attr name="id" format="string"/>
         <attr name="orderInCategory" format="string"/>
         <attr name="title"/>
         <attr name="icon" format="string"/>
         <attr name="checkable" format="boolean"/>
         <attr name="checked" format="boolean"/>
         <attr name="visible" format="string"/>
         <attr name="enabled" format="string"/>
         <attr name="showAsAction" format="boolean"/>
     </declare-styleable>
 
     <declare-styleable name="FlowLayout">
-         <attr name="spacing" format="dimension"/>
+        <attr name="spacing" format="dimension"/>
     </declare-styleable>
 
     <declare-styleable name="MultiChoicePreference">
-         <attr name="entries" format="string"/>
-         <attr name="entryKeys" format="string"/>
-         <attr name="initialValues" format="string"/>
+        <attr name="entries" format="string"/>
+        <attr name="entryKeys" format="string"/>
+        <attr name="initialValues" format="string"/>
+    </declare-styleable>
+
+    <declare-styleable name="BrowserToolbarCurve">
+        <attr name="curveTowards">
+            <flag name="none" value="0x00" />
+            <flag name="left" value="0x01" />
+            <flag name="right" value ="0x02" />
+        </attr>
+    </declare-styleable>
+
+    <declare-styleable name="TabsButton">
+        <attr name="cropped" format="boolean"/>
     </declare-styleable>
 
     <declare-styleable name="TabsPanel">
-         <attr name="sidebar" format="boolean"/>
+        <attr name="sidebar" format="boolean"/>
     </declare-styleable>
 
     <declare-styleable name="TextSelectionHandle">
-         <attr name="handleType" format="string"/>
+        <attr name="handleType" format="string"/>
     </declare-styleable>
 
 </resources>
 
--- a/mobile/android/base/resources/values/dimens.xml
+++ b/mobile/android/base/resources/values/dimens.xml
@@ -27,17 +27,18 @@
     <dimen name="prompt_service_icon_text_padding">10dp</dimen>
     <dimen name="prompt_service_left_right_text_with_icon_padding">10dp</dimen>
     <dimen name="prompt_service_top_bottom_text_with_icon_padding">8dp</dimen>
     <dimen name="remote_tab_child_row_height">54dp</dimen>
     <dimen name="remote_tab_group_row_height">26dp</dimen>
     <dimen name="popup_width">400dp</dimen>
     <dimen name="tab_thumbnail_height">78dp</dimen>
     <dimen name="tab_thumbnail_width">136dp</dimen>
+    <dimen name="tabs_button_full_width">98dp</dimen>
+    <dimen name="tabs_counter_size">22sp</dimen>
     <dimen name="tabs_list_divider_height">2dp</dimen>
-    <dimen name="tabs_counter_size">22sp</dimen>
     <dimen name="text_selection_handle_width">30dp</dimen>
     <dimen name="text_selection_handle_height">44dp</dimen>
     <dimen name="text_selection_handle_shadow">2dp</dimen>
     <dimen name="validation_message_height">50dp</dimen>
     <dimen name="validation_message_margin_top">6dp</dimen>
 
 </resources>