package net.nightwhistler.ui;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.ActionMode;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
/**
* Builder class for ActionMode callbacks.
*
* Allows a more functional way of building action modes.
*
* @author Alex Kuiper
*/
public class ActionModeBuilder {
public static interface ActionModeAction<A> {
boolean perform( ActionMode actionMode, A item );
}
public static interface DestroyActionModeCommand {
void perform( ActionMode mode );
}
private ActionModeAction<Menu> createAction;
private ActionModeAction<Menu> prepareAction;
private ActionModeAction<MenuItem> clickedAction;
private DestroyActionModeCommand destroyAction;
/**
* Creates a blank builder
*/
public ActionModeBuilder() {
}
/**
* Creates an ActionModeBuilder which uses the given string
* as a title for the ActionMode
* @param title
*/
public ActionModeBuilder( String title ) {
setTitle( title );
}
/**
* Creates an ActionModeBuilder which uses the given
* resource id for the title.
*
* @param titleResourceId
*/
public ActionModeBuilder( int titleResourceId ) {
setTitle( titleResourceId );
}
public ActionModeBuilder setTitle( String title ) {
this.prepareAction = (actionMode, menu ) -> {
actionMode.setTitle( title );
return true;
};
return this;
}
public ActionModeBuilder setTitle( int titleResourceId ) {
this.prepareAction = (actionMode, menu ) -> {
actionMode.setTitle( titleResourceId );
return true;
};
return this;
}
public ActionModeBuilder setOnActionItemClickedAction(ActionModeAction<MenuItem> clickedAction) {
this.clickedAction = clickedAction;
return this;
}
public ActionModeBuilder setOnCreateAction(ActionModeAction<Menu> createAction) {
this.createAction = createAction;
return this;
}
public ActionModeBuilder setOnDestroyAction(DestroyActionModeCommand destroyAction) {
this.destroyAction = destroyAction;
return this;
}
public ActionModeBuilder setOnPrepareAction(ActionModeAction<Menu> prepareAction) {
this.prepareAction = prepareAction;
return this;
}
public void build( SherlockFragmentActivity sherlockActivity ) {
sherlockActivity.startActionMode( new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
if ( createAction != null ) {
return createAction.perform(actionMode, menu);
}
return false;
}
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
if ( prepareAction != null ) {
return prepareAction.perform( actionMode, menu );
}
return false;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
if ( clickedAction != null ) {
return clickedAction.perform( actionMode, menuItem );
}
return false;
}
@Override
public void onDestroyActionMode(ActionMode actionMode) {
if ( destroyAction != null ) {
destroyAction.perform(actionMode);
}
}
});
}
}