blob: 97dec0f95957137017f6c29620e3be18681b3fa1 [file] [log] [blame]
package org.apache.fineract.ui.adapters;
import android.content.Context;
import androidx.core.content.ContextCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView;
import org.apache.fineract.R;
import org.apache.fineract.data.datamanager.api.DataManagerCustomer;
import org.apache.fineract.data.models.customer.Customer;
import org.apache.fineract.data.models.customer.CustomerPage;
import org.apache.fineract.injection.ApplicationContext;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
public class BeneficiaryAutoCompleteAdapter extends BaseAdapter implements Filterable {
private static final int MAX_RESULTS = 10;
private static final int PAGE_INDEX = 0;
private Context context;
private List<Customer> resultList = new ArrayList<>();
DataManagerCustomer dataManagerCustomer;
@Inject
public BeneficiaryAutoCompleteAdapter(@ApplicationContext Context context,
DataManagerCustomer dataManagerCustomer) {
this.context = context;
this.dataManagerCustomer = dataManagerCustomer;
}
@Override
public int getCount() {
return resultList.size();
}
@Override
public Customer getItem(int index) {
return resultList.get(index);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(android.R.layout.simple_list_item_multiple_choice,
parent, false);
}
((TextView) convertView.findViewById(android.R.id.text1))
.setTextColor(ContextCompat.getColor(context, R.color.black));
((TextView) convertView.findViewById(android.R.id.text1)).setText(getItem(position)
.getIdentifier());
return convertView;
}
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if (constraint != null) {
List<Customer> books = findBooks(constraint.toString()).getCustomers();
// Assign the data to the FilterResults
filterResults.values = books;
filterResults.count = books.size();
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
resultList = (List<Customer>) results.values;
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
};
}
/**
* Returns a search result for the given customer title.
*/
private CustomerPage findBooks(String term) {
if (term.length() == 0) {
return dataManagerCustomer.searchCustomer(PAGE_INDEX, MAX_RESULTS,
null).blockingFirst();
} else {
return dataManagerCustomer.searchCustomer(PAGE_INDEX, MAX_RESULTS,
term).blockingFirst();
}
}
}