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