• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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