//Created by plusminus on 16:36:15 - 16.05.2008 package org.androad.ui.common; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.NoSuchElementException; import org.androad.util.LexicographicalComparator; import android.util.Log; import android.widget.EditText; public abstract class InlineAutoCompleterCombined extends InlineAutoCompleterDynamic { // =========================================================== // Final Fields // =========================================================== // =========================================================== // Fields // =========================================================== protected final List<String> mStrings; protected final boolean mProgressive; // =========================================================== // Constructors // =========================================================== public InlineAutoCompleterCombined(final EditText editTextToApplyTo, final List<String> aStrings, final boolean aProgressive) { super(editTextToApplyTo); Collections.sort(aStrings, new LexicographicalComparator()); this.mStrings = aStrings; this.mProgressive = aProgressive; } // =========================================================== // Getter & Setter // =========================================================== // =========================================================== // Methods from SuperClass/Interfaces // =========================================================== @Override public abstract boolean onEnter(); @Override public ArrayList<String> onGetAutoCompletionStrings() throws NoSuchElementException{ final ArrayList<String> out = new ArrayList<String>(); final String strBefore = super.getCurrent(); Log.d(DEBUGTAG, "StrBefore: " + strBefore); // All dynamic Strings (higher Priority) final ArrayList<String> dyns = onGetDynamic(); if(dyns != null) { for (final String dyn : dyns) { if(dyn != null && dyn.toLowerCase().startsWith(strBefore.toLowerCase())) { if(this.mProgressive && dyn.compareToIgnoreCase(strBefore) != 0) { out.add(dyn); } else { out.add(dyn); } } } } // All 'constant' Strings (lower Priority) if(this.mStrings != null) { for (final String s : this.mStrings) { if(s != null && s.toLowerCase().startsWith(strBefore.toLowerCase())) { if(this.mProgressive && s.compareToIgnoreCase(strBefore) != 0) { out.add(s); } else { out.add(s); } } } } if(out.size() > 0) { return out; } throw new NoSuchElementException(); } public abstract ArrayList<String> onGetDynamic(); // =========================================================== // Methods // =========================================================== // =========================================================== // Inner and Anonymous Classes // =========================================================== }