From ff0427917fb268b11bb3bc720430e999309ee0c9 Mon Sep 17 00:00:00 2001 From: thadh Date: Mon, 23 Feb 2009 00:30:28 -0800 Subject: [PATCH] go --- .../dictionary/DictionaryActivity.java | 196 ++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100755 src/com/hughes/android/dictionary/DictionaryActivity.java diff --git a/src/com/hughes/android/dictionary/DictionaryActivity.java b/src/com/hughes/android/dictionary/DictionaryActivity.java new file mode 100755 index 0000000..6d1abb9 --- /dev/null +++ b/src/com/hughes/android/dictionary/DictionaryActivity.java @@ -0,0 +1,196 @@ +package com.hughes.android.dictionary; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicBoolean; + +import com.hughes.android.dictionary.Dictionary.Row; + +import android.app.ListActivity; +import android.os.Bundle; +import android.os.Handler; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.Log; +import android.view.ContextMenu; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.view.ContextMenu.ContextMenuInfo; +import android.view.MenuItem.OnMenuItemClickListener; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.AdapterView.OnItemLongClickListener; + +public class DictionaryActivity extends ListActivity { + + private Dictionary dictionary = null; + + private File wordList = new File("/sdcard/wordList.txt"); + + final Handler uiHandler = new Handler(); + + private final Object mutex = new Object(); + private Executor searchExecutor = Executors.newSingleThreadExecutor(); + private SearchOperation searchOperation = null; +// private List entries = Collections.emptyList(); + private DictionaryListAdapter dictionaryListAdapter = new DictionaryListAdapter(); + private int selectedItem = -1; + + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) { + Log.d("THAD", "onCreate"); + super.onCreate(savedInstanceState); + + try { + dictionary = new Dictionary("/sdcard/dict-de-en.txt", Entry.LANG1); + } catch (Exception e) { + throw new RuntimeException(e); + } + + setContentView(R.layout.main); + + EditText searchText = (EditText) findViewById(R.id.SearchText); + searchText.addTextChangedListener(new DictionaryTextWatcher()); + + setListAdapter(dictionaryListAdapter); + + onSearchTextChange(""); + + registerForContextMenu(getListView()); + getListView().setOnItemLongClickListener((new OnItemLongClickListener() { + public boolean onItemLongClick(AdapterView arg0, View arg1, int arg2, + long arg3) { + selectedItem = arg2; + return false; + } + })); + } + + @Override + public void onCreateContextMenu(ContextMenu menu, View v, + ContextMenuInfo menuInfo) { + if (selectedItem == -1) { + return; + } + final MenuItem addToWordlist = menu.add("Add to wordlist."); + addToWordlist.setOnMenuItemClickListener(new OnMenuItemClickListener() { + public boolean onMenuItemClick(MenuItem item) { + final String rawText = "";//entries.get(selectedItem).getRawText(); + Log.d("THAD", "Writing : " + + rawText); + try { + final OutputStream out = new FileOutputStream(wordList, true); + out.write((rawText + "\n").getBytes()); + out.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + return false; + } + }); + } + + @Override + protected void onListItemClick(ListView l, View v, int position, long id) { + try { + Log.d("THAD", "Clicked: " + dictionary.getRow(position)); + } catch (IOException e) { + throw new RuntimeException(e); + } + selectedItem = position; + openContextMenu(getListView()); + } + + void onSearchTextChange(final String searchText) { + Log.d("THAD", "onSearchTextChange: " + searchText); + if (1==1) return; + synchronized (mutex) { + if (searchOperation != null) { + searchOperation.interrupted.set(true); + } + searchOperation = new SearchOperation(searchText); + } + searchExecutor.execute(searchOperation); + } + + private final class SearchOperation implements Runnable { + final String searchText; + final int count = 100; + final AtomicBoolean interrupted = new AtomicBoolean(false); + + public SearchOperation(final String searchText) { + this.searchText = searchText.toLowerCase(); // TODO: better + } + + public void run() { + Log.d("THAD", "SearchOperation: " + searchText); + + uiHandler.post(new Runnable() { + public void run() { + synchronized (mutex) { + dictionaryListAdapter.notifyDataSetChanged(); + } + } + }); + } + } + + private class DictionaryListAdapter extends BaseAdapter { + + public int getCount() { + return dictionary.numRows(); + } + + public Dictionary.Row getItem(int position) { + assert position < dictionary.numRows(); + try { + return dictionary.getRow(position); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public long getItemId(int position) { + return position; + } + + public View getView(final int position, final View convertView, + final ViewGroup parent) { + TextView result = null; + if (convertView instanceof TextView) { + result = (TextView) convertView; + } else { + result = new TextView(parent.getContext()); + } + final Row row = getItem(position); + result.setText(row.text); + result.setBackgroundColor(row.isWord ? ); + return result; + } + } + + private class DictionaryTextWatcher implements TextWatcher { + public void afterTextChanged(Editable searchText) { + onSearchTextChange(searchText.toString()); + } + + public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, + int arg3) { + } + + public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { + } + } + +} \ No newline at end of file -- 2.43.0