hood-core/src/release/java/at/favre/lib/hood/internal/entries/ActionEntry.java
package at.favre.lib.hood.internal.entries;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import java.util.AbstractMap;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import at.favre.lib.hood.R;
import at.favre.lib.hood.interfaces.PageEntry;
import at.favre.lib.hood.interfaces.ViewTemplate;
import at.favre.lib.hood.interfaces.ViewTypes;
import at.favre.lib.hood.interfaces.actions.ButtonDefinition;
/**
* An entry that is one or two buttons which have defined click action
*/
public class ActionEntry implements PageEntry<List<ButtonDefinition>> {
private final List<ButtonDefinition> actionList;
/**
* Single column action
*
* @param action
*/
public ActionEntry(ButtonDefinition action) {
this.actionList = Collections.singletonList(action);
}
/**
* Two columns with 2 different actions in a row
*
* @param actionLeft
* @param actionRight
*/
public ActionEntry(ButtonDefinition actionLeft, ButtonDefinition actionRight) {
this.actionList = Collections.unmodifiableList(Arrays.asList(actionLeft, actionRight));
}
@Override
public List<ButtonDefinition> getValue() {
return actionList;
}
@Override
public ViewTemplate<List<ButtonDefinition>> createViewTemplate() {
return new Template(getViewType());
}
@Override
public int getViewType() {
return actionList.size() == 1 ? ViewTypes.VIEWTYPE_ACTION : ViewTypes.VIEWTYPE_ACTION_DOUBLE;
}
@Override
public String toLogString() {
return null;
}
@Override
public void disableLogging() {
//no-op
}
@Override
public void refresh() {
//no-op
}
private static class Template implements ViewTemplate<List<ButtonDefinition>> {
private final int viewType;
Template(int viewType) {
this.viewType = viewType;
}
@Override
public int getViewType() {
return viewType;
}
@Override
public View constructView(ViewGroup viewGroup, LayoutInflater inflater) {
if (viewType == ViewTypes.VIEWTYPE_ACTION) {
return inflater.inflate(R.layout.hoodlib_template_action_single, viewGroup, false);
} else {
return inflater.inflate(R.layout.hoodlib_template_action_double, viewGroup, false);
}
}
@Override
public void setContent(final List<ButtonDefinition> value, @NonNull View view) {
if (viewType == ViewTypes.VIEWTYPE_ACTION) {
((TextView) view.findViewById(R.id.button)).setText(value.get(0).label);
view.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
value.get(0).onClickAction.onClick(v, new AbstractMap.SimpleEntry<CharSequence, String>(value.get(0).label, null));
}
});
} else {
((TextView) view.findViewById(R.id.buttonLeft)).setText(value.get(0).label);
view.findViewById(R.id.buttonLeft).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
value.get(0).onClickAction.onClick(v, new AbstractMap.SimpleEntry<CharSequence, String>(value.get(0).label, null));
}
});
((TextView) view.findViewById(R.id.buttonRight)).setText(value.get(1).label);
view.findViewById(R.id.buttonRight).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
value.get(1).onClickAction.onClick(v, new AbstractMap.SimpleEntry<CharSequence, String>(value.get(1).label, null));
}
});
}
}
@Override
public void decorateViewWithZebra(@NonNull View view, @ColorInt int zebraColor, boolean isOdd) {
//no-op
}
}
}