/** ** Copyright (c) 2010 Ushahidi Inc ** All rights reserved ** Contact: team@ushahidi.com ** Website: http://www.ushahidi.com ** ** GNU Lesser General Public License Usage ** This file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: http://www.gnu.org/licenses/lgpl.html. ** ** ** If you have questions regarding the use of this file, please contact ** Ushahidi developers at team@ushahidi.com. ** **/ package com.ushahidi.android.app.adapters; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.Filter; import android.widget.Filterable; import android.widget.ImageView; import android.widget.TextView; import com.ushahidi.android.app.R; import com.ushahidi.android.app.entities.CategoryEntity; import com.ushahidi.android.app.entities.ReportEntity; import com.ushahidi.android.app.models.ListReportModel; import com.ushahidi.android.app.util.ImageViewWorker; import com.ushahidi.android.app.util.Util; /** * @author eyedol */ public abstract class ReportAdapter extends BaseListAdapter<ReportEntity> implements Filterable { class Widgets { TextView title; TextView iLocation; TextView date; TextView status; TextView categories; TextView description; ImageView thumbnail; ImageView arrow; public Widgets(View view) { this.thumbnail = (ImageView) view .findViewById(R.id.report_thumbnail); this.title = (TextView) view.findViewById(R.id.report_title); this.description = (TextView) view .findViewById(R.id.report_description); this.date = (TextView) view.findViewById(R.id.report_date); this.iLocation = (TextView) view.findViewById(R.id.report_location); this.categories = (TextView) view .findViewById(R.id.report_categories); this.status = (TextView) view.findViewById(R.id.report_status); this.arrow = (ImageView) view.findViewById(R.id.report_arrow); } } protected int[] colors; protected ListReportModel mListReportModel; protected List<ReportEntity> items; public ReportAdapter(Context context) { super(context); colors = new int[] { R.drawable.odd_row_rounded_corners, R.drawable.even_row_rounded_corners }; mListReportModel = new ListReportModel(); } public String fetchCategories(int reportId) { StringBuilder categories = new StringBuilder(); for (CategoryEntity category : mListReportModel .getCategoriesByReportId(reportId)) { if (category.getCategoryTitle().length() > 0) { categories.append(category.getCategoryTitle() + " |"); } } // delete the last | if (categories.length() > 0) { categories.deleteCharAt(categories.length() - 1); } return categories.toString(); } public View getView(int position, View view, ViewGroup viewGroup) { int colorPosition = position % colors.length; Widgets widgets; if (view == null) { view = inflater .inflate(R.layout.list_report_item, null); widgets = new Widgets(view); view.setTag(widgets); } else { widgets = (Widgets) view.getTag(); } view.setBackgroundResource(colors[colorPosition]); final String thumbnailPath = thumbnail(position); if (thumbnailPath == null) { widgets.thumbnail.setImageResource(R.drawable.report_icon); } else { getPhoto(thumbnailPath, widgets.thumbnail); } widgets.title.setText(getItem(position).getIncident().getTitle()); widgets.date.setText(Util.datePattern( "MMMM dd, yyyy 'at' hh:mm:ss aaa", getItem(position) .getIncident().getDate())); widgets.description.setText(Util.capitalizeString(getItem(position) .getIncident().getDescription())); widgets.categories.setText(Util.capitalizeString(Util.limitString( fetchCategories((int) getItem(position).getIncident().getId()), 100))); widgets.iLocation.setText(Util.capitalizeString(getItem(position) .getIncident().getLocationName())); // change the status color if (getItem(position).getIncident().getVerified() == 1) { widgets.status.setTextColor(context.getResources().getColor( R.color.verified_text_color)); // green } else { widgets.status.setTextColor(context.getResources().getColor( R.color.unverified_text_color)); // red } widgets.status.setText(status((position))); widgets.arrow.setImageDrawable(context.getResources().getDrawable( R.drawable.arrow)); return view; } public void getPhoto(String fileName, ImageView imageView) { ImageViewWorker imageWorker = new ImageViewWorker(context); imageWorker.setImageFadeIn(true); imageWorker.loadImage(fileName, imageView, true, 0); } private String thumbnail(int position) { // Get pending report's image if (getItem(position).getIncident().getId() == 0) { return mListReportModel.getImage(getItem(position).getDbId()); } // Get fetched report's image return mListReportModel.getImage(getItem(position).getIncident() .getId()); } private String status(int position) { return Util.setVerificationStatus(getItem(position).getIncident() .getVerified(), context); } // Implements fitering pattern for the list items. @Override public Filter getFilter() { return new ReportFilter(); } public class ReportFilter extends Filter { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults results = new FilterResults(); results.values = items; results.count = items.size(); if (constraint != null && constraint.toString().length() > 0) { constraint = Util.toLowerCase(constraint.toString(), context); ArrayList<ReportEntity> filteredItems = new ArrayList<ReportEntity>(); ArrayList<ReportEntity> itemsHolder = new ArrayList<ReportEntity>(); itemsHolder.addAll(items); for (ReportEntity report : itemsHolder) { if (Util.toLowerCase(report.getIncident().getTitle(), context).contains(constraint) || Util.toLowerCase( report.getIncident().getLocationName(), context).contains(constraint)) { filteredItems.add(report); } } results.count = filteredItems.size(); results.values = filteredItems; } return results; } @SuppressWarnings("unchecked") @Override protected void publishResults(CharSequence constraint, FilterResults results) { List<ReportEntity> reports = (ArrayList<ReportEntity>) results.values; setItems(reports); } } }