package com.niveales.library.utils.adapters.search;
import com.niveales.library.ui.NivealesApplication;
import com.niveales.library.utils.adapters.BoundAdapter;
import com.niveales.library.utils.adapters.CursorViewBinder;
import com.niveales.library.utils.db.DBHelper;
import com.niveales.testsnowboards.R;
import android.content.Context;
import android.database.Cursor;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
public class SearchAdapter extends BoundAdapter implements Filterable {
protected CursorViewBinder binder;
private String whereClaus;
private static String[] searchColumns = NivealesApplication.ProductSearchConstants.PRODUCT_SEARCH_BINDER_COLUMNS;
private static int[] searchLayoutIds = NivealesApplication.ProductSearchConstants.PRODUCT_SEARCH_BINDER_IDS;
public SearchAdapter(Context context) {
super(context, NivealesApplication.getDBHelper().getAllFromTableWithWhereAndOrder(
NivealesApplication.DETAIL_TABLE_NAME, null, null),
NivealesApplication.ProductSearchConstants.PRODUCT_SEARCH_LISTVIEW_ITEM_LAYOUT, new CursorViewBinder(
context, searchColumns, searchLayoutIds));
}
/**
* @param pActivity
* @param pCursor
* @param pItemLayoutId
* @param pBinder
*/
public SearchAdapter(Context context, Cursor pCursor, int pItemLayoutId,
CursorViewBinder pBinder) {
super(context, pCursor, pItemLayoutId, pBinder);
}
/**
* @param pSearch
* - search string
*/
public void setSearch(String pSearch) {
String[] searchWords = pSearch.split(" ");
whereClaus = "";
boolean isFirst = true;
for (int i = 0; i < searchWords.length; i++) {
String w = "";
boolean isFirstJ = true;
for (int j = 0; j < searchColumns.length; j++) {
if (isFirstJ) {
w += searchColumns[j] + " LIKE '%" + searchWords[i] + "%'";
isFirstJ = false;
} else {
w += " OR " + searchColumns[j] + " LIKE '%"
+ searchWords[i] + "%'";
}
}
if (isFirst) {
whereClaus += "( " + w + " )";
isFirst = false;
} else {
whereClaus += " AND ( " + w + " )";
}
}
setCursor(getCursor(NivealesApplication.DETAIL_TABLE_NAME,
whereClaus));
}
public Cursor getCursor(String table, String where) {
return NivealesApplication.getDBHelper()
.getAllFromTableWithWhereAndOrder(table, where, null);
}
/*
* (non-Javadoc)
*
* @see android.widget.Filterable#getFilter()
*/
@Override
public Filter getFilter() {
// TODO Auto-generated method stub
return productFilter;
}
Filter productFilter = new Filter() {
String lastConstraint;
public String convertResultToString(Object resultValue) {
return (lastConstraint == null) ? "" : lastConstraint;
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults res = new FilterResults();
res.values = constraint;
res.count = (constraint == null) ? 0 : 1;
return res;
}
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
if(constraint != null) {
lastConstraint = constraint.toString();
setSearch(lastConstraint);
notifyDataSetChanged();
}
// notifyDataSetInvalidated();
}
};
}