1 package org.skia.viewer; 2 3 import android.content.Context; 4 import android.widget.ArrayAdapter; 5 import android.widget.Filter; 6 import android.widget.Spinner; 7 8 import java.util.ArrayList; 9 import java.util.List; 10 11 public class OptionAdapter extends ArrayAdapter<String> { 12 private String mCurrentOption; 13 private List<String> mOptions; 14 private Filter mFilter = null; 15 private Spinner mSpinner; 16 OptionAdapter(Context context, int resource, List<String> options, Spinner spinner)17 public OptionAdapter(Context context, int resource, List<String> options, Spinner spinner) { 18 super(context, resource); 19 addAll(options); 20 mOptions = options; 21 mSpinner = spinner; 22 } 23 setCurrentOption(String currentOption)24 public void setCurrentOption(String currentOption) { 25 this.mCurrentOption = currentOption; 26 } 27 28 private class OptionFilter extends Filter { 29 30 @Override performFiltering(CharSequence constraint)31 protected FilterResults performFiltering(CharSequence constraint) { 32 final String pattern = constraint.toString().toLowerCase(); 33 ArrayList<String> filteredOptions = new ArrayList<>(); 34 for(String option : mOptions) { 35 if (option.equals(mCurrentOption) 36 || option.toLowerCase().indexOf(pattern) > -1) { 37 filteredOptions.add(option); 38 } 39 } 40 FilterResults results = new FilterResults(); 41 results.values = filteredOptions; 42 results.count = filteredOptions.size(); 43 return results; 44 } 45 46 @Override publishResults(CharSequence constraint, FilterResults results)47 protected void publishResults(CharSequence constraint, FilterResults results) { 48 clear(); 49 List<String> filteredOptions = (List<String>) results.values; 50 addAll(filteredOptions); 51 // We set the selection to the current option to avoid unwanted option selection change 52 mSpinner.setSelection(filteredOptions.indexOf(mCurrentOption)); 53 notifyDataSetChanged(); 54 } 55 } 56 57 @Override getFilter()58 public Filter getFilter() { 59 if (mFilter == null) { 60 mFilter = new OptionFilter(); 61 } 62 return mFilter; 63 } 64 } 65