package com.gettingmobile.android.app.actions;
import roboguice.RoboGuice;
import java.util.HashMap;
import java.util.Map;
public class SimpleActionController<T> implements ActionController<T> {
public static final int STATE_UNKNOWN = -1;
protected final ActionContext<?> context;
protected final Map<T, Action<?>> actions = new HashMap<T, Action<?>>();
public SimpleActionController(ActionContext<?> context) {
this.context = context;
}
@Override
public void registerAction(T key, Action<?> action) {
RoboGuice.getInjector(context.getApp()).injectMembers(action);
actions.put(key, action);
}
@Override
public <A extends Action<?>> A registerAction(T key, Class<A> actionClass) {
final A action = RoboGuice.getInjector(context.getApp()).getInstance(actionClass);
actions.put(key, action);
return action;
}
@Override
public void unregisterAction(T key) {
actions.remove(key);
}
@SuppressWarnings("unchecked")
public int getActionState(T key) {
final Action<?> action = actions.get(key);
return action != null ? action.getState((ActionContext) context) : STATE_UNKNOWN;
}
public Action<?> getAction(T key) {
return actions.get(key);
}
@SuppressWarnings("unchecked")
public boolean fireAction(T key) {
final Action<?> action = actions.get(key);
return action != null && action.getState((ActionContext) context) == Action.ENABLED &&
action.onFired((ActionContext) context);
}
}