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.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}