KnownHostsAdapter.java

 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}