KnownHostsAdapter.java

 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}