Bug 806937: Private browsing mode for Tabs button. [r=mfinkle]
authorSriram Ramasubramanian <sriram@mozilla.com>
Thu, 15 Nov 2012 23:59:25 -0800
changeset 123495 944db176184ee602ff57e89402feac373000f306
parent 123494 e0a0a5b98b954e58c5e4450e543e832dc06bfef5
child 123496 984a10bc4125972a06cc58e5e44fe77867be9051
push id2151
push userlsblakk@mozilla.com
push dateTue, 19 Feb 2013 18:06:57 +0000
treeherdermozilla-beta@4952e88741ec [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmfinkle
bugs806937
milestone20.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 806937: Private browsing mode for Tabs button. [r=mfinkle]
mobile/android/base/BrowserToolbar.java
mobile/android/base/GeckoViewsFactory.java
mobile/android/base/Makefile.in
mobile/android/base/ShapedButton.java
mobile/android/base/TabsButton.java
mobile/android/base/resources/color/tabs_counter_color.xml.in
mobile/android/base/resources/drawable-hdpi/tabs_carat_pb.png
mobile/android/base/resources/drawable-land-hdpi-v14/tabs_carat_pb.png
mobile/android/base/resources/drawable-land-mdpi-v14/tabs_carat_pb.png
mobile/android/base/resources/drawable-land-xhdpi-v14/tabs_carat_pb.png
mobile/android/base/resources/drawable-large-hdpi-v11/tabs_carat_pb.png
mobile/android/base/resources/drawable-large-mdpi-v11/tabs_carat_pb.png
mobile/android/base/resources/drawable-large-xhdpi-v11/tabs_carat_pb.png
mobile/android/base/resources/drawable-nodpi/tabs_tray_bg_pb.png
mobile/android/base/resources/drawable-xhdpi/tabs_carat_pb.png
mobile/android/base/resources/drawable-xlarge-hdpi-v11/tabs_carat_contracted_pb.png
mobile/android/base/resources/drawable-xlarge-hdpi-v11/tabs_carat_expanded_pb.png
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_button.xml
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_button.xml.in
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_carat_contracted_pb.png
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_carat_expanded_pb.png
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_level.xml
mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_level.xml.in
mobile/android/base/resources/drawable-xlarge-xhdpi-v11/tabs_carat_contracted_pb.png
mobile/android/base/resources/drawable-xlarge-xhdpi-v11/tabs_carat_expanded_pb.png
mobile/android/base/resources/drawable/tabs_button.xml
mobile/android/base/resources/drawable/tabs_button.xml.in
mobile/android/base/resources/drawable/tabs_carat_pb.png
mobile/android/base/resources/drawable/tabs_level.xml
mobile/android/base/resources/drawable/tabs_level.xml.in
mobile/android/base/resources/drawable/tabs_tray_bg_pb_repeat.xml
mobile/android/base/resources/layout-land-v14/browser_toolbar.xml.in
mobile/android/base/resources/layout-land-v14/browser_toolbar_menu.xml.in
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/browser_toolbar.xml.in
mobile/android/base/resources/layout/browser_toolbar_menu.xml.in
mobile/android/base/resources/layout/tabs_counter.xml
mobile/android/base/resources/values/colors.xml
--- a/mobile/android/base/BrowserToolbar.java
+++ b/mobile/android/base/BrowserToolbar.java
@@ -34,17 +34,16 @@ import android.view.animation.Decelerate
 import android.view.animation.TranslateAnimation;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.Button;
 import android.widget.ImageButton;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.PopupWindow;
 import android.widget.RelativeLayout;
-import android.widget.TextSwitcher;
 import android.widget.TextView;
 import android.widget.ViewSwitcher;
 
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
 public class BrowserToolbar implements ViewSwitcher.ViewFactory,
@@ -55,26 +54,26 @@ public class BrowserToolbar implements V
     private LinearLayout mLayout;
     private View mAwesomeBar;
     private GeckoFrameLayout mAwesomeBarRightEdge;
     private BrowserToolbarBackground mAddressBarBg;
     private GeckoTextView mTitle;
     private int mTitlePadding;
     private boolean mSiteSecurityVisible;
     private boolean mAnimateSiteSecurity;
-    private ImageButton mTabs;
+    private GeckoImageButton mTabs;
     private int mTabsPaneWidth;
     private ImageView mBack;
     private ImageView mForward;
     public ImageButton mFavicon;
     public ImageButton mStop;
     public ImageButton mSiteSecurity;
     public ImageButton mReader;
     private AnimationDrawable mProgressSpinner;
-    private TextSwitcher mTabsCount;
+    private GeckoTextSwitcher mTabsCount;
     private ImageView mShadow;
     private ImageButton mMenu;
     private LinearLayout mActionItemBar;
     private MenuPopup mMenuPopup;
     private List<View> mFocusOrder;
 
     final private BrowserApp mActivity;
     private LayoutInflater mInflater;
@@ -174,25 +173,25 @@ public class BrowserToolbar implements V
                     // if there is no tab, remove anything tab dependent
                     menu.findItem(R.id.copyurl).setVisible(false);
                     menu.findItem(R.id.share).setVisible(false);
                     menu.findItem(R.id.add_to_launcher).setVisible(false);
                 }
             }
         });
 
-        mTabs = (ImageButton) mLayout.findViewById(R.id.tabs);
+        mTabs = (GeckoImageButton) mLayout.findViewById(R.id.tabs);
         mTabs.setOnClickListener(new Button.OnClickListener() {
             public void onClick(View v) {
                 toggleTabs();
             }
         });
         mTabs.setImageLevel(0);
 
-        mTabsCount = (TextSwitcher) mLayout.findViewById(R.id.tabs_count);
+        mTabsCount = (GeckoTextSwitcher) mLayout.findViewById(R.id.tabs_count);
         mTabsCount.removeAllViews();
         mTabsCount.setFactory(this);
         mTabsCount.setText("");
         mCount = 0;
         if (Build.VERSION.SDK_INT >= 16) {
             // This adds the TextSwitcher to the a11y node tree, where we in turn
             // could make it return an empty info node. If we don't do this the
             // TextSwitcher's child TextViews get picked up, and we don't want
@@ -467,23 +466,27 @@ public class BrowserToolbar implements V
 
         mTabsCount.setText(String.valueOf(count));
         mTabs.setContentDescription((count > 1) ?
                                     mActivity.getString(R.string.num_tabs, count) :
                                     mActivity.getString(R.string.one_tab));
         mCount = count;
         mHandler.postDelayed(new Runnable() {
             public void run() {
-                ((TextView) mTabsCount.getCurrentView()).setTextColor(mActivity.getResources().getColor(R.color.url_bar_text_highlight));
+                GeckoTextView view = (GeckoTextView) mTabsCount.getCurrentView();
+                view.setSelected(true);
+                view.setPrivateMode(false);
             }
         }, mDuration);
 
         mHandler.postDelayed(new Runnable() {
             public void run() {
-                ((TextView) mTabsCount.getCurrentView()).setTextColor(mActivity.getResources().getColor(R.color.tabs_counter_color));
+                GeckoTextView view = (GeckoTextView) mTabsCount.getCurrentView();
+                view.setSelected(false);
+                view.setPrivateMode(Tabs.getInstance().getSelectedTab().isPrivate());
             }
         }, 2 * mDuration);
     }
 
     public void updateTabCount(int count) {
         mTabsCount.setCurrentText(String.valueOf(count));
         mTabs.setContentDescription((count > 1) ?
                                     mActivity.getString(R.string.num_tabs, count) :
@@ -787,16 +790,19 @@ public class BrowserToolbar implements V
 
             mAddressBarBg.setPrivateMode(tab.isPrivate());
 
             if (mAwesomeBar instanceof GeckoButton)
                 ((GeckoButton) mAwesomeBar).setPrivateMode(tab.isPrivate());
             else if (mAwesomeBar instanceof GeckoRelativeLayout)
                 ((GeckoRelativeLayout) mAwesomeBar).setPrivateMode(tab.isPrivate());
 
+            mTabs.setPrivateMode(tab.isPrivate());
+            mTabsCount.setPrivateMode(tab.isPrivate());
+            ((GeckoTextView) mTabsCount.getCurrentView()).setPrivateMode(tab.isPrivate());
             mTitle.setPrivateMode(tab.isPrivate());
         }
     }
 
     public void destroy() {
         // The action-items views are reused on rotation.
         // Remove them from their parent, so they can be re-attached to new parent.
         mActionItemBar.removeAllViews();
--- a/mobile/android/base/GeckoViewsFactory.java
+++ b/mobile/android/base/GeckoViewsFactory.java
@@ -91,16 +91,18 @@ public final class GeckoViewsFactory imp
             else if (TextUtils.equals(viewName, "ImageButton"))
                 return new GeckoImageButton(context, attrs);
             else if (TextUtils.equals(viewName, "ImageView"))
                 return new GeckoImageView(context, attrs);
             else if (TextUtils.equals(viewName, "LinearLayout"))
                 return new GeckoLinearLayout(context, attrs);
             else if (TextUtils.equals(viewName, "RelativeLayout"))
                 return new GeckoRelativeLayout(context, attrs);
+            else if (TextUtils.equals(viewName, "TextSwitcher"))
+                return new GeckoTextSwitcher(context, attrs);
             else if (TextUtils.equals(viewName, "TextView"))
                 return new GeckoTextView(context, attrs);
             else
                 Log.d(LOGTAG, "Warning: unknown custom view: " + viewName);
         }
 
         return null;
     }
--- a/mobile/android/base/Makefile.in
+++ b/mobile/android/base/Makefile.in
@@ -191,16 +191,17 @@ endif
 
 FENNEC_PP_JAVA_VIEW_FILES = \
   GeckoButton.java \
   GeckoImageButton.java \
   GeckoImageView.java \
   GeckoFrameLayout.java \
   GeckoLinearLayout.java \
   GeckoRelativeLayout.java \
+  GeckoTextSwitcher.java \
   GeckoTextView.java \
   $(NULL)
 
 FENNEC_PP_JAVA_FILES = \
   App.java \
   MarketplaceApp.java \
   WebApp.java \
   WebApps.java \
@@ -217,18 +218,23 @@ FENNEC_PP_JAVA_FILES = \
   db/GeckoProvider.java \
   SmsManager.java \
   UpdateServiceHelper.java \
   $(NULL)
 
 FENNEC_PP_XML_FILES = \
   res/color/awesome_bar_title.xml \
   res/color/awesome_bar_title_hint.xml \
+  res/color/tabs_counter_color.xml \
   res/drawable/address_bar_bg.xml \
   res/drawable/address_bar_url.xml \
+  res/drawable/tabs_button.xml \
+  res/drawable/tabs_level.xml \
+  res/drawable-xlarge-mdpi-v11/tabs_button.xml \
+  res/drawable-xlarge-mdpi-v11/tabs_level.xml \
   res/layout/abouthome_content.xml \
   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 \
@@ -473,16 +479,17 @@ RES_ANIM = \
   res/anim/grow_fade_in.xml \
   res/anim/grow_fade_in_center.xml \
   res/anim/shrink_fade_out.xml \
   $(NULL)
 
 RES_DRAWABLE_NODPI = \
   res/drawable-nodpi/abouthome_bg.png \
   res/drawable-nodpi/tabs_tray_bg.png \
+  res/drawable-nodpi/tabs_tray_bg_pb.png \
   res/drawable-nodpi/tabs_tray_selected_bg.png \
   $(NULL)
 
 RES_DRAWABLE_BASE = \
   res/drawable/favicon.png \
   res/drawable/folder.png \
   res/drawable/abouthome_icon.png \
   res/drawable/abouthome_logo.png \
@@ -519,16 +526,17 @@ RES_DRAWABLE_BASE = \
   res/drawable/ic_status_logo.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_carat_pb.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_texture_port_pb.png \
   res/drawable/address_bar_url_default.9.png \
   res/drawable/address_bar_url_default_pb.9.png \
@@ -599,16 +607,17 @@ RES_DRAWABLE_HDPI = \
   res/drawable-hdpi/ic_status_logo.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_carat_pb.png \
   res/drawable-hdpi/address_bar_texture_port.png \
   res/drawable-hdpi/address_bar_texture_port_pb.png \
   res/drawable-hdpi/address_bar_url_default.9.png \
   res/drawable-hdpi/address_bar_url_default_pb.9.png \
   res/drawable-hdpi/address_bar_url_pressed.9.png \
   res/drawable-hdpi/address_bar_url_pressed_pb.9.png \
   res/drawable-hdpi/doorhanger_arrow.png \
   res/drawable-hdpi/doorhanger_bg.9.png \
@@ -670,16 +679,17 @@ RES_DRAWABLE_XHDPI = \
   res/drawable-xhdpi/ic_menu_new_tab.png \
   res/drawable-xhdpi/ic_menu_reload.png \
   res/drawable-xhdpi/ic_status_logo.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_carat_pb.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 \
@@ -814,16 +824,17 @@ RES_DRAWABLE_LAND_MDPI_V14 = \
   res/drawable-land-mdpi-v14/address_bar_url_default.9.png \
   res/drawable-land-mdpi-v14/address_bar_url_default_pb.9.png \
   res/drawable-land-mdpi-v14/address_bar_url_pressed.9.png \
   res/drawable-land-mdpi-v14/address_bar_url_pressed_pb.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/tabs_carat.png \
+  res/drawable-land-mdpi-v14/tabs_carat_pb.png \
   res/drawable-land-mdpi-v14/urlbar_stop.png \
   res/drawable-land-mdpi-v14/menu.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)
 
 RES_DRAWABLE_LAND_HDPI_V14 = \
@@ -834,16 +845,17 @@ RES_DRAWABLE_LAND_HDPI_V14 = \
   res/drawable-land-hdpi-v14/address_bar_url_default.9.png \
   res/drawable-land-hdpi-v14/address_bar_url_default_pb.9.png \
   res/drawable-land-hdpi-v14/address_bar_url_pressed.9.png \
   res/drawable-land-hdpi-v14/address_bar_url_pressed_pb.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/tabs_carat.png \
+  res/drawable-land-hdpi-v14/tabs_carat_pb.png \
   res/drawable-land-hdpi-v14/urlbar_stop.png \
   res/drawable-land-hdpi-v14/menu.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)
 
 RES_DRAWABLE_LAND_XHDPI_V14 = \
@@ -854,16 +866,17 @@ RES_DRAWABLE_LAND_XHDPI_V14 = \
   res/drawable-land-xhdpi-v14/address_bar_url_default.9.png \
   res/drawable-land-xhdpi-v14/address_bar_url_default_pb.9.png \
   res/drawable-land-xhdpi-v14/address_bar_url_pressed.9.png \
   res/drawable-land-xhdpi-v14/address_bar_url_pressed_pb.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/tabs_carat.png \
+  res/drawable-land-xhdpi-v14/tabs_carat_pb.png \
   res/drawable-land-xhdpi-v14/urlbar_stop.png \
   res/drawable-land-xhdpi-v14/menu.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)
 
 RES_DRAWABLE_LARGE_MDPI_V11 = \
@@ -887,16 +900,17 @@ RES_DRAWABLE_LARGE_MDPI_V11 = \
   res/drawable-large-mdpi-v11/remote_tabs_on.png \
   res/drawable-large-mdpi-v11/tab_new.png \
   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/tabs_carat.png \
+  res/drawable-large-mdpi-v11/tabs_carat_pb.png \
   $(NULL)
 
 RES_DRAWABLE_LARGE_HDPI_V11 = \
   res/drawable-large-hdpi-v11/address_bar_texture_tablet.png \
   res/drawable-large-hdpi-v11/address_bar_texture_tablet_pb.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 \
@@ -913,16 +927,17 @@ RES_DRAWABLE_LARGE_HDPI_V11 = \
   res/drawable-large-hdpi-v11/remote_tabs_on.png \
   res/drawable-large-hdpi-v11/tab_new.png \
   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/tabs_carat.png \
+  res/drawable-large-hdpi-v11/tabs_carat_pb.png \
   $(NULL)
 
 RES_DRAWABLE_LARGE_XHDPI_V11 = \
   res/drawable-large-xhdpi-v11/address_bar_texture_tablet.png \
   res/drawable-large-xhdpi-v11/address_bar_texture_tablet_pb.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 \
@@ -939,45 +954,50 @@ RES_DRAWABLE_LARGE_XHDPI_V11 = \
   res/drawable-large-xhdpi-v11/remote_tabs_off.png \
   res/drawable-large-xhdpi-v11/tab_new.png \
   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/tabs_carat.png \
+  res/drawable-large-xhdpi-v11/tabs_carat_pb.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_button.xml \
   res/drawable-xlarge-mdpi-v11/tabs_carat_contracted.png \
+  res/drawable-xlarge-mdpi-v11/tabs_carat_contracted_pb.png \
   res/drawable-xlarge-mdpi-v11/tabs_carat_expanded.png \
-  res/drawable-xlarge-mdpi-v11/tabs_level.xml \
+  res/drawable-xlarge-mdpi-v11/tabs_carat_expanded_pb.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_contracted_pb.png \
   res/drawable-xlarge-hdpi-v11/tabs_carat_expanded.png \
+  res/drawable-xlarge-hdpi-v11/tabs_carat_expanded_pb.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_contracted_pb.png \
   res/drawable-xlarge-xhdpi-v11/tabs_carat_expanded.png \
+  res/drawable-xlarge-xhdpi-v11/tabs_carat_expanded_pb.png \
   $(NULL)
 
 RES_COLOR = \
   res/color/menu_item_title.xml \
   res/color/select_item_multichoice.xml \
   $(NULL)
 
 RES_MENU = \
@@ -1027,19 +1047,18 @@ 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_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_bg_pb_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                             \
   mobile/android/base/resources/drawable/marketplace.png                        \
   mobile/android/base/resources/drawable/webapp_titlebar_bg.xml                 \
--- a/mobile/android/base/ShapedButton.java
+++ b/mobile/android/base/ShapedButton.java
@@ -5,19 +5,18 @@
 package org.mozilla.gecko;
 
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Canvas;
 import android.graphics.Path;
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
-import android.widget.ImageButton;
 
-public abstract class ShapedButton extends ImageButton
+public abstract class ShapedButton extends GeckoImageButton
                                    implements CanvasDelegate.DrawManager,
                                               LightweightTheme.OnChangeListener { 
     protected GeckoActivity mActivity;
     protected Path mPath;
     protected CurveTowards mSide;
     protected CanvasDelegate mCanvasDelegate;
 
     protected enum CurveTowards { NONE, LEFT, RIGHT };
--- a/mobile/android/base/TabsButton.java
+++ b/mobile/android/base/TabsButton.java
@@ -167,16 +167,18 @@ public class TabsButton extends ShapedBu
         Drawable drawable = mActivity.getLightweightTheme().getDrawableWithAlpha(this, 34);
         if (drawable == null)
             return;
 
         Resources resources = this.getContext().getResources();
         LayerDrawable layers = new LayerDrawable(new Drawable[] { resources.getDrawable(R.drawable.tabs_tray_bg_repeat), drawable }); 
 
         StateListDrawable stateList = new StateListDrawable();
+        stateList.addState(new int[] { R.attr.state_private, android.R.attr.state_pressed }, resources.getDrawable(R.drawable.highlight));
+        stateList.addState(new int[] { R.attr.state_private }, resources.getDrawable(R.drawable.tabs_tray_bg_pb_repeat));
         stateList.addState(new int[] { android.R.attr.state_pressed }, resources.getDrawable(R.drawable.highlight));
         stateList.addState(new int[] {}, layers);
 
         LevelListDrawable levelList = new LevelListDrawable();
         levelList.addLevel(0, 1, stateList);
 
         // If there is a side bar, the expanded state will have a filled button.
         if (mSideBar)
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/resources/color/tabs_counter_color.xml.in
@@ -0,0 +1,19 @@
+#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/. -->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+          xmlns:gecko="http://schemas.android.com/apk/res/@ANDROID_PACKAGE_NAME@">
+
+    <!-- selected state -->
+    <item android:state_selected="true" android:color="#FFFF9500"/>
+
+    <!-- private browsing mode -->
+    <item gecko:state_private="true" android:color="#FF666666"/>
+
+    <!-- normal mode -->
+    <item android:color="#FFC7D1DB"/>
+
+</selector>
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e4a7d80853ddc89b64c4dcf4ea86a558e06fa5f5
GIT binary patch
literal 1374
zc%17D@N?(olHy`uVBq!ia0vp^DnRVP!3HGfnT78JQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS=07??9MLn2Bde0{8v^K<nQL2C3Watjzhz{b9!ATc>RwL~E)
zH9a%WR_Xoj{Yna%DYi=CroINg1<t7%nI2U|slio#A<0$Q$(AWf_I3(36;?n4a#KqZ
z6)JLb@`|l0Y?Z*~S^?Q0VSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY4HeAH^bAc*
z&CCpS6pRcEjr0wG$V}JJ#LCpn%E(*+3Y37h6{VzE1-ZCE?E>;_l`=|73as??%gf94
z%8m8%i_-NCEiElUW*8ai0#)c1SLT%@R_NvxE5l51Ni9w;$}A|!%+FH*@e`BsOG|8(
zlwe-SE%5b)8=O}R4Jcrc=~pBc=o{)8=;!9@!&DcS1f{0oS6v)ZS&*t9lv<o$T9gco
zk2GZ@tMF?DDFnL4%D*TR7%7Q4F8Rr&xv6<2o-VdZKpDN1%oHm(3v)L^Lvs@Yb0Y&Y
z3qwN-0}Ep}CnHNoOJ`RjBV$9D8QAoiI~ki8Svb2GnYox48oC-enVJ|mn;1G-I=NUn
zJ6jsS^m^tMmn7yTr^57RBJ?`r)obNkl$uzQUlfv`p94z)0U7xv`NbLe1q#l=W(pd<
ziOHFHAOTHK1VP=JT9jFqn&MWJpQ`{4VXI6mE^st8aW*kFH88e7^0}Fjk*lkdxuc<*
zs}fXi3OS*s4|I$^T5^F20n;Fe2~Ye$4m|s$<^l6e5ioNIButpaz`)q!>EaktaqG=Z
zd+);z5^NvtJT1w%=y~VXMNg~M@&^M8gpTAt5*H}BuyBV3*P~0fd=}o^(&f4$Av^c4
z`(q`gZCfJVKCR&w(g<nQ(3G9m%s%O~V_kXWPM+gaf{tmJ=JiA{b0{=0FyST^D4GeT
z86^AoE4a;E((~Ww%j8RowoDB&G7{Lj@#@sAORwZ)`BzQ)YjWbrvcmHE-TNlrySL!B
z-xP%~3){Lr|08ic%a$#XnPc<(j=-`PBKlptx!t?ks;)+Dop&~ETgv%rW8Y$i!;<ye
zbFE`7tSy(X>tEqm<$0&=_J*RJ%1$SjxdrC3&d9Tye}8REIA6w{=6LUkO;h59&EHL)
zy-_Fo^5j*jEem!D#vU&;Nt-`!`rk$04mCy0NG{qdbWl~*Z>Fcpq;Brw&!?B3o)o)o
z3jfOYU6*(a68j(i=X&L?s(E=z_<v*5-{ERH9)FVgFXv|kznbD6`=L&-+WEG`{+Vmv
mz4&!-KMyn{+yuX<9$=`<?sQZyzn%ap@jPAqT-G@yGywphklqsj
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1451e802f2a66d8c25bf48000b3fba588b7b8337
GIT binary patch
literal 1296
zc%17D@N?(olHy`uVBq!ia0vp^azJdu!3HD?L%8MxDajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_cg49ppsArU1JzCKpT`MG+DAT@dwxdjX$U}IlVkeHmETB4AY
znx2_wtMq>NekFy>6kDZmQ(pt$0_W6>OpmIf)Zi+=kmRcDWXlvKdpiZ23M-%ixv3?I
z3Kh9IdBs*0wn|`gt$=Khu)dN4SV>8?trEmh5xxNm&iO^D3Z{C-y2%EHh6-k8dWI&Z
zW@d&u3PuKoM*0RoWTtCqVr6P(Wn``Z1xi5Mic-?7f?V97b^&>|N*N_31y=g{<>lpi
z<;HsXMd|v6mX?+vGmMOMfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZ_=!pRr6smX
zN-!_v7Wn$Y4bCfu1{5&J^eYkz^bPe4^mB9dVXBKuf>P7)t1b?yEJ)Q4N-fSWElLK)
zN18H{Rrs}n6armi<zJKujFiM2m;B_?+|;}hPZwJypp0HhW{Q=Yg}Ixdp}C2HxsidH
zg`uH^frYV~laZyPrL(J%k+C7n3~YK$olFf3%z?_xTuclNU5%VfO^lpP44o{UTr8cP
zEe&9LJ@bl767!N%VR|zWdJXaFwQ?>>O)SYT3dzsUfu(?ejQo=P;*9(P1?ONh1r6WC
z<jg#ffF>w{pl(eq$}CGwaVyHtRRD*uRVEe}IGUO`n;4rK7+WCu+|0<x)z!(|(a_CR
z392`RoKVvTIz}HYxxj>gX%NJOCw?FYo_$jDfO)0}m^rfir#3P$Fxq*#IEGZ*O8WEv
zzx`nc2DLUurp03YQ8rm0R~*I5xGb<iVD*HF6DKlzd}KE4NOPIY)*Jbk;Sv9TAn*+B
z-nnCk%dD*Eb^m_<@8_@0;d!C4z+1w8N|<Oi<IeLdvp#OmzaP;*->%FfDCp4h@AL2T
z7@T&TwrSHQLz~JkDf$ym`*mCV+f#OTR^<2h_7>+(9pd_^dLl^S_qn&$?PfVq_VP>G
z#Kh_u9(|79p8K+rVapue7v2K<il4umC~Lj_JL6M5hL7%xF7s?mo~dx(aj_dyhwt5(
zyO;m{{r$cC{Jp!I8~+$P{1NK-FOVzODRx*#oINR0<G-T7ezr(1zk4pTjyt)D{bBxk
zw_4-B_?e(tPm)dM|4}@?>EfoUD~|%Z-F4-*R%Ar-2qZADJ<s40s_D84Dx*AI{an^L
HB{Ts58}-JP
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c218747285d1bdd56ad685a821697dc5d913f199
GIT binary patch
literal 1216
zc%17D@N?(olHy`uVBq!ia0vp^B0#Lc!3HG%8Q!`Lq$EpRBT9nv(@M${i&7aJQ}UBi
z6+Ckj(^G>|6H_V+Po~;1FfeCihD4M^`1)8S=jZArg4F0$<Q6c1fQ@}cL1J=tYKcNp
zYI<g#t<wA5`;`<jQ*4#OO??e~3!GCkGCit_QiH4fLXxYplPyz}?Clh6Dy)D8<ffJ+
zDpcg=<P}?0*eZd|wF0t1!um=IU?nBlwn`93Mfe6NIOi9oDwygS>n0l*8Y-BX=^2`s
znwc5uC>R+S8tEGVk(sWciIu6Dm65pu6et00D@sYT3UYCS+6Cm<DrJ<E6j<r&mzS68
zl^g5j7p3bPT3T9y%rG+21**_3uFNY*tkBIXR)(42l3JWxlvz-cnV+Ws;wL8MmzLNn
zDZ#vuTj1*pH#n~t8c@I>)2~P@&^OdG(9g})hp8?u2}(`Fuevy-vLIDID784hv?v)E
zA8E=+R^itQQV4X7m48ttFj5k8T=J7kb5rw5JY8&+fHHb1nJHFo7Uph-hUO*)=0*l)
z7KVlv1{TI{PDYlFmd>t5M#hFPGqCA3buu+DFn4h^GIKF8G;}p`GBq)BHZgRvbaJtD
zcD6Kt>GjMjE=kNwPKD{sMCf(FtJli8C^fMpzbGU>KL?fq0y6ST@{2R_3lyA#%@j0z
z6O%LZKmwYe2!gsbwJ5VJHN~wcKUV=9!d97BT;OPG;%s7UYG7=E<a0A4BUe`^b4Nor
zS0$+46mmjMALtl;wB!O40;WL_6Q1~i9C-Fg%>(9{B4Fm2{Yf8`Q{Q>IIEGZ*O8WEv
zzdf@lqcHQ-gDV;rv-L??WIcc~DtJ;3s-56qap+?1__@%8=MT%HeuqDQ?fcZ&x%FnR
z(an9*^ru<>@89qJZ~y<VSMZjIm=XC;#=i1Q;@4fF>J481CM796zWCVPuCTE9>+0+k
z;{X5tZfDK7@&EUCxij}R<$hLPVDpYm@Wj&>5?nhPBko^3nCX>R_b|WQyua09pP|6#
zCY>Y8_**15va+gh927jpd}LEnQqrgOaeJ$nQtVkCop<=dAHJG*exrf&&BhtL9rer~
x`6nbA%%7O75W``6$HS<=<aMu9hdcv|1Vi4>g8f%|H!TB|DW0x=F6*2UngE`-n{WUC
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9b7a5bd36517aafaa42f8e44e1ec95c2fc8476e8
GIT binary patch
literal 1428
zc%17D@N?(olHy`uVBq!ia0vp^8bBPt!3HF=`^^smDajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_cg49ppsArU1JzCKpT`MG+DAT@dwxdjX$U}IlVkeHmETB4AY
znx2_wtMq>NekFy>6kDZmQ(pt$0_W6>OpmIf)Zi+=kmRcDWXlvKdpiZ23M-%ixv3?I
z3Kh9IdBs*0wn|`gt$=Khu)dN4SV>8?trEmh5xxNm&iO^D3Z{C-y2%EHh6-k8dWI&Z
zW@d&u3PuKoM*0RoWTtCqVr6P(Wn``Z1xi5Mic-?7f?V97b^&>|N*N_31y=g{<>lpi
z<;HsXMd|v6mX?+vGmMOMfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZ_=!pRr6smX
zN-!_v7Wn$Y4bCfu1{5&J^eYkz^bPe4^mB9dVXBKuf>P7)t1b?yEJ)Q4N-fSWElLK)
zN18H{Rrs}n6armi<zJKujFiM2m;B_?+|;}hPZwJypp0HhW{Q=Yg}Ixdp}C2HxsidH
zg`uH^frYV~laZyPrL(J%k+C7n3~YK$olFf3%w5fl%v?+i4PA|#OihfOO$?nZom?!P
zoh=PudOh=sOA_;vQ(<~D5qeGW>a}t%N=+=uFAB-e&w-_YfQ<Z-{NjxK0tM$_GX)Lb
z#N^C8kbovAf}n0qEy^rQO>ryA&s6}2uvI1&7dV=lIGY%o8W>w3`P|IN$ko-!+|kg@
zRSBv$g`7~+2RcR{ExEvifN2oKgeQI=2cCUW^MHA#2$(q<iY@_jDdQne7srr_TW@Zi
z_hNFCVgK;=`Fw{LLLJlRIp^Ct>R;UH{6#>ns%e3eX1CYtTL(Y9=k8eDw4iYti_q%T
zj%$VU_IKV5j#{^@vxa@&^uqR^Z_b_J=U0xJrm9msxkWXffr&$*fgtg~i%E1lvrFKU
zWTrAT$@BTSdxCkoGI#Ddy3priP~+aaf13j|wm27ePUczgJWg-@qv)eS8?&09bA6Gl
zRX)+S?1bHn54YJTs(60*eeF-x^3CVO69lU#%srayzU$t~lbg;=|KmPK=VbF0=T{rP
zUdai*ULbhDE_qGK<Q;uwU-N2ZE*)HY`DJpbuIkFwdshUX(U4O7d~$cnl@}8CC&;LG
zUQ(ERa$d-)sTQRl_kMp>_Wx{98rzg<nX_&l$yLfK>1}H+DcBkFZ%a&|{)?SlOU=)I
zIv2%mx#?%CkJ=*J#ou3itzdNxj93`ZvGVC9%fIVxJx#TEtFq|!=~U%!v!`!*`LW{A
z#DbLQ%Uh!M2JT<J?~}%y*FXO;yijPK!h1^k=}h@$f${J5H|#lC7Q6LLb4st~t<S8F
i&NCqe9HTv}1jC=5TfV(e+h+?ZCp}&LT-G@yGywpqDFyie
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..50294b3a568697d15bd366ab2a5da2c125f0e95c
GIT binary patch
literal 1437
zc%17D@N?(olHy`uVBq!ia0vp^T0k7a!3HG1yk7bWNJ*BsMwA5Sr<If^7Ns&crsOB3
zDtP85rl$s_CZ<#to=ml2U|`P342dX-@b$4u&d=3L1gX)h$Sq(10UP^@g2d$P)DnfH
z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt
zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N
zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QD<g9SC{P00R+N%v73AUuwF}6zRmvzSDX`MlFE20G
zD>v55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uO#7|7hFD<cE
zQi6FQx4_pIZg5^PG@yV%reBd*pl_&Wpr4zo4^v%S5|o;TUv+UvWkITbP-=00X;CsT
zKGKwttirDqq!8#DEB~TQV5B7Gxa237=BDPAc)Hjs0cG@3GE=PFEX>^u4b4pq%#94p
zEDQ}T3@nV@oQy0TEuCGBjEoIoW?<9n=;mT%VCiOTWaeUGXy|I>WNKpMY+~qS>EvSR
z>}+WO)9aa6T#}fVoC?#MiO_3=SFe?GQEFmIeo;t%ehw@J1Z3ow<QHe;7brLfn<;4c
zCMIX*fdn)`5d?K>YEfocYKmJ?ey##Igsn2Mxxm!K*~Hk?z}N!G=VnGmuC7kzj)rco
zN>IHi<b;|&&@uXG$pt0^OoJdMJn;iL@a&VC2h1}?z|0{szw8|Y1LJ8=7srr_TW@aJ
zdLMR>VE?e^=cOda6-r7aTfb@V*uA3JLi-o*99J0`k%RmX0%B`kUI^Q@(mPoE?TZOZ
znk+c7a=DwDa(kYfQ@<dl>6(2Z<752?`A-KX-j99P$D>|!uC**<(gii%00%}^5#ory
zFPH6jsnWH`*uh@a;bn=JZb|YKqo<w4d6i5{ui2U#+glsS+*DY!{^-HN%O+o+PF-qP
zb*7s2?Iua?`=WU@%Tl@4-f^3(;`!zyyVE9}@4Fgz#V%f7y>af9SiAalC%TNI=PR;C
zPKxjA<2TQ}tyjHsrdH3!(<w$9<8(x}_HPJXGSzSS;#upKuK4mm^~$n4#^*M5Hb044
z8F6WLVz!6rTDM~Hof1=vrlha$Umku+_xT%>c|L1|u2uA}RSqpZy~E(!$|cs;`*!`_
zUw3K8&S^Idie;xL-cnh7Irwt-U*^Ap$95=mE}D9BPR{GLZMQp0zMji(xVEutQIB7b
zzup(t=7pPc%=|o_7fVk${@wWJ?0|(;ANYd~O_4ig`gE1xPw@p?XMPPo|D5Y+&NemM
l=10p}5aD*=KU=ME0z-n%$}>w_oN_@0rl+f)%Q~loCIEq;0jU50
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b2e750e01feab5c4624f3e3860cfd4710625e966
GIT binary patch
literal 1304
zc%17D@N?(olHy`uVBq!ia0vp^GC*v>!3HGX8O+!Mq$EpRBT9nv(@M${i&7aJQ}UBi
z6+Ckj(^G>|6H_V+Po~;1FfeCihD4M^`1)8S=jZArg4F0$<Q6c1fQ@}cL1J=tYKcNp
zYI<g#t<wA5`;`<jQ*4#OO??e~3!GCkGCit_QiH4fLXxYplPyz}?Clh6Dy)D8<ffJ+
zDpcg=<P}?0*eZd|wF0t1!um=IU?nBlwn`93Mfe6NIOi9oDwygS>n0l*8Y-BX=^2`s
znwc5uC>R+S8tEGVk(sWciIu6Dm65pu6et00D@sYT3UYCS+6Cm<DrJ<E6j<r&mzS68
zl^g5j7p3bPT3T9y%rG+21**_3uFNY*tkBIXR)(42l3JWxlvz-cnV+Ws;wL8MmzLNn
zDZ#vuTj1*pH#n~t8c@I>)2~P@&^OdG(9g})hp8?u2}(`Fuevy-vLIDID784hv?v)E
zA8E=+R^itQQV4X7m48ttFj5k8T=J7kb5rw5JY8&+fHHb1nJHFo7Uph-hUO*)=0*l)
z7KVlv1{TI{PDYlFmd>t5M#hFPGqCBkuyAp4F>x|8GIKF8G;}p`GBq)BHZgRvbaJtD
zcD6Kt>GjMjE=kNwPKD{sMCdietJli8C^fMpzbGU>KL?fq0y6ST@{2R_3lyA#%@j0z
z6O%LZKmwYe2!gsbwJ5VJHN~wcKUV=9!d97BT;OPG;%s7UYG7=E<a0A4BUe`^b4Nor
zS0$+46mmjMALtl;wB!O40;WL_6Q1~i9C-Fg%>(9{B4FldvfF6Hz`*F{>EaktaVzQ1
z|Nr*Pwv3Ngv@RCwi?Yaih?}A4tCIo*OhI!T&afYOV=?6~>!bA!e<U;R<$LL-_;&e!
zynO9S+_&fN<;`-kX3U%+VORTa&&ri+6~!{{sRLCoGA(`aVuq#7ojcncyd@`mH83_d
zHu#fXQ~Tq?!!O$5`tKP})gDWi6Ba!9@B8`r_W9HF<F9@A`1rW7&KVsAcLx*Z+G8K)
zKm5Bc);ha!+FW+7zYE-CnrxYlD6LtOQziINP`0LKkK6x-Ukyg`W$$ms7XSYCR@ULC
zy2GE>_KM7opMDq=g)nYpxe#=H$BZAwHzO_AU%h&zxFPA3!x_dRX~SoNubor8T^l0A
zvQ7po)bSm$cPu-ov&3z}qUck6z4a4Z>l3C09zAq%QSOyPf!yx8OC%UrBp5Q4jUTbN
RzVrc=Ri3VXF6*2Ung9+9#OMG3
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e2eae685572e1f9a31139c401841838f17a5a178
GIT binary patch
literal 1542
zc%17D@N?(olHy`uVBq!ia0vp^7C>CU!3HF~dpFAiDajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_cg49ppsArU1JzCKpT`MG+DAT@dwxdjX$U}IlVkeHmETB4AY
znx2_wtMq>NekFy>6kDZmQ(pt$0_W6>OpmIf)Zi+=kmRcDWXlvKdpiZ23M-%ixv3?I
z3Kh9IdBs*0wn|`gt$=Khu)dN4SV>8?trEmh5xxNm&iO^D3Z{C-y2%EHh6-k8dWI&Z
zW@d&u3PuKoM*0RoWTtCqVr6P(Wn``Z1xi5Mic-?7f?V97b^&>|N*N_31y=g{<>lpi
z<;HsXMd|v6mX?+vGmMOMfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZ_=!pRr6smX
zN-!_v7Wn$Y4bCfu1{5&J^eYkz^bPe4^mB9dVXBKuf>P7)t1b?yEJ)Q4N-fSWElLK)
zN18H{Rrs}n6armi<zJKujFiM2m;B_?+|;}hPZwJypp0HhW{Q=Yg}Ixdp}C2HxsidH
zg`uH^frYV~laZyPrL(J%k+C7n3~YLx9Nmn~P0bCA%v?+i4PA|#OihfOO$?nZom?!P
zoh=PudOh=sOA_;vQ(<~D;d;&7@ana4E=o--$uA1Y&(DFSfPjqrlKkR~`~n5%U^4{`
z-^Aq1Jdl7UD1xAFO)bhSOHFYr%Fk5*hp<&978f|0nmC&nn;IBfAo<+P$jH^z$=uP<
z%~c7iH-(%~(+4_6A1%4Sgn(%f#Dph)AP1g(QuBa$rU;lh#5TQAXJBA5@pN$vskrs#
z&RIX<K$-T3Gq=t7plG;p_D%*JotP=N1@aDP+~K^Q(9~HZ?9gyyS_a3KUJcHY17eX0
z-FhCJuMUOz+@ATc-f6ao(1P4^GdTC8f4V*A=o6dg)n>_6^V07;6*78P!N?(?;LyOp
z$izYc<2#qc#ji@2O+wSZdbg?YhlKL4FI4@nQm<m_e>k2;Ny>V4{i~l}PG7unqes%H
zz50#X`mptXE2c-x{Iz9krnjrD$AR|##TUh&UQYIwy1Dqg0UKM}u_XVb$xL^yGhW%n
zR{s6X`M&3?ju*r%f4xGo^4s>PlXYimI3KA6|J?Ac?%=tb-L(_#{I8{y^KyCy+bo{t
zp%N!sXMJY1sf5XcnNPB<HXBYqebf7{f~X(c-dR3s>D@~oO$w=<Zqme7qOxDbdS=eA
z+~p_4@=8rjqph^guJ)T0!fQH@(S}|0)AE$v!YS5%Zg~qkSHC#)v-CoF%btkhH0!*0
z^K<8CpHW?sV{`iL2{FB?Ucb67*Yd@6`=npa4{@!rv3s~HZ^gv|t)}X?=I<W8TJUnd
zpLvd2qG!mbkUY!tI;W*HMLxZLI{DMAE3$W5E??aCpD{;K-c#pfLh*LneYxAOTr{&^
z{^IJ(U%M+i`OMGnXp6smNj!ml@7q_q=6<ln5ewI+7c;Uk__>K5=;C=*2`ZUAUHx3v
IIVCg!0Kh*ThyVZp
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6a16b2220545eb5d9a83e0580138cc2e51e14869
GIT binary patch
literal 3989
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
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1a853df9408d8af2037c9fee338bcd17035d8405
GIT binary patch
literal 1510
zc%17D@N?(olHy`uVBq!ia0vp^20)y^!3HFwdp;HbDajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_cg49ppsArU1JzCKpT`MG+DAT@dwxggyP3^w)^1&PVosU-?Y
zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP
zs8ErclUHn2VXFi-*9yo63F|8<fR&VF+bTgE72zA8;GAESs$i;Tteb3LXsBRjre|nk
zYG!7rqhMrUXryldL}t2%CRV0qRz~IuP@n{~ttchUD#*nRY8Q}atCUevQedU8UtV6W
zS8lAAUzDzIXlZE)GQ-G77pOwFxH7LKu|hYmSQ%!5OKNd)QD#9&W`3Rmh@Y60Us__T
zqy+OqZh@~a+~B-oXg~pjOur(rK;KZ$KtDHEAEvsvBq%ivzv|+U%7Rq=pw#00(xPNw
ze55HOS%qIKNFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsfTS(v*S8k(CJm>U_G
zSr{5x7+4s)IT=|xS~|NL85tYG%)qAC!otPH#l+Fo$jrsW(9qS$$<)Ni*~HMv(#gfr
z+1b(nrq?sCxFj(zITfZi6R6kR$=Jlm!o>iuUMuIK)WnkfqLBRj99Rkn$jC3rFV4s>
zP;d@5Q_%2DOwP;$321^M2<q0<qRg_?6t|-MTm^6lTV-N#fupI3vx%{(fw2XW&&`aC
zTwR^a9Sz-Fm7sc4$O$!lpkwsWk_$`-m<B;ic;W|g;MpfN5140)fSIFJNFkSjfl0*E
z#WAGf)|+cPy$=V-uz!d#6^#<SbM<CuNm*Hez?=CG4PQJ^;0rqHD&ry(Gsi}XKcHaJ
zt!vpEJN*_lvnw^-O3Jy#lJsZqr7kblY^J~;c0WG8sOGJ)fA4YHy6^Dc=f{{C$OH%O
zvwg794+!@bT{h`vfN1~zAjy#PQx1OO7I^cruVm}iZRf4$2(S7SdCq{Rv?OQAWTQKO
z&6=MSv1d0GZFu|bpIV3kcZ_MbA_r5r_^SMg*-zMh{m5>3Ae5l5*?rsJe`ax@NcZYr
zm#<EDIcaHQ6=9@1X?I2*BkSo+dSOYYAOG51_fwc<Hopg>dhMJzZ<TWKj28#bd&k(g
zg`C}_Q|?lwbok+}g2}nJMf-y-_sj~r9{hWyrIc5&?WOYE{bdcN-`I8<`5MawCk5W>
zeC=f&$hUswtz*YO1W&%aZNB@8J3ehEo_{WM4P3PA-zUzGa&gu-ecq|sa=%w?SZv_h
zGSU3e>Mo;?i=O96H0{le_#ynZM0=*!nJUS9!3WwOm&`OSvR<9-WitEZyzZtc!J)af
z6K~C3xHGvdb1&EXtEzhM9X85Kyn5^{zI)=TrC+pbeM`T^{`hw=?muJv@)b-W3xo2f
qta@~6_o;^Z#TbG9!T$Da24;qv8_z%4*mc<yB;@Jp=d#Wzp$P!=@eBz7
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4a636bf1e210c8995b412e91a3bde957667c129c
GIT binary patch
literal 1417
zc%17D@N?(olHy`uVBq!ia0vp^u0X8C!3HFs>Q7q+q$EpRBT9nv(@M${i&7aJQ}UBi
z6+Ckj(^G>|6H_V+Po~;1FfeCihD4M^`1)8S=jZArg4F0$<Q6c1fQ@}cL1J=tYKcNp
zYI<g#t<wA5`;`<jQ*4#OO??e~3!GCkGCit_QiH4fLXxYplPyz}?Clh6Dy)D8<ffJ+
zDpcg=<P}?0*eZd|wF0t1!um=IU?nBlwn`93Mfe6NIOi9oDwygS>n0l*8Y-BX=^2`s
znwc5uC>R+S8tEGVk(sWciIu6Dm65pu6et00D@sYT3UYCS+6Cm<DrJ<E6j<r&mzS68
zl^g5j7p3bPT3T9y%rG+21**_3uFNY*tkBIXR)(42l3JWxlvz-cnV+Ws;wL8MmzLNn
zDZ#vuTj1*pH#n~t8c@I>)2~P@&^OdG(9g})hp8?u2}(`Fuevy-vLIDID784hv?v)E
zA8E=+R^itQQV4X7m48ttFj5k8T=J7kb5rw5JY8&+fHHb1nJHFo7Uph-hUO*)=0*l)
z7KVlv1{TI{PDYlFmd>t5M#hFPGqCA(a&$8`H#KuMGIKF8G;}p`GBq)BHZgRvbaJtD
zcD6Kt>GjMjE=kNwPKD{sMCf(GtJli8C^fMpzbGU>KL?fq0y6ST@{2R_3lyA#%@j0z
z6O%LZKmwYe2!gsbwJ5VJHN~wcKUV=9!d97BT;OPG;%s7UYG7=E<a0A4BUe`^b4Nor
zS0$+46mmjMALtl;wB!O40;WL_6Q1~i9C-Fg%>(9{B4FlVEZ)z{z`(fO)5S5Q;?|oR
z-rh`sA`B0zpC@LBEuApU`Y+>8<EU-9%O@-h<NDiBmYWqBaKWi5EH_KoWdci^SAXG>
z<Hx3Lo$xW#Q01n@+>L@;mflL5Q~bc-&S8TyHFu1SzXyeea=MiVxHyVnqU5_4OLb%{
zYHu{;{IgwtJ>A&oluL!7(4RHepEe&pVmL)>!YPFS3Fh;kR!a7#Uw;1eU2Bu~YlE`V
zGjsMGI-xOnY1fgxV(}}oZ|#-gb2VpUO->PsQ_WiKx}<2L)!e=VSt{FDOUw5gxVgQo
zDxb1SXk-6v@kiR(w`Go3o0tSI-jb-b)o9}_w`a*0fAn38Tjrj5_{zQ2N6fP3CP!Xt
z)Yv~ilWDDU(V~K78eW^Pzb-h;a_F<zr!OBW=I!x$=d>~>Yl;}h@zs@qHomb-O(w`Z
znVlIZ(Wa<#+O*aBp~_s}_s*UzI*xU-1)p{=^=bYjrZ)Mc+}%5I>I<e_zwKuDy6M96
z`Cr*nBA2y3Kg2rao#N`b3TZI{eJ}Ta6$xtkBXOna!U>IA?_0LjE_ijDZAa;c^$$9l
hG*FOH&PU|~3>!Hf_^2Ivzz8ZFJzf1=);T3K0RZtK{RaR5
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4833afa15fc24ab5f61af94ca16ecd21cbe293a0
GIT binary patch
literal 1398
zc%17D@N?(olHy`uVBq!ia0vp^u0X8C!3HFs>Q7q+q$EpRBT9nv(@M${i&7aJQ}UBi
z6+Ckj(^G>|6H_V+Po~;1FfeCihD4M^`1)8S=jZArg4F0$<Q6c1fQ@}cL1J=tYKcNp
zYI<g#t<wA5`;`<jQ*4#OO??e~3!GCkGCit_QiH4fLXxYplPyz}?Clh6Dy)D8<ffJ+
zDpcg=<P}?0*eZd|wF0t1!um=IU?nBlwn`93Mfe6NIOi9oDwygS>n0l*8Y-BX=^2`s
znwc5uC>R+S8tEGVk(sWciIu6Dm65pu6et00D@sYT3UYCS+6Cm<DrJ<E6j<r&mzS68
zl^g5j7p3bPT3T9y%rG+21**_3uFNY*tkBIXR)(42l3JWxlvz-cnV+Ws;wL8MmzLNn
zDZ#vuTj1*pH#n~t8c@I>)2~P@&^OdG(9g})hp8?u2}(`Fuevy-vLIDID784hv?v)E
zA8E=+R^itQQV4X7m48ttFj5k8T=J7kb5rw5JY8&+fHHb1nJHFo7Uph-hUO*)=0*l)
z7KVlv1{TI{PDYlFmd>t5M#hFPGqCA(a&$8`H#M^`GIKF8G;}p`GBq)BHZgRvbaJtD
zcD6Kt>GjMjE=kNwPKD{sMCdigtJli8C^fMpzbGU>KL?fq0y6ST@{2R_3lyA#%@j0z
z6O%LZKmwYe2!gsbwJ5VJHN~wcKUV=9!d97BT;OPG;%s7UYG7=E<a0A4BUe`^b4Nor
zS0$+46mmjMALtl;wB!O40;WL_6Q1~i9C-Fg%>(9{B4FmI@D+H+z`(e~)5S5Q;?|oR
z{`$<0A`BnqzB{vRY6izjHKmC!9Qo~-+4K4yoof7XSxf%V)CqAd9o-hIyO#w9<tb@J
zha{=`{S(ceJ#SUn-j#0~uc%k#Pntfr@_2mOv%QheEc%=te@|#}(m+Q|B2VY<VRzc`
z*}q})#>E94+d4m<3_KQ5nw(wB9-!l+vFD(b$lNYnHtVM3uESm%{G1oKPCTw^Vs5=(
zhQp-aW}l75tP3V5wkGWkex=b=d{J_Cr}`h?dk@1mM|j`bc2??*nux}s=by`uE=$gi
z32wh<e@`TG;sZO!=-RC5SvI>ioSb2s5Vg!nRmv-Whx(nft+(>0>N2fdEK%<E^3|_T
z9jj%&PW*X$iRk3&-K&qSEmYc}AR&IV#lnASuy^YrUpEe3+a8ydPBxBn()jqpKJD7a
zZ+&c{K}4a=yYNFNo;}g2p5yzZNZfP%vsSgE!HqGjzncSEGumHte{o}L6-c#RpYI&H
z>-ax~DF(WFeRmwsHv}z<XSYA@Rr);sMV)NGVK?;9;yAXQfti7K(Xo(kB5t4(mci52
K&t;ucLK6TAx$8gx
rename from mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_button.xml
rename to mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_button.xml.in
--- a/mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_button.xml
+++ b/mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_button.xml.in
@@ -1,22 +1,50 @@
+#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/. -->
 
-<level-list xmlns:android="http://schemas.android.com/apk/res/android">
+<level-list xmlns:android="http://schemas.android.com/apk/res/android"
+            xmlns:gecko="http://schemas.android.com/apk/res/@ANDROID_PACKAGE_NAME@">
 
     <item android:maxLevel="1">
+
         <selector>
-            <item android:state_pressed="true" android:drawable="@drawable/highlight"/>
+
+            <item gecko:state_private="true"
+                  android:state_pressed="true"
+                  android:drawable="@drawable/highlight"/>
+
+            <item gecko:state_private="true"
+                  android:drawable="@drawable/tabs_tray_bg_pb_repeat"/>
+
+            <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 gecko:state_private="true"
+                  android:state_pressed="true"
+                  android:drawable="@drawable/highlight"/>
+
+            <item gecko:state_private="true"
+                  android:drawable="@drawable/tabs_tray_bg_pb_repeat"/>
+
+            <item android:state_pressed="true"
+                  android:drawable="@drawable/highlight"/>
+
             <item android:drawable="@drawable/tabs_tray_bg_repeat"/>
+
         </selector>
+
     </item>
 
 </level-list>
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3984f1b1de03fb574bd4738bd602434985ad731e
GIT binary patch
literal 1251
zc%17D@N?(olHy`uVBq!ia0vp^dO$40!3HGdxO*o8DajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_cg49ppsArU1JzCKpT`MG+DAT@dwxdjX$U}IlVkeHmETB4AY
znx2_wtMq>NekFy>6kDZmQ(pt$0_W6>OpmIf)Zi+=kmRcDWXlvKdpiZ23M-%ixv3?I
z3Kh9IdBs*0wn|`gt$=Khu)dN4SV>8?trEmh5xxNm&iO^D3Z{C-y2%EHh6-k8dWI&Z
zW@d&u3PuKoM*0RoWTtCqVr6P(Wn``Z1xi5Mic-?7f?V97b^&>|N*N_31y=g{<>lpi
z<;HsXMd|v6mX?+vGmMOMfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZ_=!pRr6smX
zN-!_v7Wn$Y4bCfu1{5&J^eYkz^bPe4^mB9dVXBKuf>P7)t1b?yEJ)Q4N-fSWElLK)
zN18H{Rrs}n6armi<zJKujFiM2m;B_?+|;}hPZwJypp0HhW{Q=Yg}Ixdp}C2HxsidH
zg`uH^frYV~laZyPrL(J%k+C7n3~YKG-CT?eEM47<%v?+i4PA|#OihfOO$?nZom?!P
zoh=PudOh=sOA_;vQ(<~D5qe$m>a}t%N=+=uFAB-e&w-_YfQ<Z-{NjxK0tM$_GX)Lb
z#N^C8kbovAf}n0qEy^rQO>ryA&s6}2uvI2D7nqtjn;4rK7+WCu+|0<x)z!(|(a_CR
z392`RoKVvTIz}HYxxj>gX%NJOCw?FYo_$jDfO)0}m^qH0sd>Y|z$obH;uunKE9uYw
z|MrIiSbTV#MS84it~^}KCtqq&%6Qr#>fDJFC)k$UX#Als@SovPy+UEqt7(mVh5wfA
zn&xXbapOe?Gkwi>k{RvXb$|aI^>KAAZCXBiy849ktX&-o9~69he}BK>zPjI&PM^85
z=l+EQCj@4du<bo8>G<;J`TO=f@9p+Y{qUW02Cs;)M9@;M8z0}_H(;K*#`)001Cv@C
zJ3Bc;rtFE_Usx*}@Zxqr!4LZhi)YT9vH#uu{rg{joP7LvW72%~T1!5zyZZC@&)Zq{
z_|`mW^ZYkVpXM`v)L&$LoIy=Ez)hsx>YJ)Seft&r|Ll7Y&s?~XZ<XQy1{vR+vnMTX
rl}eZXSaH~0*6!7Zz;=EX1`Y#;kmoT6d;R!+f{GnaS3j3^P6<r_v_!OP
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e4561deebaf053544c2cca18a958824d2fc552a6
GIT binary patch
literal 1235
zc%17D@N?(olHy`uVBq!ia0vp^dO$40!3HGdxO*o8DajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_cg49ppsArU1JzCKpT`MG+DAT@dwxdjX$U}IlVkeHmETB4AY
znx2_wtMq>NekFy>6kDZmQ(pt$0_W6>OpmIf)Zi+=kmRcDWXlvKdpiZ23M-%ixv3?I
z3Kh9IdBs*0wn|`gt$=Khu)dN4SV>8?trEmh5xxNm&iO^D3Z{C-y2%EHh6-k8dWI&Z
zW@d&u3PuKoM*0RoWTtCqVr6P(Wn``Z1xi5Mic-?7f?V97b^&>|N*N_31y=g{<>lpi
z<;HsXMd|v6mX?+vGmMOMfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZ_=!pRr6smX
zN-!_v7Wn$Y4bCfu1{5&J^eYkz^bPe4^mB9dVXBKuf>P7)t1b?yEJ)Q4N-fSWElLK)
zN18H{Rrs}n6armi<zJKujFiM2m;B_?+|;}hPZwJypp0HhW{Q=Yg}Ixdp}C2HxsidH
zg`uH^frYV~laZyPrL(J%k+C7n3~YKG-CT?eEM1+9%v?+i4PA|#OihfOO$?nZom?!P
zoh=PudOh=sOA_;vQ(<~D5qcf*>a}t%N=+=uFAB-e&w-_YfQ<Z-{NjxK0tM$_GX)Lb
z#N^C8kbovAf}n0qEy^rQO>ryA&s6}2uvI2D7nqtjn;4rK7+WCu+|0<x)z!(|(a_CR
z392`RoKVvTIz}HYxxj>gX%NJOCw?FYo_$jDfO)0}m^pMmTDvkZFfw|&IEGZ*O8WEv
zzy09=79SpGkshm>D-Rd*$(R0Earj_^;8|fAhci4!>>EWduU{zeNMV+_m6F-2mFrT4
zC!Dpv;XH>`>Q&6VytsL*R;?1=U-zF$NSx)-_2#<|-?Xv0wWTe4CLFiF_T<qsNB+pF
zn28uIZ`kjD;7z&w{jUE%f44K<dXXf<<=Oi6?r-xm_5c1#79D-K{j2o#>x|96c!h<9
znU$3vPbmEH{J6iI{Qdp)^}+_V^{ke19RGM*moRCqpMQTxW%Be58#YXs*0zmXL#)k<
zm1U7-V}wk{&4wSU29xU~v`p2NP1qbvpXV<){GTtYz5kn~yR6--4}tCdRy7{hG71M6
Xl7Dz_m1;GM1{E`&u6{1-oD!M<pjDts
rename from mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_level.xml
rename to mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_level.xml.in
--- a/mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_level.xml
+++ b/mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_level.xml.in
@@ -1,14 +1,26 @@
+#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/. -->
 
-<level-list xmlns:android="http://schemas.android.com/apk/res/android">
+<level-list xmlns:android="http://schemas.android.com/apk/res/android"
+            xmlns:gecko="http://schemas.android.com/apk/res/@ANDROID_PACKAGE_NAME@">
 
     <item android:maxLevel="0" android:drawable="@android:color/transparent"/>
 
-    <item android:maxLevel="1" android:drawable="@drawable/tabs_carat_contracted"/>
+    <item android:maxLevel="1">
+        <selector>
+            <item gecko:state_private="true" android:drawable="@drawable/tabs_carat_contracted_pb"/>
+            <item android:drawable="@drawable/tabs_carat_contracted"/>
+        </selector>
+    </item>
 
-    <item android:maxLevel="2" android:drawable="@drawable/tabs_carat_expanded"/>
+    <item android:maxLevel="2">
+        <selector>
+            <item gecko:state_private="true" android:drawable="@drawable/tabs_carat_expanded_pb"/>
+            <item android:drawable="@drawable/tabs_carat_expanded"/>
+        </selector>
+    </item>
 
 </level-list>
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..17a2d81e8708fcbc0f88950823047eba1737f534
GIT binary patch
literal 1642
zc$}S7e@qj16hCSeLzFpisB?t#D*iy*>mBX&hjavbEfy`sf(R3wr9GhH-IeQMTXgE!
z3>hvX{#X<@#}czSbeIqZf@4Exz<`PZ(+Ps92#N|=f1%D_yCP*~G5)b{?(Tix`@YY6
z@B4n-7l{dRQv==)003aBZYgf$Xgc@GCr{$Ow&Jqs9GS&xQrRRri*=Y70*JBDnFOdK
zP1%HzFj-uA%|sLcOvte&r?RQ~<w`S6icDS|k(0Cm-W3(?w3*Dg1Pf*o*;Yyg-TAcv
z0<9Jmv`VTM>uqWx$GWtDA(9FblFbFVW`zZc{t%3EDmeor!J0rPxt_8sohoS5u9Dk(
z#V`bps<62#=v7du`b1DoGXy9VMGDPg1OYKjgh-?qhAakAF@nNk?!knJL@C9Ts0<ui
z5a*4tWGRifcFY&Ysh}K|wJBlP;c$o?ks_MOh7pBA;kALHLQX?ycTud#DWvQIp9P$-
zn;EN(wbB&m<xQD%KC6Nt-xWxkUO#S_vX3Q-OBw7m*<eH@hDj3kY1>&Nk@a?Md$P+$
zz(&GO=QC!m9$A9dT)iFYRpg>k8W<~A6w`W~Hs_NB#p-Ys#GQyNR*O<AmuV41CK1a}
zF(yY4xmX^ljYSnP3bh7BBN3mCH(}KhRDmHlj$*h3K{RNrRD!A{NUS0jSE$tru@9@G
z?5v406F#i<U#$AASf!dFOf1bL)AV{@2PEduEN#!BZJ;^{0~hE`W-H|tEc6y=ELMWC
zZXhgLh9<$$3@fc~h#*EPQA;AF;z;>xH^)#^qluNpAX*JHhPC{ktifC`@PFFHC*pe0
zyB%+Sju{^xg5qX|;f7;SbxQ#NyuCU+CfV6F*m*9uW9>|T&p~|`#YUV=!S>JYZR}V;
z6qVnHb`6QK2UsG`Zwz}nzkVv;@EJ0%(5>%eRX@o;PrLc;r8YfDpS*?N>I#3p10%a0
zvpq3w5jn=TO%0xDf7chCH|&(TT;#DM!R@t|fI!<;0pKs^y&}io-8$g|zgNWl@^07-
z&xsS^j5R&{$g!DPMcS<T{ytCnwT%54&)ZVj;kI2x+q+vYs%0(B)YXHRuRVHlutzvt
z`TK!W!+{Up3CyG89)7gfWo&D4m$U7M``!!Un{HgaA_(5OSO>2Wi9CDnRo$HEczmbv
zhp$hsPTKaP^_MxHP@!@}-hX@Kp(k}$+Wcztu`DUBJbCWIs!k+I!q~UO-I!B#zGBLY
zo@Fb9Axm3Z{0$}Fm5vnD`_~TfYnulqN)3lnJY`EZZjPTG`t-}q=lq`e4=BQy9joYe
zJn6kKyL+81DAb*QzN1u9*K<~|N0eUIRFMJDKtX)M&Qnzz|LkXn{G8^L1G~GIN32_s
z&+G2HG_)aTuy7=5W_@FH2OxXW8p5v(3fMM`rwAU^R{Pn4D?<b4SKukv|2Td1a(8iF
zKR|`l417QE&C!ywi8JQaRkwuatpq4u&4S|TC8zdWFKac}a!VHxbFt$MO(A&vruh0m
zKJTx(hsBGUS2nd@sohOJtIOCJ6EJt#y{<FQOYau1N$aiTU)b>JWOq||+1b8}`_j+u
zJ{@r<JM7F?x%)zTU&I|EkCxt-q&c^f@VU<4NOGv>_U*9D!D-h=mWZmav;@1iOj?tn
zs$uGmMn66Du|R{m3>_`*)kQ<?H)pI~2fSPbOOE>m+W2lD4j3il4Z-s??0|VwfWw8$
U1vNiYiQd1zPLqHiiCtUx4<>MR>Hq)$
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ca4b0558763e1854b0d35a12c651d83f6c37a2c3
GIT binary patch
literal 1603
zc%17D@N?(olHy`uVBq!ia0vp^F+gm=!3HD?y5@@jDajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_cg49ppsArU1JzCKpT`MG+DAT@dwxdjX$U}IlVkeHmETB4AY
znx2_wtMq>NekFy>6kDZmQ(pt$0_W6>OpmIf)Zi+=kmRcDWXlvKdpiZ23M-%ixv3?I
z3Kh9IdBs*0wn|`gt$=Khu)dN4SV>8?trEmh5xxNm&iO^D3Z{C-y2%EHh6-k8dWI&Z
zW@d&u3PuKoM*0RoWTtCqVr6P(Wn``Z1xi5Mic-?7f?V97b^&>|N*N_31y=g{<>lpi
z<;HsXMd|v6mX?+vGmMOMfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZ_=!pRr6smX
zN-!_v7Wn$Y4bCfu1{5&J^eYkz^bPe4^mB9dVXBKuf>P7)t1b?yEJ)Q4N-fSWElLK)
zN18H{Rrs}n6armi<zJKujFiM2m;B_?+|;}hPZwJypp0HhW{Q=Yg}Ixdp}C2HxsidH
zg`uH^frYV~laZyPrL(J%k+C7n3~YLxO^htf3|%aZ%v?+i4PA|#OihfOO$?nZom?!P
zoh=PudOh=sOA_;vQ(<~D5qd4~>a}t%N=+=uFAB-e&w-_YfQ<Z-{NjxK0tM$_GX)Lb
z#N^C8kbovAf}n0qEy^rQO>ryA&s6}2uvI1&7dV=lIGY%o8W>w3`P|IN$ko-!+|kg@
zRSBv$g`7~+2RcR{ExEvifN2oKgeQI=2cCUW^MHA#2$(qvR~`yyU|=frba4!+xb^1d
z>1<&~8TJpgvzBDPVs2fM;lissZ;Pgf<I-tLqAN9mTqer7=6vM;*cj&`^7iO#j|oe{
z9J|;xTQ0D>3RJ&fUSj5H`0mzS8?)WBziy8@I+^QcC;R^UANIa^@+EP`-I)(#uRope
z%$0%h0AnA6%mWSx#o*4sSHJ?MKKxhs6W?<>q%$j6SKM5T*Y(%oH~F#_rN2CC;`h`S
zR(||>qoQikyr~DD{h##c?3)iW8#g!KZQng#>*3k!LhZZcE^L-n_*~yseZ%Yg#>cgD
z=XTy+-P*6X{9S>rqN>yR?ZNg9XZK6KOKi^wlYjg6<=*{aXWDa*|1(R7G|kuHFseV;
z{PyFw=D+HGb~;(}%WiGsRcw3Ec;j8f@t+5~7r)xIYjxVy1&0M<!bDQfFXeXb_X_>n
z5V^YO$FF2|J<myZ%D#U3V0+qd_o=Bu8zh_arS};Xc~5Ay+q;B$wrPdQC9&+gLU!L%
zW0}j05AZrqH}zfn!G^y#t>JZB+?lk^{jPzlnD<&{S0rYoy*l~ki%-zB6!8~t4)VU*
z?PF$a^}p_)=)z)$bndw2tFG+qye?cmecCkjm)3$Wdd%(kwtCF1{aEzJ&u)6XcBe!7
z-mTyH{I0FIyt3p~+pox20oRY}Rv-Sd|8JbPIoEn}&9psnMyIr!KFH3k``Y`I{iEQW
zZr4~t-_O2PI;EG_gnVxFb@aQsg_Uo+E${R4*DdAW_D+vm(3zpKtKM|_>|z;f@7))f
zZro_7PG)=+mUa5r^TlotEViez{Ci!$r;1&7$Ci8%nTG%WmUd!|;erO`GoM2n7#WT+
WU!2>V<h&D9tb4lpxvX<aXaWG2%U^E*
rename from mobile/android/base/resources/drawable/tabs_button.xml
rename to mobile/android/base/resources/drawable/tabs_button.xml.in
--- a/mobile/android/base/resources/drawable/tabs_button.xml
+++ b/mobile/android/base/resources/drawable/tabs_button.xml.in
@@ -1,17 +1,32 @@
+#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/. -->
 
-<level-list xmlns:android="http://schemas.android.com/apk/res/android">
+<level-list xmlns:android="http://schemas.android.com/apk/res/android"
+            xmlns:gecko="http://schemas.android.com/apk/res/@ANDROID_PACKAGE_NAME@">
 
     <item android:maxLevel="1">
+
         <selector>
-            <item android:state_pressed="true" android:drawable="@drawable/highlight"/>
+
+            <item gecko:state_private="true"
+                  android:state_pressed="true"
+                  android:drawable="@drawable/highlight"/>
+
+            <item gecko:state_private="true"
+                  android:drawable="@drawable/tabs_tray_bg_pb_repeat"/>
+
+            <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>
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2931c6c03276d5bb614de1b492932d714b93fbda
GIT binary patch
literal 1222
zc%17D@N?(olHy`uVBq!ia0vp^5<qOg!3HF`J9aGwQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS=07??9MLn2Bde0{8v^K<nQL2C3Watjzhz{b9!ATc>RwL~E)
zH9a%WR_Xoj{Yna%DYi=CroINg1<t7%nI2U|slio#A<0$Q$(AWf_I3(36;?n4a#KqZ
z6)JLb@`|l0Y?Z*~S^?Q0VSOb9u#%E&TP292B76fBob!uP6-@Pvb(0MY4HeAH^bAc*
z&CCpS6pRcEjr0wG$V}JJ#LCpn%E(*+3Y37h6{VzE1-ZCE?E>;_l`=|73as??%gf94
z%8m8%i_-NCEiElUW*8ai0#)c1SLT%@R_NvxE5l51Ni9w;$}A|!%+FH*@e`BsOG|8(
zlwe-SE%5b)8=O}R4Jcrc=~pBc=o{)8=;!9@!&DcS1f{0oS6v)ZS&*t9lv<o$T9gco
zk2GZ@tMF?DDFnL4%D*TR7%7Q4F8Rr&xv6<2o-VdZKpDN1%oHm(3v)L^Lvs@Yb0Y&Y
z3qwN-0}Ep}CnHNoOJ`RjBV$9D8QAoiI~ki8SvXr7nYox48oC-enVJ|mn;1G-I=NUn
zJ6jsS^m^tMmn7yTr^57RBJ^6|)obNkl$uzQUlfv`p94z)0U7xv`NbLe1q#l=W(pd<
ziOHFHAOTHK1VP=JT9jFqn&MWJpQ`{4VXI6mE^st8aW*kFH88e7^0}Fjk*lkdxuc<*
zs}fXi3OS*s4|I$^T5^F20n;Fe2~Ye$4m|s$<^l6e5ioP~e%bK_n6bWix;TbZ+)DcM
z|Gz!6F5}}Btc%5Zq71SQVlWsD#SEAjCp=<Es?+G@sbl!)F7Q{rU$I3e;akDiE2YJS
z_Me}>mrt7!HDRyL8J+!M>mnDHfBMoH{X-`~@xkH$)@Awihff_da*qpCeEa=<yn?*p
zhK-y4?k<1-k7vQd`3~P2uLKIY+;Ld*?%})070Z@Mu^PQO_EoyO?Cnic$rJlnkHmkN
z<#>Qe;3&(HJq~MLy?ZwC!~6I9_wWAxE{fyHebz_k9scwOaZk_{Z2EM+DTdETMy4-h
w14A08@sz*fX%?<xJ<py5a=Ue~GBC0+Tok*v?u#PVdQi#Y>FVdQ&MBb@04&O(hX4Qo
rename from mobile/android/base/resources/drawable/tabs_level.xml
rename to mobile/android/base/resources/drawable/tabs_level.xml.in
--- a/mobile/android/base/resources/drawable/tabs_level.xml
+++ b/mobile/android/base/resources/drawable/tabs_level.xml.in
@@ -1,12 +1,19 @@
+#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/. -->
 
-<level-list xmlns:android="http://schemas.android.com/apk/res/android">
+<level-list xmlns:android="http://schemas.android.com/apk/res/android"
+            xmlns:gecko="http://schemas.android.com/apk/res/@ANDROID_PACKAGE_NAME@">
 
     <item android:maxLevel="0" android:drawable="@android:color/transparent"/>
 
-    <item android:maxLevel="1" android:drawable="@drawable/tabs_carat"/>
+    <item android:maxLevel="1">
+        <selector>
+            <item gecko:state_private="true" android:drawable="@drawable/tabs_carat_pb"/>
+            <item android:drawable="@drawable/tabs_carat"/>
+        </selector>
+    </item>
 
 </level-list>
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/resources/drawable/tabs_tray_bg_pb_repeat.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/. -->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+        android:src="@drawable/tabs_tray_bg_pb"
+        android:tileMode="repeat"/>
--- a/mobile/android/base/resources/layout-land-v14/browser_toolbar.xml.in
+++ b/mobile/android/base/resources/layout-land-v14/browser_toolbar.xml.in
@@ -43,23 +43,23 @@
                                       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"/>
+        <Gecko.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"/>
 
         <FrameLayout style="@style/AddressBar.Button"
                      android:layout_marginTop="3dp"
                      android:layout_marginBottom="3dp"
                      android:layout_marginLeft="4dp"
                      android:layout_marginRight="45dp"
                      android:layout_alignParentLeft="true"
                      android:layout_alignParentBottom="true"
--- a/mobile/android/base/resources/layout-land-v14/browser_toolbar_menu.xml.in
+++ b/mobile/android/base/resources/layout-land-v14/browser_toolbar_menu.xml.in
@@ -51,23 +51,23 @@
                                       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"/>
+        <Gecko.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"/>
         
         <FrameLayout style="@style/AddressBar.Button"
                      android:layout_marginTop="3dp"
                      android:layout_marginBottom="3dp"
                      android:layout_marginLeft="4dp"
                      android:layout_marginRight="80dp"
                      android:layout_alignParentLeft="true"
                      android:layout_alignParentBottom="true"
--- 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
@@ -39,23 +39,23 @@
                                       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"/>
+        <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"/>
 
--- a/mobile/android/base/resources/layout-xlarge-v11/browser_toolbar_menu.xml.in
+++ b/mobile/android/base/resources/layout-xlarge-v11/browser_toolbar_menu.xml.in
@@ -26,23 +26,23 @@
                                       gecko:cropped="true"
                                       gecko:sidebar="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"/>
+        <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"/>
 
         <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"
                      android:contentDescription="@string/menu"
--- a/mobile/android/base/resources/layout/browser_toolbar.xml.in
+++ b/mobile/android/base/resources/layout/browser_toolbar.xml.in
@@ -43,23 +43,23 @@
                                       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"/>
+        <Gecko.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"/>
 
         <FrameLayout style="@style/AddressBar.Button"
                      android:layout_marginTop="4dp"
                      android:layout_marginBottom="4dp"
                      android:layout_marginLeft="4dp"
                      android:layout_marginRight="52dp"
                      android:layout_alignParentLeft="true"
                      android:layout_alignParentBottom="true"
--- a/mobile/android/base/resources/layout/browser_toolbar_menu.xml.in
+++ b/mobile/android/base/resources/layout/browser_toolbar_menu.xml.in
@@ -52,23 +52,23 @@
                                       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"/>
+        <Gecko.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"/>
 
         <FrameLayout style="@style/AddressBar.Button"
                      android:layout_marginTop="4dp"
                      android:layout_marginBottom="4dp"
                      android:layout_marginLeft="4dp"
                      android:layout_marginRight="100dp"
                      android:layout_alignParentLeft="true"
                      android:layout_alignParentBottom="true"
--- a/mobile/android/base/resources/layout/tabs_counter.xml
+++ b/mobile/android/base/resources/layout/tabs_counter.xml
@@ -1,15 +1,16 @@
 <?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/. -->
 
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
-          android:layout_width="wrap_content"
-          android:layout_height="wrap_content"
-          android:textSize="@dimen/tabs_counter_size"
-          android:textColor="@color/tabs_counter_color"
-          android:gravity="center"
-          android:shadowColor="#7F000000"
-          android:shadowRadius="1"
-          android:shadowDx="0"
-          android:shadowDy="1"/>
+<Gecko.TextView xmlns:android="http://schemas.android.com/apk/res/android"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textSize="@dimen/tabs_counter_size"
+                android:textColor="@color/tabs_counter_color"
+                android:duplicateParentState="true"
+                android:gravity="center"
+                android:shadowColor="#7F000000"
+                android:shadowRadius="1"
+                android:shadowDx="0"
+                android:shadowDy="1"/>
--- a/mobile/android/base/resources/values/colors.xml
+++ b/mobile/android/base/resources/values/colors.xml
@@ -7,15 +7,14 @@
   <color name="splash_background">#000000</color>
   <color name="splash_msgfont">#ffffff</color>
   <color name="splash_urlfont">#000000</color>
   <color name="splash_content">#ffffff</color>
   <color name="doorhanger_link">#ACC4D5</color>
   <color name="validation_message_text">#ffffff</color>
   <color name="identity_verified">#77BAFF</color>
   <color name="identity_identified">#B7D46A</color>
-  <color name="tabs_counter_color">#C7D1DB</color>
   <color name="url_bar_text_highlight">#FF9500</color>
   <color name="suggestion_primary">#dddddd</color>
   <color name="suggestion_pressed">#bbbbbb</color>
   <color name="abouthome_topsite_shadow">#1000</color>
 </resources>