Bug 1357780 - Fix tint problem in Android 4.4 draft
authorJulian_Chu <walkingice0204@gmail.com>
Thu, 18 May 2017 10:48:44 +0800
changeset 581364 8cf8f336f71606b720867c00a94851b8ab6d043d
parent 581363 bc8f969cae9ba293137d2e6f90611121bc1f852d
child 629555 7ea906ab79c1eca09c146ceb09bc99fa1fbab534
push id59845
push userbmo:walkingice0204@gmail.com
push dateFri, 19 May 2017 18:24:39 +0000
bugs1357780
milestone55.0a1
Bug 1357780 - Fix tint problem in Android 4.4 Use this way to wrap drawable to make tinting works. MozReview-Commit-ID: rbblrr3ysy
mobile/android/base/java/org/mozilla/gecko/customtabs/ActionBarPresenter.java
--- a/mobile/android/base/java/org/mozilla/gecko/customtabs/ActionBarPresenter.java
+++ b/mobile/android/base/java/org/mozilla/gecko/customtabs/ActionBarPresenter.java
@@ -135,19 +135,22 @@ public class ActionBarPresenter {
         final ImageButton btn = new ImageButton(mActionBar.getThemedContext(), null, 0);
         final int size = res.getDimensionPixelSize(R.dimen.custom_tab_action_button_size);
         final int padding = res.getDimensionPixelSize(R.dimen.custom_tab_action_button_padding);
         btn.setPadding(padding, padding, padding, padding);
         btn.setLayoutParams(new ViewGroup.LayoutParams(size, size));
         btn.setScaleType(ImageView.ScaleType.FIT_CENTER);
 
         if (tint) {
-            DrawableCompat.setTint(icon, mTextPrimaryColor);
+            Drawable wrapped = DrawableCompat.wrap(icon);
+            DrawableCompat.setTint(wrapped, mTextPrimaryColor);
+            btn.setImageDrawable(wrapped);
+        } else {
+            btn.setImageDrawable(icon);
         }
-        btn.setImageDrawable(icon);
 
         // menu id does not matter here. We can directly bind callback to the returned-view.
         final MenuItem item = menu.add(Menu.NONE, -1, Menu.NONE, "");
         item.setActionView(btn);
         MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
         return btn;
     }
 
@@ -183,18 +186,19 @@ public class ActionBarPresenter {
     private void initIndicator() {
         mActionBar.setDisplayHomeAsUpEnabled(true);
 
         @SuppressWarnings("deprecation")
         final Drawable icon = mActionBar.getThemedContext()
                 .getResources()
                 .getDrawable(R.drawable.ic_close_light);
 
-        DrawableCompat.setTint(icon, mTextPrimaryColor);
-        mActionBar.setHomeAsUpIndicator(icon);
+        Drawable wrapped = DrawableCompat.wrap(icon);
+        DrawableCompat.setTint(wrapped, mTextPrimaryColor);
+        mActionBar.setHomeAsUpIndicator(wrapped);
     }
 
     /**
      * To update appearance of CustomView of ActionBar, includes its icon, title and url text.
      *
      * @param identity SiteIdentity for current website. Could be null if don't want to show icon.
      * @param title    Title for current website. Could be null if don't want to show title.
      * @param url      URL for current website. At least Custom will show this url.