package com.vt.vthacks.view; import android.net.Uri; import android.os.Build; import android.content.Intent; import com.vt.vthacks.R; import com.vt.vthacks.model.IContactMethod; import com.vt.vthacks.model.IContact; import android.view.LayoutInflater; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import java.util.List; import com.vt.vthacks.model.ICompany; import android.content.Context; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; // ------------------------------------------------------------------------- /** * Write a one-sentence summary of your class here. * Follow it with additional details about its purpose, what abstraction * it represents, and how to use it. * * @author Brandon Potts * @version Mar 28, 2014 */ public class CompanyContactsAdapter extends ArrayAdapter<ICompany> { public interface OnContactClickListener { public void onContactClicked(IContact contact); } private LayoutInflater mInflater; private OnContactClickListener clickListener; // ---------------------------------------------------------- /** * Create a new CompanyContactsAdapter object. * @param context * @param listItems */ public CompanyContactsAdapter(Context context, List<ICompany> listItems, OnContactClickListener clickListener) { super(context, 0, listItems); this.clickListener = clickListener; this.mInflater = LayoutInflater.from(context); } @Override public View getView(int position, View convertView, ViewGroup parent) { final ICompany item = getItem(position); ContactViewHolder holder; if(convertView == null) { LinearLayout container = (LinearLayout)mInflater.inflate(R.layout.company_list_row, parent , false); holder = ContactViewHolder.create(container); container.setTag(holder); } else { holder = (ContactViewHolder)convertView.getTag(); } if (holder.rootView.getChildCount() > 1) { holder.rootView.removeViews(1, holder.rootView.getChildCount() - 1); } for(final IContact contact : item.getContacts()) { RelativeLayout ref = (RelativeLayout)mInflater.inflate( R.layout.contact_list_row, holder.rootView , false); ref.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { clickListener.onContactClicked(contact); } }); TextView cName = (TextView)ref.findViewById(R.id.contact_name); cName.setText(contact.getName()); TextView cSkills = (TextView)ref.findViewById(R.id.contact_skills); StringBuilder builder = new StringBuilder(); for (String skill : contact.getSkills()) { builder.append(skill).append(", "); } builder.setLength(builder.length()-2); cSkills.setText(builder.toString()); LinearLayout cLay = (LinearLayout)ref.findViewById(R.id.contact_linear_layout); for(final IContactMethod method : contact.getContactMethods()) { ImageView button = new ImageView(getContext()); switch(method.getType()) { case EMAIL: button.setImageResource(R.drawable.email_res); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); emailIntent.setType("plain/text"); emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{method.getName()}); emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "VTHacks help needed!"); emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Hello,\n\n\t"); getContext().startActivity(emailIntent); } }); break; case PHONE: button.setImageResource(R.drawable.message_res); if (Build.VERSION.SDK_INT < 19) { button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent smsIntent = new Intent(Intent.ACTION_VIEW); smsIntent.setType("vnd.android-dir/mms-sms"); smsIntent.putExtra("address", method.getName()); getContext().startActivity(smsIntent); } }); } else { button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.parse("smsto:" + Uri.encode(method.getName()))); getContext().startActivity(intent); } }); } break; case TWITTER: button.setImageResource(R.drawable.tweet_res); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent tweetIntent = new Intent(Intent.ACTION_VIEW); tweetIntent.setData(Uri.parse("https://twitter.com/intent/tweet?source=webclient&text=" + Uri.encode(method.getName()))); getContext().startActivity(tweetIntent); } }); break; default: break; } cLay.addView(button); } holder.rootView.addView(ref); } holder.nameTextView.setText(item.getName()); return holder.rootView; } /** * // ------------------------------------------------------------------------- /** * Write a one-sentence summary of your class here. * Follow it with additional details about its purpose, what abstraction * it represents, and how to use it. * * @author Brandon Potts * @version Mar 28, 2014 */ private static class ContactViewHolder { public final LinearLayout rootView; public final TextView nameTextView; private ContactViewHolder(LinearLayout rootView, TextView nameTextView) { this.rootView = rootView; this.nameTextView = nameTextView; } public static ContactViewHolder create(LinearLayout rootView) { TextView nameTextView = (TextView)rootView.findViewById(R.id.company_name); return new ContactViewHolder(rootView, nameTextView); } } }