package org.ruboto.irb; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.os.Bundle; import android.text.Selection; import android.view.KeyEvent; import android.view.inputmethod.EditorInfo; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.TextView; /********************************************************************************************* * * AutoCompleteTextView as IRB history * @author Jan Berkel * Modified from EditText to AutoCompleteTextView by Scott Moyer */ public class HistoryEditText extends AutoCompleteTextView implements TextView.OnEditorActionListener { public interface LineListener { void onNewLine(String s); } private ArrayAdapter<String> adapter = null; private LineListener listener; public HistoryEditText(Context ctxt) { super(ctxt); initListeners(); } public HistoryEditText(Context ctxt, android.util.AttributeSet attrs) { super(ctxt, attrs); initListeners(); initAdapter(null); this.setThreshold(0); } public HistoryEditText(Context ctxt, android.util.AttributeSet attrs, int defStyle) { super(ctxt, attrs, defStyle); initListeners(); initAdapter(null); this.setThreshold(0); } private void initListeners() { setOnEditorActionListener(this); } private void initAdapter(ArrayList<String> history) { if (history == null) { adapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_dropdown_item_1line); } else { adapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_dropdown_item_1line, history); } this.setAdapter(adapter); } public void onSaveInstanceState(Bundle savedInstanceState) { ArrayList<String> history = new ArrayList<String>(); for(int i=0; i < adapter.getCount(); i++) { history.add(adapter.getItem(i)); } savedInstanceState.putStringArrayList("history", history); } public void onRestoreInstanceState(Bundle savedInstanceState) { if (savedInstanceState.containsKey("history")) { ArrayList<String> history = new ArrayList<String>(); history = savedInstanceState.getStringArrayList("history"); initAdapter(history); } } @Override public boolean performClick() { if (adapter.getCount() > 0) showDropDown(); return super.performClick(); } public String getHistoryString() { StringBuilder string = new StringBuilder(); for(int i=0; i < adapter.getCount(); i++) { string.append(adapter.getItem(i)); string.append("\n"); } return string.toString(); } public boolean onEditorAction(TextView arg0, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_NULL) { String line = getText().toString(); if (line.length() == 0) return true; for(int i=0; i < adapter.getCount(); i++) { if (adapter.getItem(i).equals(line)) { adapter.remove(adapter.getItem(i)); break; } } adapter.insert(line, 0); if (listener != null) { listener.onNewLine(line); return true; } } return false; } public void setLineListener(LineListener l) { this.listener = l; } public void setCursorPosition(int pos) { Selection.setSelection(getText(), pos); } }