package com.electronapps.LJPro; import java.util.HashMap; import com.commonsware.cwac.cache.SimpleWebImageCache; import com.commonsware.cwac.thumbnail.ThumbnailAdapter; import com.commonsware.cwac.thumbnail.ThumbnailBus; import com.commonsware.cwac.thumbnail.ThumbnailMessage; import com.electronapps.LJPro.LJTypes.Post; import android.app.Activity; import android.content.Context; import android.content.IntentFilter; import android.database.Cursor; import android.database.CursorWrapper; import android.database.MergeCursor; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.text.style.ImageSpan; import android.view.Display; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CompoundButton; import android.widget.CursorAdapter; import android.widget.HeaderViewListAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.ScrollView; import android.widget.TextView; import android.widget.ToggleButton; import android.widget.ViewSwitcher; import android.widget.CompoundButton.OnCheckedChangeListener; public class FullPostAdapter extends CursorAdapter { private int mWidth; Context mContext; private int mHeight; private int jnameInd; private int dInd; private int pInd; private int locInd; private int tagsInd; private int replyInd; private int dIdInd; private int upicInd; private LJDB LJDBAdapter; private final int[] IMAGE_IDS = { R.id.duserpic }; private SimpleWebImageCache<ThumbnailBus, ThumbnailMessage> imgCache; private int mLayoutResource; Cursor mCursor; private int anameInd; private int jtypeInd; private int pnameInd; private int starInd; private FullPost mActivity; public FullPostAdapter(Context context, Cursor c,int resourceId) { super(context, c); mCursor=c; mLayoutResource=resourceId; if (c!=null) getIndices(); mContext=context; mActivity=(FullPost) context; LJDBAdapter=((FullPost)mContext).getDBConn(); imgCache = ((LJPro) mContext.getApplicationContext()).getImageCache(); // TODO Auto-generated constructor stub } private void getIndices() { jnameInd=mCursor.getColumnIndex(LJDB.KEY_JOURNALNAME); anameInd=mCursor.getColumnIndex(LJDB.KEY_ACCOUNTNAME); dInd=mCursor.getColumnIndex(LJDB.KEY_DATE); pInd=mCursor.getColumnIndex(LJDB.KEY_EVENTRAW); dIdInd=mCursor.getColumnIndex(LJDB.KEY_ITEMID); locInd=mCursor.getColumnIndex(LJDB.KEY_LOCATION); tagsInd=mCursor.getColumnIndex(LJDB.KEY_TAGS); jnameInd=mCursor.getColumnIndex(LJDB.KEY_JOURNALNAME); starInd=mCursor.getColumnIndex(LJDB.KEY_STARRED); pnameInd=mCursor.getColumnIndex(LJDB.KEY_POSTERNAME); jtypeInd=mCursor.getColumnIndex(LJDB.KEY_JOURNALTYPE); replyInd=mCursor.getColumnIndex(LJDB.KEY_REPLYCOUNT); upicInd=mCursor.getColumnIndex(LJDB.KEY_USERPIC); } @Override public void bindView(View view, Context context, Cursor cursor) { ViewHolder holder=(ViewHolder) view.getTag(); holder.journalname.setText(mCursor.getString(jnameInd)); int pos=cursor.getPosition(); holder.starred.setTag(pos); boolean checked=starMap.get(pos)==null?(cursor.getInt(starInd)==0?false:true):starMap.get(pos); holder.starred.setChecked(checked); holder.date.setText(mCursor.getString(dInd)); if (mCursor.getString(jtypeInd).equals("C")) { holder.postername.setText(mCursor.getString(pnameInd)); } else { holder.postername.setText(""); } Cursor comments=LJDBAdapter.getComments(mCursor.getString(anameInd),mCursor.getInt(dIdInd)); holder.post.setPost(mCursor.getString(anameInd),mCursor.getString(jnameInd),mCursor.getInt(dIdInd)); if (comments.getCount()>0) { holder.commentstatus.setText("Refresh Comments"); } else holder.commentstatus.setText("Load Comments"); holder.replycount.setText(((Integer)mCursor.getInt(replyInd)).toString()); ThumbnailAdapter wrapper=(ThumbnailAdapter) ((HeaderViewListAdapter)holder.post.getAdapter()).getWrappedAdapter(); CursorAdapter adapter=(CursorAdapter) wrapper.getWrappedAdapter(); CursorWrapper post=new PostWrapper(mCursor,mCursor.getPosition()); Cursor [] a={post,comments}; PostCommentsCursor pc=new PostCommentsCursor(a); adapter.changeCursor(pc); if (mCursor.getString(upicInd)!=null&&mCursor.getString(upicInd).length()>0) { holder.userpic.setImageResource(R.drawable.defaultuserpic); holder.userpic.setTag(mCursor.getString(upicInd)); } else { holder.userpic.setTag(null); holder.userpic.setImageResource(R.drawable.defaultuserpic); } } HashMap<Integer,Boolean> starMap=new HashMap<Integer,Boolean>(); 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) { RelativeLayout v = (RelativeLayout) View.inflate(mContext,mLayoutResource,null); final ViewSwitcher footer=(ViewSwitcher) View.inflate(mContext,R.layout.commentsfooter,null); final ViewHolder holder = new ViewHolder(); holder.postername=(TextView) v.findViewById(R.id.postername); holder.starred=(ToggleButton) v.findViewById(R.id.starred); holder.starred.setOnCheckedChangeListener(onStarChanged); holder.post=(PostListView) v.findViewById(android.R.id.list); holder.replycount=(Button) footer.findViewById(R.id.commentcount); holder.commentstatus=(Button) footer.findViewById(R.id.btn_loadcomments); holder.commentstatus.setOnClickListener( new OnClickListener() { public void onClick(View v) { holder.post.loadComments(holder.replycount, (String)holder.replycount.getText()); footer.showNext(); } }); holder.post.addFooterView(footer); PostCommentsAdapter pca=new PostCommentsAdapter(mContext,null,R.layout.postbody,R.layout.comment); holder.post.setAdapter(new ThumbnailAdapter((Activity)mContext,pca,imgCache,IMAGE_IDS)); holder.userpic = (ImageView) v.findViewById(R.id.duserpic); holder.journalname = (TextView) v.findViewById(R.id.uname); holder.date=(TextView) v.findViewById(R.id.date); v.setTag(holder); return v; } @Override public void changeCursor(Cursor c) { super.changeCursor(c); starMap.clear(); } private static class ViewHolder{ ImageView userpic; TextView journalname; TextView postername; ToggleButton starred; TextView date; PostListView post; Button replycount; Button commentstatus; } }