package me.devsaki.hentoid.ui;
import android.content.Context;
import android.support.v7.app.AppCompatDelegate;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import java.util.List;
import java.util.Map;
/**
* Created by avluis on 04/17/2016.
* Custom implementation of Simple Adapter for our TextView compound drawable.
*/
public class CompoundAdapter extends SimpleAdapter implements SimpleAdapter.ViewBinder {
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
private final LayoutInflater mInflater;
private final int mResource;
private final String[] mFrom;
private final int[] mTo;
private final List<? extends Map<String, ?>> mData;
private ViewBinder mViewBinder;
protected CompoundAdapter(Context context, List<? extends Map<String, ?>> data, int resource,
String[] from, int[] to) {
super(context, data, resource, from, to);
mResource = resource;
mFrom = from;
mTo = to;
mData = data;
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
private View createViewFromResource(LayoutInflater inflater, int position, View convertView,
ViewGroup parent, int resource) {
View v;
if (convertView == null) {
v = inflater.inflate(resource, parent, false);
} else {
v = convertView;
}
bindView(position, v);
return v;
}
private void bindView(int position, View view) {
final Map dataSet = mData.get(position);
if (dataSet == null) {
return;
}
final ViewBinder binder = mViewBinder;
final String[] from = mFrom;
final int[] to = mTo;
final int count = to.length;
for (int i = 0; i < count; i++) {
final View v = view.findViewById(to[i]);
if (v != null) {
final Object data = dataSet.get(from[i]);
String IMAGE_KEY = DrawerMenuContents.FIELD_ICON;
final Object imageData = dataSet.get(IMAGE_KEY);
String text = data == null ? "" : data.toString();
int resourceId = (Integer) imageData;
if (text == null) {
text = "";
}
boolean bound = false;
if (binder != null) {
bound = binder.setViewValue(v, data, text);
}
if (!bound) {
setViewText((TextView) v, text);
setViewDrawable((TextView) v, resourceId);
}
}
}
}
private void setViewDrawable(TextView view, int resource) {
view.setCompoundDrawablesWithIntrinsicBounds(resource, 0, 0, 0);
}
@Override
public ViewBinder getViewBinder() {
return mViewBinder;
}
@Override
public void setViewBinder(ViewBinder viewBinder) {
mViewBinder = viewBinder;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return createViewFromResource(mInflater, position, convertView, parent, mResource);
}
@Override
public boolean setViewValue(View view, Object data, String textRepresentation) {
return true;
}
}