package net.nightwhistler.ui;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.widget.SearchView;
import jedi.option.Option;
import static jedi.option.Options.option;
/**
* Created by alex on 10/11/14.
*/
public class UiUtils {
public static interface Operation<A> {
void thenDo(A arg);
}
public static interface Action {
void perform();
}
public static Operation<Action> onMenuPress( Menu menu, int elementName ) {
return onMenuPress( menu.findItem(elementName) );
}
public static Operation<Action> onMenuPress( MenuItem menuItem ) {
return action -> menuItem.setOnMenuItemClickListener(item -> {
action.perform();
return true;
});
}
public static Operation<Action> onMenuPress( android.view.MenuItem menuItem ) {
return action -> menuItem.setOnMenuItemClickListener( item -> {
action.perform();
return true;
});
}
public static SearchView.OnQueryTextListener onQuery( Operation<String> op ) {
return new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
op.thenDo(query);
return true;
}
@Override
public boolean onQueryTextChange(String query) {
return false;
}
};
}
public static MenuItem.OnActionExpandListener onCollapse(Action onCollapse) {
return new MenuItem.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem menuItem) {
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem menuItem) {
onCollapse.perform();
return true;
}
};
}
public static Option<TextView> getTextView( View parent, int id ) {
return getView( parent, id, TextView.class );
}
public static Option<ImageView> getImageView( View parent, int id ) {
return getView( parent, id, ImageView.class );
}
public static <T extends View> Option<T> getView( View parent, int id, Class<T> viewType ) {
return option( (T) parent.findViewById(id) );
}
}