package com.electronapps.LJPro;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.codehaus.jackson.annotate.JsonProperty;
import com.electronapps.LJPro.LJTypes.Post;
import com.electronapps.LJPro.Html;
import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.CursorAdapter;
import android.widget.FilterQueryProvider;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.ToggleButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
public class FriendsPageAdapter extends CursorAdapter implements FilterQueryProvider{
public static final String TAG = AccountsAdapter.class.getSimpleName();
private LayoutInflater mInflater;
private Cursor mCursor;
private FriendsPage mActivity;
private int layoutResource;
private int ltInd;
private int dateInd;
private int subjInd;
private int jnameInd;
private int upicInd;
private int jtypeInd;
private int pnameInd;
private int coordInd;
private int locInd;
private int tagInd;
private String mAccount;
Context mContext;
private int replyInd;
private int snipInd;
private int starInd;
public FriendsPageAdapter(Context context, String accountname, Cursor c, int layoutId) {
super(context, c);
this.mCursor=c;
mAccount=accountname;
mContext=context.getApplicationContext();
this.mActivity=(FriendsPage) context;
getIndices();
this.mInflater = LayoutInflater.from(context);
this.layoutResource = layoutId;
setFilterQueryProvider(this);
}
private void getIndices() {
ltInd=mCursor.getColumnIndex(LJDB.KEY_LOGTIME);
dateInd=mCursor.getColumnIndex(LJDB.KEY_DATE);
subjInd=mCursor.getColumnIndex(LJDB.KEY_SUBJECT);
jnameInd=mCursor.getColumnIndex(LJDB.KEY_JOURNALNAME);
jtypeInd=mCursor.getColumnIndex(LJDB.KEY_JOURNALTYPE);
upicInd=mCursor.getColumnIndex(LJDB.KEY_USERPIC);
pnameInd=mCursor.getColumnIndex(LJDB.KEY_POSTERNAME);
coordInd=mCursor.getColumnIndex(LJDB.KEY_COORDS);
locInd=mCursor.getColumnIndex(LJDB.KEY_LOCATION);
starInd=mCursor.getColumnIndex(LJDB.KEY_STARRED);
tagInd=mCursor.getColumnIndex(LJDB.KEY_TAGS);
replyInd=mCursor.getColumnIndex(LJDB.KEY_REPLYCOUNT);
snipInd=mCursor.getColumnIndex(LJDB.KEY_SNIPPET);
ALL_FRIENDS=mActivity.getString(R.string.allfriends);
ALL_J=mActivity.getString(R.string.jonly);
ALL_C=mActivity.getString(R.string.conly);
ALL_S=mActivity.getString(R.string.sonly);
STARRED=mActivity.getString(R.string.starred);
mConstraint=ALL_FRIENDS;
}
private String mConstraint;
private static class ViewHolder{
ImageView userpic;
ToggleButton starred;
TextView journalname;
TextView postername;
TextView subject;
TextView date;
TextView snippet;
TextView tags;
TextView location;
Button replycount;
}
HashMap<Integer,Boolean> starMap=new HashMap<Integer,Boolean>();
@Override
public void bindView(View v, Context context, Cursor c)
{
ViewHolder holder = (ViewHolder) v.getTag();
holder.journalname.setText(c.getString(jnameInd));
if (c.getString(jtypeInd).equals("C")) {
holder.postername.setText(c.getString(pnameInd));
}
else {
holder.postername.setText("");
}
int pos=c.getPosition();
holder.starred.setTag(pos);
boolean checked=starMap.get(pos)==null?(c.getInt(starInd)==0?false:true):starMap.get(pos);
holder.starred.setChecked(checked);
holder.subject.setText(c.getString(subjInd)==null?"":c.getString(subjInd));
holder.date.setText(c.getString(dateInd));
holder.snippet.setText(c.getString(snipInd)==null?"": c.getString(snipInd));
holder.location.setText(c.getString(locInd)==null?"":c.getString(locInd));
holder.location.setVisibility(c.getString(locInd)==null?View.GONE:View.VISIBLE);
holder.tags.setText(c.getString(tagInd)==null?"":Html.fromHtml("<b>Tags: </b>"+c.getString(tagInd)));
holder.tags.setVisibility(c.getString(tagInd)==null?View.GONE:View.VISIBLE);
holder.replycount.setText(c.getString(replyInd));
holder.userpic.setImageResource(R.drawable.defaultuserpic);
if (c.getString(upicInd)==null||c.getString(upicInd).length()>0) holder.userpic.setTag(c.getString(upicInd));
else holder.userpic.setTag(null);
}
final OnCheckedChangeListener onStarChanged=new OnCheckedChangeListener(){
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
Integer position=(Integer) buttonView.getTag();
starMap.put(position, isChecked);
mActivity.toggleStarred(position, isChecked);
}
};
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View v = mInflater.inflate(layoutResource, null);
ViewHolder holder = new ViewHolder();
holder.starred=(ToggleButton) v.findViewById(R.id.starred);
holder.starred.setOnCheckedChangeListener(onStarChanged);
holder.userpic = (ImageView) v.findViewById(R.id.duserpic);
holder.journalname = (TextView) v.findViewById(R.id.uname);
holder.postername=(TextView) v.findViewById(R.id.postername);
holder.date=(TextView) v.findViewById(R.id.date);
holder.subject=(TextView) v.findViewById(R.id.subject);
holder.snippet=(TextView) v.findViewById(R.id.snippet);
holder.location=(TextView) v.findViewById(R.id.posterlocation);
holder.tags=(TextView) v.findViewById(R.id.posttags);
holder.replycount=(Button) v.findViewById(R.id.commentcount);
v.setTag(holder);
return v;
}
public static String ALL_FRIENDS;
public static String ALL_J;
public static String ALL_C;
public static String STARRED;
public static String ALL_S;
public Cursor runQuery(CharSequence constraint) {
if(constraint==null||constraint.equals(mConstraint)) {
return mCursor;
}
else {
mConstraint=(String)constraint;
String extraWhere="";
String [] args;
if (constraint.equals(ALL_J)|constraint.equals(ALL_C)|constraint.equals(ALL_S)) {
extraWhere="AND "+LJDB.KEY_JOURNALTYPE+"=?";
if (constraint.equals(ALL_J)) {
String [] extraArgs={"P"};
args=extraArgs;
}
else if (constraint.equals(ALL_C)) {
String [] extraArgs={"C"};
args=extraArgs;
}
else {
String [] extraArgs={"Y"};
args=extraArgs;
}
}
else if(constraint.equals(STARRED)) {
extraWhere="AND "+LJDB.KEY_STARRED+"=?";
String[] extraArgs={"1"};
args=extraArgs;
}
else if(constraint.equals(ALL_FRIENDS)) {
extraWhere=null;
args=null;
}
else {
String[] extraArgs=mActivity.getGroupsHash().get(constraint);
args=extraArgs;
if (extraArgs!=null) {
for (int i=0;i<extraArgs.length;i++){
if (i==0) extraWhere+=" AND ("+LJDB.KEY_JOURNALNAME+"=?";
else extraWhere+=" OR "+LJDB.KEY_JOURNALNAME+"=?";
}
extraWhere+=")";
}
}
LJDB db=mActivity.getDBConn();
mActivity.setLastQuery(extraWhere,args);
Cursor results=db.getFriendsPage(mAccount,extraWhere,args,null);
return results;
}
}
@Override
public void changeCursor(Cursor c) {
super.changeCursor(c);
starMap.clear();
}
}