package com.kuxhausen.huemore;
import android.content.Context;
import android.database.Cursor;
import android.support.v4.widget.ResourceCursorAdapter;
import android.view.View;
import android.widget.TextView;
import com.kuxhausen.huemore.persistence.FutureEncodingException;
import com.kuxhausen.huemore.persistence.HueUrlEncoder;
import com.kuxhausen.huemore.persistence.InvalidEncodingException;
import java.util.ArrayList;
public class MoodRowAdapter extends ResourceCursorAdapter {
private ArrayList<MoodRow> mList = new ArrayList<MoodRow>();
public MoodRowAdapter(Context context, int layout, Cursor c, int flags) {
super(context, layout, c, flags);
}
public MoodRow getRow(int position) {
return mList.get(position);
}
@Override
public int getCount() {
return mList.size();
}
@Override
/***
* Cursor expected to have at each row {mood name, mood id}
*/
public void changeCursor(Cursor cursor) {
super.changeCursor(cursor);
mList.clear();
if (cursor != null) {
cursor.moveToPosition(-1);// not the same as move to first!
while (cursor.moveToNext()) {
try {
mList.add(new MoodRow(cursor.getString(0), cursor.getLong(1),
HueUrlEncoder.decode(cursor.getString(
2)).second.first, cursor.getString(3), cursor.getInt(4)));
} catch (InvalidEncodingException e) {
} catch (FutureEncodingException e) {
}
}
cursor.moveToFirst();
notifyDataSetChanged();
}
}
@Override
public void bindView(View rowView, Context context, Cursor cursor) {
ViewHolder viewHolder;
if (rowView.getTag() == null) {
viewHolder = new ViewHolder();
viewHolder.moodName = (TextView) rowView.findViewById(android.R.id.text1);
viewHolder.star = rowView.findViewById(android.R.id.text2);
// Hold the view objects in an object, that way the don't need to be "re-found"
rowView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) rowView.getTag();
}
/** Set data to your Views. */
MoodRow item = mList.get(cursor.getPosition());
if (!viewHolder.moodName.getText().equals(item.getName())) {
viewHolder.moodName.setText(item.getName());
MoodPreviewDrawable mDraw =
new MoodPreviewDrawable(mContext.getResources().getDisplayMetrics());
mDraw.setMood(item.getMood());
viewHolder.moodName.setCompoundDrawablesWithIntrinsicBounds(mDraw, null, null, null);
}
if (item.isStared()) {
viewHolder.star.setVisibility(View.VISIBLE);
} else {
viewHolder.star.setVisibility(View.INVISIBLE);
}
}
protected static class ViewHolder {
protected TextView moodName;
protected View star;
}
}