]> gitweb.fperrin.net Git - Dictionary.git/commitdiff
go
authorthadh <thadh@THADH-MTV.ad.corp.google.com>
Mon, 23 Feb 2009 08:30:28 +0000 (00:30 -0800)
committerthadh <thadh@THADH-MTV.ad.corp.google.com>
Mon, 23 Feb 2009 08:30:28 +0000 (00:30 -0800)
src/com/hughes/android/dictionary/DictionaryActivity.java [new file with mode: 0755]

diff --git a/src/com/hughes/android/dictionary/DictionaryActivity.java b/src/com/hughes/android/dictionary/DictionaryActivity.java
new file mode 100755 (executable)
index 0000000..6d1abb9
--- /dev/null
@@ -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<Entry> 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