KnownHostsAdapter.java

 1package eu.siacs.conversations.utils;
 2
 3import java.util.ArrayList;
 4import java.util.List;
 5import java.util.Locale;
 6
 7import android.content.Context;
 8import android.widget.ArrayAdapter;
 9import android.widget.Filter;
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<String>();
19				final String[] split = constraint.toString().split("@");
20				if (split.length == 1) {
21					for (String domain : domains) {
22						suggestions.add(split[0].toLowerCase(Locale.getDefault()) + "@" + domain);
23					}
24				} else if (split.length == 2) {
25					for (String domain : domains) {
26						if (domain.contains(split[1])) {
27							suggestions.add(split[0].toLowerCase(Locale.getDefault()) + "@" + domain);
28						}
29					}
30				} else {
31					return new FilterResults();
32				}
33				FilterResults filterResults = new FilterResults();
34				filterResults.values = suggestions;
35				filterResults.count = suggestions.size();
36				return filterResults;
37			} else {
38				return new FilterResults();
39			}
40		}
41
42		@Override
43		protected void publishResults(CharSequence constraint,
44				FilterResults results) {
45			ArrayList<String> filteredList = ((ArrayList<String>) results.values);
46			if (results != null && results.count > 0) {
47				clear();
48				for (String c : filteredList) {
49					add(c);
50				}
51				notifyDataSetChanged();
52			}
53		}
54	};
55
56	public KnownHostsAdapter(Context context, int viewResourceId,
57			List<String> mKnownHosts) {
58		super(context, viewResourceId, mKnownHosts);
59		domains = new ArrayList<String>(mKnownHosts.size());
60		for (String domain : mKnownHosts) {
61			domains.add(new String(domain));
62		}
63	}
64
65	@Override
66	public Filter getFilter() {
67		return domainFilter;
68	}
69}