package mobi.monaca.framework.nativeui.menu;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.lang.reflect.Field;
import mobi.monaca.framework.bootloader.LocalFileBootloader;
import mobi.monaca.framework.nativeui.UIContext;
import mobi.monaca.framework.util.MyLog;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.view.Menu;
import android.view.MenuItem;
/** This class represents MenuItem component in UIFramework. */
public class MenuItemRepresentation implements Serializable {
private static final long serialVersionUID = 1L;
//private static final String TAG = MenuItemRepresentation.class.getSimpleName();
protected String title;
protected String iconImagePath = "";
protected String action = "";
public MenuItemRepresentation(String title) {
this.title = title;
}
public void setIconImagePath(String iconImagePath) {
this.iconImagePath = iconImagePath;
}
public void setAction(String action) {
this.action = action;
}
public void addMenuItemToMenu(final UIContext context, Menu menu) {
MenuItem menuItem = menu.add(title);
if (!iconImagePath.equals("")) {
if (iconImagePath.startsWith("@")) {
try {
Field field = android.R.drawable.class.getField("ic_menu_" + iconImagePath.substring(1));
int id = (Integer) field.get(null);
menuItem.setIcon(context.getResources().getDrawable(id));
} catch (Exception e) {
MyLog.e(getClass().getSimpleName(), "can't locate system icon: android.R.drawable.ic_menu_" + iconImagePath.substring(1));
}
} else {
try {
InputStream stream = null;
if (iconImagePath.startsWith("/data/")) {
stream = new FileInputStream(iconImagePath);
}else{
stream = LocalFileBootloader.openAsset(context, "www/" + iconImagePath);
}
menuItem.setIcon(new BitmapDrawable(context.getResources(), BitmapFactory.decodeStream(stream)));
stream.close();
} catch (IOException e) {
MyLog.e(getClass().getSimpleName(), "cant open icon image: file:///android_asset/www/" + iconImagePath);
}
}
}
menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
if (!action.equals("")) {
context.react("javascript:" + action);
return true;
}
return false;
}
});
}
}