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.Preferences; import com.ushahidi.android.app.R; import com.ushahidi.android.app.models.ListMapModel; public class ListMapAdapter extends BaseListAdapter<ListMapModel> implements Filterable { private int[] colors; private ListMapModel listMapModel; public ListMapAdapter(Context context) { super(context); listMapModel = new ListMapModel(); colors = new int[] { R.drawable.odd_row_rounded_corners, R.drawable.even_row_rounded_corners }; } @Override public void refresh() { final boolean loaded = listMapModel.load(); if (loaded) { this.setItems(listMapModel.getMaps()); } } public View getView(int position, View view, ViewGroup viewGroup) { Preferences.loadSettings(context); final int mapId = Preferences.activeDeployment; Widgets widget; int colorPosition = position % colors.length; if (view == null) { view = inflater.inflate(R.layout.list_map_item, null); widget = new Widgets(view); view.setTag(widget); } else { widget = (Widgets) view.getTag(); } view.setBackgroundResource(colors[colorPosition]); // initialize view with content widget.mapName.setText(getItem(position).getName()); widget.mapDesc.setText(getItem(position).getDesc()); widget.mapUrl.setText(getItem(position).getUrl()); widget.mapId.setText(String.valueOf(getItem(position).getId())); if (getItem(position).getId() == mapId) { widget.arrow.setImageResource(R.drawable.selected); } else { widget.arrow.setImageResource(R.drawable.arrow); } return view; } public class Widgets { TextView mapName; TextView mapDesc; TextView mapUrl; TextView mapId; ImageView arrow; public Widgets(View convertView) { mapName = (TextView) convertView.findViewById(R.id.map_list_name); mapDesc = (TextView) convertView.findViewById(R.id.map_list_desc); mapUrl = (TextView) convertView.findViewById(R.id.map_list_url); mapId = (TextView) convertView.findViewById(R.id.map_list_id); arrow = (ImageView) convertView.findViewById(R.id.map_arrow); } } // Implements fitering pattern for the list items. @Override public Filter getFilter() { return new MapFilter(); } public class MapFilter 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 = constraint.toString().toLowerCase(); ArrayList<ListMapModel> filteredItems = new ArrayList<ListMapModel>(); ArrayList<ListMapModel> itemsHolder = new ArrayList<ListMapModel>(); itemsHolder.addAll(items); for (ListMapModel map : itemsHolder) { if (map.getName().toLowerCase().contains(constraint) || map.getDesc().toLowerCase().contains(constraint)) { filteredItems.add(map); } } results.count = filteredItems.size(); results.values = filteredItems; } return results; } @SuppressWarnings("unchecked") @Override protected void publishResults(CharSequence constraint, FilterResults results) { List<ListMapModel> reports = (ArrayList<ListMapModel>) results.values; setItems(reports); } } }