]> gitweb.fperrin.net Git - Dictionary.git/blobdiff - src/com/hughes/android/dictionary/Dictionary.java
go
[Dictionary.git] / src / com / hughes / android / dictionary / Dictionary.java
index 06779fabb6ea1c9bf18cf1b7f00d36c043cd6d79..9cd17ad40db0ad9f4b31e2df1a4ca40e36384970 100755 (executable)
@@ -12,22 +12,32 @@ import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import android.app.Activity;
+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.KeyEvent;
+import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.Window;
+import android.view.ContextMenu.ContextMenuInfo;
+import android.view.MenuItem.OnMenuItemClickListener;
+import android.view.View.OnLongClickListener;
+import android.widget.AdapterView;
 import android.widget.BaseAdapter;
 import android.widget.EditText;
 import android.widget.ListView;
 import android.widget.TextView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.AdapterView.OnItemLongClickListener;
 
 import com.hughes.util.FileUtil;
 
-public class Dictionary extends Activity {
+public class Dictionary extends ListActivity {
 
   public static final String INDEX_FORMAT = "%s_index_%d";
   private File dictionaryFile = new File("/sdcard/dict-de-en.txt");
@@ -35,7 +45,7 @@ public class Dictionary extends Activity {
   private RandomAccessFile dictionaryRaf;
   private final Index[] indexes = new Index[2];
   private final byte lang = Entry.LANG1;
-  
+
   final Handler uiHandler = new Handler();
 
   private final Object mutex = new Object();
@@ -43,6 +53,7 @@ public class Dictionary extends Activity {
   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
@@ -54,14 +65,47 @@ public class Dictionary extends Activity {
     EditText searchText = (EditText) findViewById(R.id.SearchText);
     searchText.addTextChangedListener(new DictionaryTextWatcher());
 
-    ListView searchResults = (ListView) findViewById(R.id.SearchResults);
-    searchResults.setAdapter(dictionaryListAdapter);
+    setListAdapter(dictionaryListAdapter);
+
     try {
       loadIndex();
     } catch (Exception e) {
       throw new RuntimeException(e);
     }
     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) {
+        Log
+            .d("THAD", "context menu: "
+                + entries.get(selectedItem).getRawText());
+        return false;
+      }
+    });
+  }
+
+  @Override
+  protected void onListItemClick(ListView l, View v, int position, long id) {
+    Log.d("THAD", "Clicked: " + entries.get(position).getRawText());
+    selectedItem = position;
+    openContextMenu(getListView());
   }
 
   private void loadIndex() throws IOException, ClassNotFoundException {
@@ -87,11 +131,11 @@ public class Dictionary extends Activity {
     final String searchText;
     final int count = 100;
     final AtomicBoolean interrupted = new AtomicBoolean(false);
-    
+
     public SearchOperation(final String searchText) {
-      this.searchText = searchText;
+      this.searchText = searchText.toLowerCase(); // TODO: better
     }
-    
+
     public void run() {
       Log.d("THAD", "SearchOperation: " + searchText);
       final List<Entry> newEntries = new ArrayList<Entry>(count);
@@ -118,13 +162,17 @@ public class Dictionary extends Activity {
         }
         entries = newEntries;
       }
-      
+
       uiHandler.post(new Runnable() {
         public void run() {
           synchronized (mutex) {
             dictionaryListAdapter.notifyDataSetChanged();
+            if (entries.size() > 0) {
+              setSelection(0);
+            }
           }
-        }});
+        }
+      });
     }
   }
 
@@ -147,7 +195,8 @@ public class Dictionary extends Activity {
       return position;
     }
 
-    public View getView(int position, View convertView, ViewGroup parent) {
+    public View getView(final int position, final View convertView,
+        final ViewGroup parent) {
       TextView result = null;
       if (convertView instanceof TextView) {
         result = (TextView) convertView;