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