package com.adamnickle.deck; import android.content.Context; import android.graphics.Typeface; import android.text.SpannableString; import android.text.Spanned; import android.text.style.CharacterStyle; import android.text.style.ForegroundColorSpan; import android.text.style.StyleSpan; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import com.adamnickle.deck.Game.CardHolder; import com.adamnickle.deck.Interfaces.GameConnection; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; public class CardHolderAdapter extends BaseAdapter { private static final int ROW_RESOURCE = android.R.layout.simple_list_item_1; private final Context mContext; private final ArrayList<CardHolder> mData; public CardHolderAdapter( Context context, CardHolder[] cardHolders ) { this( context, Arrays.asList( cardHolders ) ); } public CardHolderAdapter( Context context, Collection< CardHolder > cardHolders ) { mContext = context; if( cardHolders instanceof ArrayList ) { mData = (ArrayList< CardHolder >) cardHolders; } else { mData = new ArrayList< CardHolder >( cardHolders ); } Collections.sort( mData, CardHolder.CardHolderComparator.getInstance() ); } public Context getContext() { return mContext; } @Override public int getCount() { return mData.size(); } @Override public CardHolder getItem( int position ) { return mData.get( position ); } @Override public long getItemId( int position ) { return (long) getItem( position ).hashCode(); } @Override public View getView( int position, View convertView, ViewGroup parent ) { final View row; final Holder holder; if( convertView == null ) { row = LayoutInflater.from( getContext() ).inflate( ROW_RESOURCE, parent, false ); holder = new Holder(); holder.Text = (TextView) row.findViewById( android.R.id.text1 ); row.setTag( holder ); } else { row = convertView; holder = (Holder) row.getTag(); } final CardHolder cardHolder = getItem( position ); final SpannableString ss = getCardHolderDisplayString( cardHolder ); holder.Text.setText( ss ); return row; } private SpannableString getCardHolderDisplayString( CardHolder cardHolder ) { final CharacterStyle style; final String cardHolderID = cardHolder.getID(); if( cardHolderID.startsWith( TableFragment.TABLE_ID ) ) { style = new StyleSpan( Typeface.BOLD ); } else if( cardHolderID.startsWith( TableFragment.DRAW_PILE_ID_PREFIX ) ) { style = new ForegroundColorSpan( getContext().getResources().getColor( R.color.DrawPileBlue ) ); } else if( cardHolderID.startsWith( TableFragment.DISCARD_PILE_ID_PREFIX ) ) { style = new ForegroundColorSpan( getContext().getResources().getColor( R.color.DiscardPileRed ) ); } else if( cardHolderID.equals( GameConnection.MOCK_SERVER_ADDRESS ) ) { style = new StyleSpan( Typeface.BOLD ); } else { style = new StyleSpan( Typeface.NORMAL ); } final SpannableString ss = new SpannableString( cardHolder.getName() ); ss.setSpan( style, 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ); return ss; } class Holder { TextView Text; } }