Bug 1357780 - Fix tint problem in Android 4.4
Use this way to wrap drawable to make tinting works.
MozReview-Commit-ID: rbblrr3ysy
--- 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.