Bug 1353019: fix icon creation issue in GeckoMenuItem
If change icon via resource id, we should create mIcon as well. And
method `getIcon` should return the drawable which be used currently, but
not generating a new drawable via resource id.
Without this patch, we cannot change icon of a GeckoMenuItem until we
set the icon back. ie.
Drawable icon = menuItem.getIcon();
icon.setLevel(42); // does not work, cause the icon is new instance.
MozReview-Commit-ID: KxW66OgI9po
--- a/mobile/android/base/java/org/mozilla/gecko/menu/GeckoMenuItem.java
+++ b/mobile/android/base/java/org/mozilla/gecko/menu/GeckoMenuItem.java
@@ -1,46 +1,48 @@
/* 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.menu;
-import org.mozilla.gecko.R;
-import org.mozilla.gecko.util.ResourceDrawableUtils;
-import org.mozilla.gecko.widget.GeckoActionProvider;
-
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.view.ActionProvider;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
+import org.mozilla.gecko.R;
+import org.mozilla.gecko.util.ResourceDrawableUtils;
+import org.mozilla.gecko.widget.GeckoActionProvider;
+
public class GeckoMenuItem implements MenuItem {
private static final int SHARE_BAR_HISTORY_SIZE = 2;
// These values mirror MenuItem values that are only available on API >= 11.
public static final int SHOW_AS_ACTION_NEVER = 0;
public static final int SHOW_AS_ACTION_IF_ROOM = 1;
public static final int SHOW_AS_ACTION_ALWAYS = 2;
public static final int SHOW_AS_ACTION_WITH_TEXT = 4;
public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8;
// A View that can show a MenuItem should be able to initialize from
// the properties of the MenuItem.
public static interface Layout {
public void initialize(GeckoMenuItem item);
+
public void setShowIcon(boolean show);
}
public static interface OnShowAsActionChangedListener {
public boolean hasActionItemBar();
+
public void onShowAsActionChanged(GeckoMenuItem item);
}
private final int mId;
private final int mOrder;
private View mActionView;
private int mActionEnum;
private CharSequence mTitle;
@@ -149,24 +151,17 @@ public class GeckoMenuItem implements Me
@Override
public int getGroupId() {
return 0;
}
@Override
public Drawable getIcon() {
- if (mIcon == null) {
- if (mIconRes != 0)
- return ResourceDrawableUtils.getDrawable(mMenu.getContext(), mIconRes);
- else
- return null;
- } else {
- return mIcon;
- }
+ return mIcon;
}
@Override
public Intent getIntent() {
return null;
}
@Override
@@ -330,21 +325,17 @@ public class GeckoMenuItem implements Me
}
return this;
}
@Override
public MenuItem setIcon(int iconRes) {
if (mIconRes != iconRes) {
mIconRes = iconRes;
- if (mShouldDispatchChanges) {
- mMenu.onItemChanged(this);
- } else {
- mDidChange = true;
- }
+ setIcon(ResourceDrawableUtils.getDrawable(mMenu.getContext(), mIconRes));
}
return this;
}
@Override
public MenuItem setIntent(Intent intent) {
return this;
}