/************************************************************************************* * Product: SFAndroid (Sales Force Mobile) * * This program is free software; you can redistribute it and/or modify it * * under the terms version 2 of the GNU General Public License as published * * by the Free Software Foundation. This program is distributed in the hope * * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * * with this program; if not, write to the Free Software Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * * For the text or an alternative of this public license, you may reach us * * Copyright (C) 2012-2014 E.R.P. Consultores y Asociados, S.A. All Rights Reserved. * * Contributor(s): Yamel Senih www.erpconsultoresyasociados.com * *************************************************************************************/ package org.spinsuite.adapters; import java.util.ArrayList; import org.spinsuite.base.R; import org.spinsuite.util.DisplayRecordItem; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Filter; import android.widget.TextView; /** * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> * */ public class SearchAdapter extends ArrayAdapter<DisplayRecordItem> { /** * * *** Constructor *** * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 01/03/2014, 13:02:43 * @param ctx * @param view_ID * @param data */ public SearchAdapter(Context ctx, int view_ID, ArrayList<DisplayRecordItem> data) { super(ctx, view_ID, data); this.ctx = ctx; this.view_ID = view_ID; this.data = data; } /** * * *** Constructor *** * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 22/03/2014, 09:22:14 * @param ctx * @param view_ID */ public SearchAdapter(Context ctx, int view_ID) { super(ctx, view_ID); this.ctx = ctx; this.view_ID = view_ID; data = new ArrayList<DisplayRecordItem>(); } /** Context */ private Context ctx; /** Data */ private ArrayList<DisplayRecordItem> data; /** Backup */ private ArrayList<DisplayRecordItem> originalData; /** View Identifier */ private int view_ID; @Override public View getView(int position, View convertView, ViewGroup parent) { View item = convertView; if(item == null){ LayoutInflater inflater = (LayoutInflater) ctx .getSystemService(Context.LAYOUT_INFLATER_SERVICE); item = inflater.inflate(view_ID, null); } DisplayRecordItem recordItem = data.get(position); // Set Name TextView tv_Value = (TextView)item.findViewById(R.id.tv_Value); tv_Value.setText(recordItem.getValue()); if(recordItem.getImageURL() != null && recordItem.getImageURL().length() > 0){ Resources res = ctx.getResources(); int resID = res.getIdentifier(recordItem.getImageURL() , "drawable", ctx.getPackageName()); if(resID != 0){ Drawable drawable = res.getDrawable(resID); tv_Value.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null); } } else { tv_Value.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ok_h, 0, 0, 0); } // Return return item; } @Override public Filter getFilter() { return new Filter() { @SuppressWarnings("unchecked") @Override protected void publishResults(CharSequence constraint, FilterResults results) { data = (ArrayList<DisplayRecordItem>) results.values; if (results.count > 0) { notifyDataSetChanged(); } else { notifyDataSetInvalidated(); } } @Override protected FilterResults performFiltering(CharSequence constraint) { // Populate Original Data if(originalData == null) originalData = data; // Get filter result ArrayList<DisplayRecordItem> filteredResults = getResults(constraint); // Result FilterResults results = new FilterResults(); // results.values = filteredResults; results.count = filteredResults.size(); return results; } /** * Search * @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 02/03/2014, 03:19:33 * @param constraint * @return * @return ArrayList<DisplayRecordItem> */ private ArrayList<DisplayRecordItem> getResults(CharSequence constraint) { // Verify if(constraint != null && constraint.length() > 0) { // new Filter ArrayList<DisplayRecordItem> filteredResult = new ArrayList<DisplayRecordItem>(); for(DisplayRecordItem item : originalData) { if((item.getValue() != null && item.getValue().toLowerCase().contains(constraint.toString()))) filteredResult.add(item); } return filteredResult; } // Only Data return originalData; } }; } @Override public int getCount() { return data.size(); } }