package gueei.binding.menu;
import gueei.binding.Binder;
import gueei.binding.IObservable;
import gueei.binding.labs.EventAggregator;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.Hashtable;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.util.AttributeSet;
import android.util.Xml;
import android.view.Menu;
import android.view.MenuItem;
// Each OptionsMenuBinder correspond to one AbsMenuBridge xml.
// Instance should be kept by the activity
// Deprecated, replacing by BindableOptionsMenu as it is more general
@Deprecated
public class OptionsMenuBinder implements IMenuItemChangedCallback{
private boolean firstCreate = true;
private final int mMenuResId;
private Hashtable<Integer, AbsMenuBridge> items =
new Hashtable<Integer, AbsMenuBridge>();
private WeakReference<Activity> mActivity;
public OptionsMenuBinder(int menuResId){
mMenuResId = menuResId;
}
// Called by owner activity
public boolean onCreateOptionsMenu(Activity activity, Menu menu, Object model){
mActivity = new WeakReference<Activity>(activity);
// First inflate the menu - default action
activity.getMenuInflater().inflate(mMenuResId, menu);
if (firstCreate){
// Now, parse the menu
XmlResourceParser parser = activity.getResources().getXml(mMenuResId);
try{
int eventType= parser.getEventType();
while(eventType != XmlResourceParser.END_DOCUMENT){
if (eventType==XmlResourceParser.START_TAG){
int id = parser.getAttributeResourceValue(Binder.ANDROID_NAMESPACE, "id", -1);
String nodeName = parser.getName();
if (id>0){
AttributeSet attrs = Xml.asAttributeSet(parser);
AbsMenuBridge item =
AbsMenuBridge.create(nodeName, id, attrs, activity, model, null);
if (item!=null){
items.put(id, item);
}
}
}
eventType = parser.next();
}
}catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException ex){
ex.printStackTrace();
}
firstCreate = false;
}
for(AbsMenuBridge item: items.values()){
item.onCreateOptionItem(menu);
}
return true;
}
public boolean onPrepareOptionsMenu(Activity activity, Menu menu){
for(AbsMenuBridge item: items.values()){
item.onPrepareOptionItem(menu);
}
return true;
}
public boolean onOptionsItemSelected(Activity activity, MenuItem mi){
AbsMenuBridge item = items.get(mi.getItemId());
if (item!=null){
return item.onOptionsItemSelected(mi);
}
return false;
}
@Override
public void onItemChanged(IObservable<?> prop, AbsMenuBridge item) {
if (mActivity!=null && mActivity.get()!=null)
EventAggregator.getInstance(mActivity.get()).publish("invalidateOptionsMenu()", this, new Bundle());
}
}