package com.boardgamegeek.ui.adapter;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.BaseColumns;
import android.support.annotation.LayoutRes;
import android.support.v4.widget.CursorAdapter;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.boardgamegeek.R;
import com.boardgamegeek.provider.BggContract.GameColors;
import com.boardgamegeek.provider.BggContract.Games;
import com.boardgamegeek.util.ColorUtils;
public class GameColorAdapter extends CursorAdapter {
public static final String[] PROJECTION = new String[] { BaseColumns._ID, GameColors.COLOR };
private static final String SELECTION = GameColors.COLOR + " LIKE ?";
private final LayoutInflater inflater;
private final Uri gameColorsUri;
@LayoutRes
private final int layoutId;
public GameColorAdapter(Context context, int gameId, @LayoutRes int layoutId) {
super(context, null, false);
inflater = LayoutInflater.from(context);
gameColorsUri = createUri(gameId);
this.layoutId = layoutId;
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View row = inflater.inflate(layoutId, parent, false);
ViewHolder holder = new ViewHolder(row);
row.setTag(holder);
return row;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
ViewHolder holder = (ViewHolder) view.getTag();
String colorName = getColorName(cursor);
holder.colorName.setText(colorName);
setColor(holder, colorName);
}
private void setColor(ViewHolder holder, String colorName) {
int color = ColorUtils.parseColor(colorName);
if (color != ColorUtils.TRANSPARENT) {
ColorUtils.setColorViewValue(holder.color, color);
} else {
holder.color.setImageDrawable(null);
}
}
class ViewHolder {
final TextView colorName;
final ImageView color;
public ViewHolder(View view) {
colorName = (TextView) view.findViewById(R.id.color_name);
color = (ImageView) view.findViewById(R.id.color_view);
}
}
@Override
public CharSequence convertToString(Cursor cursor) {
return cursor.getString(1);
}
@Override
public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
String selection = null;
String[] selectionArgs = null;
if (!TextUtils.isEmpty(constraint)) {
selection = SELECTION;
selectionArgs = new String[] { constraint + "%" };
}
return mContext.getContentResolver().query(gameColorsUri, PROJECTION, selection, selectionArgs, null);
}
public static Uri createUri(int gameId) {
return Games.buildColorsUri(gameId);
}
public static String getColorName(Cursor cursor) {
if (cursor == null) {
return "";
}
return cursor.getString(1);
}
}