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.List;
10import java.util.Locale;
11
12public class KnownHostsAdapter extends ArrayAdapter<String> {
13 private ArrayList<String> domains;
14 private Filter domainFilter = new Filter() {
15
16 @Override
17 protected FilterResults performFiltering(CharSequence constraint) {
18 if (constraint != null) {
19 ArrayList<String> suggestions = new ArrayList<>();
20 final String[] split = constraint.toString().split("@");
21 if (split.length == 1) {
22 for (String domain : domains) {
23 suggestions.add(split[0].toLowerCase(Locale
24 .getDefault()) + "@" + domain);
25 }
26 } else if (split.length == 2) {
27 for (String domain : domains) {
28 if (domain.contentEquals(split[1])) {
29 suggestions.clear();
30 break;
31 } else if (domain.contains(split[1])) {
32 suggestions.add(split[0].toLowerCase(Locale
33 .getDefault()) + "@" + domain);
34 }
35 }
36 } else {
37 return new FilterResults();
38 }
39 FilterResults filterResults = new FilterResults();
40 filterResults.values = suggestions;
41 filterResults.count = suggestions.size();
42 return filterResults;
43 } else {
44 return new FilterResults();
45 }
46 }
47
48 @Override
49 protected void publishResults(CharSequence constraint, FilterResults results) {
50 ArrayList filteredList = (ArrayList) results.values;
51 if (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<>());
63 domains = new ArrayList<>(mKnownHosts);
64 }
65
66 @Override
67 @NonNull
68 public Filter getFilter() {
69 return domainFilter;
70 }
71}