package edu.stanford.cs.sujogger.util;
import android.content.Context;
import android.database.Cursor;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CursorAdapter;
import android.widget.TextView;
import edu.stanford.cs.gaming.sdk.model.User;
import edu.stanford.cs.sujogger.R;
public class UserListAdapter extends CursorAdapter {
private static final String TAG = "OGT.UserListAdapter";
private boolean mFlinging = false;
private boolean[] checkmarks;
private int numChecked;
private Cursor mCursor;
public UserListAdapter(Context context, Cursor c, boolean showCheckBoxes, long[] initialUserIds) {
this(context, c, true, showCheckBoxes, initialUserIds);
}
public UserListAdapter(Context context, Cursor c, boolean autoRequery, boolean showCheckBoxes, long[] initialUserIds) {
super(context, c, autoRequery);
mCursor = c;
if (showCheckBoxes) {
checkmarks = new boolean[c.getCount()];
if (initialUserIds == null)
clearAllChecked();
else {
int initPos = 0, cursorPos = 0;
mCursor.moveToPosition(-1);
while(mCursor.moveToNext() && initPos < initialUserIds.length) {
if (mCursor.getLong(1) != initialUserIds[initPos])
checkmarks[cursorPos] = false;
else {
checkmarks[cursorPos] = true;
initPos++;
}
cursorPos++;
}
numChecked = initialUserIds.length;
}
}
else
checkmarks = null;
}
public Object getItem(int position) {
if (position >= 0 && position < mCursor.getCount()) {
mCursor.moveToPosition(position);
int userId = mCursor.getInt(1);
if (userId > 0)
return userId;
else
return mCursor.getLong(2);
}
else return null;
}
public User getUser(int position) {
if (position >= 0 && position < mCursor.getCount()) {
mCursor.moveToPosition(position);
User user = new User();
user.id = mCursor.getInt(1);
user.fb_id = mCursor.getLong(2);
user.first_name = mCursor.getString(3);
user.last_name = mCursor.getString(4);
return user;
}
else return null;
}
public int getNumChecked() {
return numChecked;
}
public boolean isCheckedAtPosition(int position) {
if (position >= 0 && position < checkmarks.length)
return checkmarks[position];
else return false;
}
public int toggleItemAtPosition(int position) {
if (position >= 0 && position < checkmarks.length) {
checkmarks[position] = !checkmarks[position];
if (checkmarks[position])
numChecked++;
else
numChecked--;
return numChecked;
}
else return -1;
}
public void clearAllChecked() {
for (int i = 0; i < checkmarks.length; i++)
checkmarks[i] = false;
numChecked = 0;
}
public long[] getCheckedUserIds() {
long[] checkedUsers = new long[numChecked];
int pos = 0;
for (int i = 0; i < checkmarks.length; i++) {
if (checkmarks[i]) {
mCursor.moveToPosition(i);
checkedUsers[pos] = mCursor.getLong(1);
pos++;
}
}
return checkedUsers;
}
public User[] getCheckedUsers() {
User[] checkedUsers = new User[numChecked];
int pos = 0;
for (int i = 0; i < checkmarks.length; i++) {
if (checkmarks[i]) {
mCursor.moveToPosition(i);
User newUser = new User();
newUser.id = mCursor.getInt(1);
newUser.fb_id = mCursor.getInt(2);
newUser.first_name = mCursor.getString(3);
newUser.last_name = mCursor.getString(4);
checkedUsers[pos] = newUser;
pos++;
}
}
return checkedUsers;
}
@Override
public void notifyDataSetChanged() {
if (checkmarks != null) {
checkmarks = new boolean[mCursor.getCount()];
clearAllChecked();
}
super.notifyDataSetChanged();
}
/*
public void setFlinging(boolean flinging) {
mFlinging = flinging;
}
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View ret = super.getView(position, convertView, parent);
if (ret != null) {
//TODO: Facebook
RemoteImageView image = (RemoteImageView) ret.findViewById(R.id.user_image);
if (image != null && !mFlinging) {
//Log.d(TAG, "getView(): trying to fetch image");
image.loadImage();
}
if (checkmarks != null && position >= 0 && position < checkmarks.length) {
View check = ret.findViewById(R.id.user_check);
if (checkmarks[position])
check.setVisibility(View.VISIBLE);
else
check.setVisibility(View.INVISIBLE);
}
}
return ret;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
String firstName = cursor.getString(3);
String lastName = cursor.getString(4);
String imgUrl = cursor.getString(5);
TextView name = (TextView)view.findViewById(R.id.user_name);
if (firstName == null)
name.setText(lastName);
else
name.setText(firstName + " " + lastName);
//TODO: Facebook
RemoteImageView image = (RemoteImageView)view.findViewById(R.id.user_image);
image.setLocalURI(Common.getCacheFileName(imgUrl));
image.setRemoteURI(imgUrl);
//image.setVisibility(View.GONE);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
final View v = LayoutInflater.from(context).inflate(R.layout.user_list_item, parent, false);
bindView(v, context, cursor);
return v;
}
}