package com.electronapps.LJPro; import java.util.HashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.commonsware.cwac.cache.SimpleWebImageCache; import com.commonsware.cwac.thumbnail.ThumbnailBus; import com.commonsware.cwac.thumbnail.ThumbnailMessage; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.graphics.Rect; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; import android.view.View.MeasureSpec; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CursorAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.ViewSwitcher; public class PostCommentsAdapter extends CursorAdapter { private static final int POST_VIEW=0; private static final int COMMENT_VIEW=1; private Cursor mCursor; private int pInd; private int dIdInd; private int locInd; private int tagsInd; private int replyInd; private int cnameInd=-1; private int timeInd; private int picInd; private int jnameInd; private int postRes; private int commentRes; private Context mContext; private int subInd; private int dInd; private int cpInd; private int parentInd; private int tIdInd; private int anameInd; private String mAccountName; private Integer ditemid; private String jname; private int pnameInd; private int psubInd; private static final Pattern html=Pattern.compile("\\<.*?>|&[^\\s]*;"); public PostCommentsAdapter(Context context, Cursor c, int postRes, int commentRes) { super(context, c); mCursor=c; mContext=context; this.postRes=postRes; this.commentRes=commentRes; if (c!=null) { getIndices(); c.moveToFirst(); mAccountName=c.getString(anameInd); ditemid=c.getInt(dIdInd); jname=c.getString(jnameInd); } // TODO Auto-generated constructor stub } @Override public int getViewTypeCount() { return 2; } @Override public int getItemViewType(int position){ if (position>0) { return COMMENT_VIEW; } else return POST_VIEW; } private void getIndices(){ mCursor.moveToFirst(); anameInd=mCursor.getColumnIndex(LJDB.KEY_ACCOUNTNAME); pInd=mCursor.getColumnIndex(LJDB.KEY_EVENTRAW); psubInd=mCursor.getColumnIndex(LJDB.KEY_SUBJECT); jnameInd=mCursor.getColumnIndex(LJDB.KEY_JOURNALNAME); dIdInd=mCursor.getColumnIndex(LJDB.KEY_ITEMID); locInd=mCursor.getColumnIndex(LJDB.KEY_LOCATION); tagsInd=mCursor.getColumnIndex(LJDB.KEY_TAGS); pnameInd=mCursor.getColumnIndex(LJDB.KEY_POSTERNAME); replyInd=mCursor.getColumnIndex(LJDB.KEY_REPLYCOUNT); if (mCursor.getCount()>1) { getCommentIndices(); } } public void getCommentIndices() { mCursor.moveToPosition(1); cpInd=mCursor.getColumnIndex(LJDB.KEY_EVENTRAW); picInd=mCursor.getColumnIndex(LJDB.KEY_USERPIC); subInd=mCursor.getColumnIndex(LJDB.KEY_SUBJECT); dInd=mCursor.getColumnIndex(LJDB.KEY_DATE); cnameInd=mCursor.getColumnIndex(LJDB.KEY_POSTERNAME); tIdInd=mCursor.getColumnIndex(LJDB.KEY_TALKID); parentInd=mCursor.getColumnIndex(LJDB.KEY_PARENTID); } @Override public long getItemId(int position) { if (mCursor != null) { if (mCursor.moveToPosition(position)) { if (position==0) { return Long.valueOf(mCursor.getInt(dIdInd)); } else return Long.valueOf(mCursor.getInt(tIdInd)); } else { return 0; } } else { return 0; } } @Override public void changeCursor(Cursor c) { if (c!=null) { mCursor=c; getIndices(); c.moveToFirst(); mAccountName=c.getString(anameInd); ditemid=c.getInt(dIdInd); jname=c.getString(jnameInd); super.changeCursor(c); } } private class onReplyTo implements OnClickListener { private String mJournalname; private int mItemId; private int mTalkId; private String mHTML; private String mPosterName; public void onClick(View v) { PostListView list=((PostListView)v.getParent().getParent()); list.registerReceiver(); Intent comment=new Intent(mContext,ReplyTo.class); comment.putExtra("journalname", mJournalname); comment.putExtra("accountname", mAccountName); comment.putExtra("itemid",mItemId); comment.putExtra("talkid", mTalkId); comment.putExtra("postername", mPosterName); comment.putExtra("html", mHTML); mContext.startActivity(comment); } public void setReplyTo(String journalname,int id,int talkid,String html,String postername) { mJournalname=journalname; mTalkId=talkid; mItemId=id; mHTML=html; mPosterName=postername; } } @Override public void bindView(View view, Context context, Cursor cursor) { int viewType=this.getItemViewType(mCursor.getPosition()); switch (viewType) { case POST_VIEW: PostHolder holder=(PostHolder) view.getTag(); final String journalname=mCursor.getString(jnameInd); final String postername=mCursor.getString(pnameInd); final int itemid=mCursor.getInt(dIdInd); holder.post.setTag(journalname+((Integer)itemid).toString()); holder.subject.setText(mCursor.getString(psubInd)); String post=mCursor.getString(pInd); post=post.replaceAll("\\<br>","\n"); post=post.replaceAll("\\<br\\\\>","\n"); if (post!=null) { //only parse HTML if there is actually HTML to be parsed Matcher hashtml=html.matcher(post); if (hashtml.find()){ holder.post.setLoading(); holder.post.setHTML(post); } else holder.post.setText(post); } else holder.post.setText(""); onReplyTo listener=new onReplyTo(); listener.setReplyTo(journalname,itemid,0,post==null?"":post,postername); holder.replyto.setOnClickListener(listener); if (mCursor.getString(locInd)!=null&&mCursor.getString(locInd).length()>0) { holder.location.setText(mCursor.getString(locInd)); holder.location.setVisibility(View.VISIBLE); } else { holder.location.setText(""); holder.location.setVisibility(View.GONE); } if (mCursor.getString(tagsInd)!=null&&mCursor.getString(tagsInd).length()>0) { holder.tags.setText(Html.fromHtml("<b>Tags: </b>"+mCursor.getString(tagsInd))); holder.tags.setVisibility(View.VISIBLE); } else { holder.tags.setText(""); holder.tags.setVisibility(View.GONE); } break; case COMMENT_VIEW: if (cnameInd==-1) getCommentIndices(); CommentHolder cholder=(CommentHolder) view.getTag(); if (!(mCursor.getInt(parentInd)==0)) cholder.header.setBackgroundResource(R.drawable.childheader); else cholder.header.setBackgroundResource(R.drawable.commentheader); cholder.journalname.setText(mCursor.getString(cnameInd)); if (mCursor.getString(subInd)!=null) { cholder.subject.setText(mCursor.getString(subInd)); } else cholder.subject.setText(""); cholder.date.setText(mCursor.getString(dInd)); cholder.comment.setTag(mCursor.getString(cnameInd)+((Integer)mCursor.getInt(tIdInd)).toString()); String commentText=null; if (mCursor.getString(cpInd)!=null) { Matcher hashtml=html.matcher(mCursor.getString(cpInd)); commentText=mCursor.getString(cpInd); if (hashtml.find()){ cholder.comment.setLoading(); cholder.comment.setHTML(commentText); } else cholder.comment.setText(mCursor.getString(cpInd)); } else cholder.comment.setText(""); int talkid=mCursor.getInt(tIdInd); onReplyTo clistener=new onReplyTo(); clistener.setReplyTo(jname,ditemid,talkid,commentText==null?"":commentText,mCursor.getString(cnameInd)); cholder.replyto.setOnClickListener(clistener); if (mCursor.getString(picInd)!=null&&mCursor.getString(picInd).length()>0) { cholder.userpic.setImageResource(R.drawable.defaultuserpic); cholder.userpic.setTag(mCursor.getString(picInd)); } else { cholder.userpic.setTag(null); cholder.userpic.setImageResource(R.drawable.defaultuserpic); } break; } } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { int viewType=this.getItemViewType(cursor.getPosition()); switch (viewType) { case POST_VIEW: RelativeLayout v = (RelativeLayout) View.inflate(mContext,postRes,null); PostHolder holder = new PostHolder(); holder.subject=(TextView) v.findViewById(R.id.subject); holder.post=(PostView) v.findViewById(R.id.post); holder.location=(TextView) v.findViewById(R.id.posterlocation); holder.tags=(TextView) v.findViewById(R.id.posttags); holder.replyto=(Button) v.findViewById(R.id.replyto); v.setTag(holder); return v; case COMMENT_VIEW: RelativeLayout w = (RelativeLayout) View.inflate(mContext,commentRes,null); CommentHolder cholder = new CommentHolder(); cholder.comment=(PostView) w.findViewById(R.id.post); cholder.replyto=(Button) w.findViewById(R.id.replyto); cholder.header=(LinearLayout) w.findViewById(R.id.pheader); cholder.userpic=(ImageView) w.findViewById(R.id.duserpic); cholder.journalname = (TextView) w.findViewById(R.id.uname); cholder.date=(TextView) w.findViewById(R.id.cdate); cholder.subject=(TextView) w.findViewById(R.id.csubject); w.setTag(cholder); return w; } return null; } private static class PostHolder { TextView subject; PostView post; TextView tags; TextView location; Button replyto; } private static class CommentHolder{ Button replyto; LinearLayout header; ImageView userpic; TextView journalname; TextView subject; TextView date; PostView comment; } }