KnownHostsAdapter.java

 1package eu.siacs.conversations.ui.adapter;
 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.contentEquals(split[1])) {
27							suggestions.clear();
28							break;
29						} else if (domain.contains(split[1])) {
30							suggestions.add(split[0].toLowerCase(Locale.getDefault()) + "@" + domain);
31						}
32					}
33				} else {
34					return new FilterResults();
35				}
36				FilterResults filterResults = new FilterResults();
37				filterResults.values = suggestions;
38				filterResults.count = suggestions.size();
39				return filterResults;
40			} else {
41				return new FilterResults();
42			}
43		}
44
45		@Override
46		protected void publishResults(CharSequence constraint,
47				FilterResults results) {
48			ArrayList<String> filteredList = (ArrayList<String>) results.values;
49			if (results != null && results.count > 0) {
50				clear();
51				for (String c : filteredList) {
52					add(c);
53				}
54				notifyDataSetChanged();
55			}
56		}
57	};
58
59	public KnownHostsAdapter(Context context, int viewResourceId,
60			List<String> mKnownHosts) {
61		super(context, viewResourceId, mKnownHosts);
62		domains = new ArrayList<String>(mKnownHosts.size());
63		for (String domain : mKnownHosts) {
64			domains.add(new String(domain));
65		}
66	}
67
68	@Override
69	public Filter getFilter() {
70		return domainFilter;
71	}
72}