1package eu.siacs.conversations.ui.adapter;
2
3import java.util.ArrayList;
4import java.util.List;
5import java.util.Locale;
6
7import android.content.Context;
8import android.widget.ArrayAdapter;
9import android.widget.Filter;
10
11public class KnownHostsAdapter extends ArrayAdapter<String> {
12 private ArrayList<String> domains;
13 private Filter domainFilter = new Filter() {
14
15 @Override
16 protected FilterResults performFiltering(CharSequence constraint) {
17 if (constraint != null) {
18 ArrayList<String> suggestions = new ArrayList<String>();
19 final String[] split = constraint.toString().split("@");
20 if (split.length == 1) {
21 for (String domain : domains) {
22 suggestions.add(split[0].toLowerCase(Locale.getDefault()) + "@" + domain);
23 }
24 } else if (split.length == 2) {
25 for (String domain : domains) {
26 if (domain.contentEquals(split[1])) {
27 suggestions.clear();
28 break;
29 } else if (domain.contains(split[1])) {
30 suggestions.add(split[0].toLowerCase(Locale.getDefault()) + "@" + domain);
31 }
32 }
33 } else {
34 return new FilterResults();
35 }
36 FilterResults filterResults = new FilterResults();
37 filterResults.values = suggestions;
38 filterResults.count = suggestions.size();
39 return filterResults;
40 } else {
41 return new FilterResults();
42 }
43 }
44
45 @Override
46 protected void publishResults(CharSequence constraint,
47 FilterResults results) {
48 ArrayList<String> filteredList = (ArrayList<String>) results.values;
49 if (results != null && results.count > 0) {
50 clear();
51 for (String c : filteredList) {
52 add(c);
53 }
54 notifyDataSetChanged();
55 }
56 }
57 };
58
59 public KnownHostsAdapter(Context context, int viewResourceId,
60 List<String> mKnownHosts) {
61 super(context, viewResourceId, mKnownHosts);
62 domains = new ArrayList<String>(mKnownHosts.size());
63 for (String domain : mKnownHosts) {
64 domains.add(new String(domain));
65 }
66 }
67
68 @Override
69 public Filter getFilter() {
70 return domainFilter;
71 }
72}