]> gitweb.fperrin.net Git - Dictionary.git/commitdiff
go
authorthadh <thadh@THADH-MTV.ad.corp.google.com>
Fri, 17 Apr 2009 07:29:02 +0000 (00:29 -0700)
committerthadh <thadh@THADH-MTV.ad.corp.google.com>
Fri, 17 Apr 2009 07:29:02 +0000 (00:29 -0700)
AndroidManifest.xml
res/values/strings.xml
res/xml/preferences.xml [new file with mode: 0755]
src/com/hughes/android/dictionary/DictionaryActivity.java
src/com/hughes/android/dictionary/PreferenceActivity.java [new file with mode: 0755]
src/com/hughes/android/dictionary/R.java

index 479231d7b141119f140350e2eab0692dc8db444d..5b132d5b8076d9d86e8e9aad8dc93bec973f0c63 100755 (executable)
@@ -1,17 +1,16 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-      package="com.hughes.android.dictionary"
-      android:versionCode="1"
-      android:versionName="1.0.0">
-    <application android:icon="@drawable/icon" android:label="@string/app_name">
-        <activity android:name=".DictionaryActivity"
-                  android:label="@string/app_name">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-    
-<activity android:name="AboutActivity"></activity>
-</application>
+       package="com.hughes.android.dictionary" android:versionCode="1"
+       android:versionName="1.0.0">
+       <application android:icon="@drawable/icon" android:label="@string/app_name">
+               <activity android:name=".DictionaryActivity" android:label="@string/app_name">
+                       <intent-filter>
+                               <action android:name="android.intent.action.MAIN" />
+                               <category android:name="android.intent.category.LAUNCHER" />
+                       </intent-filter>
+               </activity>
+
+               <activity android:name="AboutActivity"></activity>
+               <activity android:name="PreferenceActivity"></activity>
+       </application>
 </manifest> 
\ No newline at end of file
index 158d1cdb9f39bd58e4c23f46e1b22052cdab644a..5234d14a14b2795748d5333942cc71deb1f27613 100755 (executable)
@@ -4,4 +4,8 @@
     <string name="app_name">Dictionary</string>
 <string name="about_text">Dictionary\nby Thad Hughes</string>
 
+<string name="wordListFile">wordListFile</string>
+<string name="dictFile">dictFile</string>
+
+<string name="dictFetchUrl">dictFetchUrl</string>
 </resources>
diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml
new file mode 100755 (executable)
index 0000000..6b6a119
--- /dev/null
@@ -0,0 +1,8 @@
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">\r
+       \r
+       \r
+<EditTextPreference android:persistent="true" android:title="Dictionary file" android:defaultValue="/sdcard/de-en.dict" android:summary="The local filename where the dictionary is stored." android:key="@string/dictFile"></EditTextPreference>
+<EditTextPreference android:key="@string/wordListFile" android:summary="The local file where the word list will be appended." android:title="Word list file" android:persistent="true" android:defaultValue="/sdcard/wordList.txt"></EditTextPreference>
+<EditTextPreference android:key="@string/dictFetchUrl" android:summary="URL to use to download the dictionary from the Internet." android:persistent="true" android:title="Dictionary fetch URL" android:defaultValue="http://www.google.com"></EditTextPreference>
+
+</PreferenceScreen>  
\ No newline at end of file
index daa79dd2f7dedaadc0c894d7d68bb36271f86c10..db459a9ef65f7ad3c6ccb2d45744a938a883dcfb 100755 (executable)
@@ -9,11 +9,14 @@ import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
 import java.util.concurrent.atomic.AtomicBoolean;
 
+import android.app.AlertDialog;
 import android.app.ListActivity;
 import android.content.Intent;
+import android.content.SharedPreferences;
 import android.graphics.Typeface;
 import android.os.Bundle;
 import android.os.Handler;
+import android.preference.PreferenceManager;
 import android.text.Editable;
 import android.text.Spannable;
 import android.text.TextWatcher;
@@ -44,32 +47,53 @@ import com.hughes.android.dictionary.Dictionary.LanguageData;
 import com.hughes.android.dictionary.Dictionary.Row;
 
 public class DictionaryActivity extends ListActivity {
+  
+  static final Intent aboutIntent = new Intent().setClassName(AboutActivity.class.getPackage().getName(), AboutActivity.class.getCanonicalName());
+  static final Intent preferencesIntent = new Intent().setClassName(PreferenceActivity.class.getPackage().getName(), PreferenceActivity.class.getCanonicalName());
 
-  private RandomAccessFile dictRaf = null;
-  private Dictionary dictionary = null;
-  private LanguageData activeLangaugeData = null;
+  private final Handler uiHandler = new Handler();
+  private final Executor searchExecutor = Executors.newSingleThreadExecutor();
+  private final DictionaryListAdapter dictionaryListAdapter = new DictionaryListAdapter();
 
+  // Never null.
   private File wordList = new File("/sdcard/wordList.txt");
 
-  final Handler uiHandler = new Handler();
+  // Can be null.
+  private File dictFile = null;
+  private RandomAccessFile dictRaf = null;
+  private Dictionary dictionary = null;
+  private LanguageData activeLangaugeData = null;
 
-  private Executor searchExecutor = Executors.newSingleThreadExecutor();
   private SearchOperation searchOperation = null;
-  // private List<Entry> entries = Collections.emptyList();
-  private DictionaryListAdapter dictionaryListAdapter = new DictionaryListAdapter();
   private int selectedRowIndex = -1;
   private int selectedTokenRowIndex = -1;
   
-  private final Intent aboutIntent = new Intent().setClassName(AboutActivity.class.getPackage().getName(), AboutActivity.class.getCanonicalName());
 
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
     Log.d("THAD", "onCreate");
     super.onCreate(savedInstanceState);
+  }
+  
+  @Override
+  public void onResume() {
+    super.onResume();
+
+    closeCurrentDictionary();
 
+    final SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
+    wordList = new File(settings.getString(getResources().getString(R.string.wordListFile), wordList.getAbsolutePath()));
+    dictFile = new File(settings.getString(getResources().getString(R.string.dictFile), "/sdcard/de-en.dict"));
+    Log.d("THAD", "wordList=" + wordList);
+    Log.d("THAD", "dictFile=" + dictFile);
+
+    if (!dictFile.canRead()) {
+      return;
+    }
+    
     try {
-      dictRaf = new RandomAccessFile("/sdcard/de-en.dict", "r");
+      dictRaf = new RandomAccessFile(dictFile, "r");
       dictionary = new Dictionary(dictRaf);
       activeLangaugeData = dictionary.languageDatas[Entry.LANG1];
     } catch (Exception e) {
@@ -82,8 +106,6 @@ public class DictionaryActivity extends ListActivity {
 
     setListAdapter(dictionaryListAdapter);
 
-    onSearchTextChange("");
-    
     // Language button.
     final Button langButton = (Button) findViewById(R.id.LangButton);
     langButton.setOnClickListener(new OnClickListener() {
@@ -146,6 +168,28 @@ public class DictionaryActivity extends ListActivity {
         return false;
       }
     }));
+
+    onSearchTextChange("");
+  }
+  
+  
+  @Override
+  public void onStop() {
+    super.onStop();
+    closeCurrentDictionary();
+  }
+
+  private void closeCurrentDictionary() {
+    dictionary = null;
+    activeLangaugeData = null;
+    try {
+      if (dictRaf != null) {
+        dictRaf.close();
+      }
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
+    dictRaf = null;
   }
   
   public String getSelectedRowText() {
@@ -171,6 +215,13 @@ public class DictionaryActivity extends ListActivity {
         return false;
       }});
 
+    final MenuItem preferences = menu.add("Preferences...");
+    preferences.setOnMenuItemClickListener(new OnMenuItemClickListener(){
+      public boolean onMenuItemClick(final MenuItem menuItem) {
+        startActivity(preferencesIntent);
+        return false;
+      }});
+
     final MenuItem about = menu.add("About...");
     about.setOnMenuItemClickListener(new OnMenuItemClickListener(){
       public boolean onMenuItemClick(final MenuItem menuItem) {
@@ -183,7 +234,10 @@ public class DictionaryActivity extends ListActivity {
   
   @Override
   public boolean onPrepareOptionsMenu(final Menu menu) {
-    switchLanguageMenuItem.setTitle(String.format("Switch to %s", dictionary.languageDatas[Entry.otherLang(activeLangaugeData.lang)].language.symbol));
+    if (dictionary != null) {
+      switchLanguageMenuItem.setTitle(String.format("Switch to %s", dictionary.languageDatas[Entry.otherLang(activeLangaugeData.lang)].language.symbol));
+    }
+    switchLanguageMenuItem.setEnabled(dictionary != null);
     return super.onPrepareOptionsMenu(menu);
   }
 
@@ -221,7 +275,9 @@ public class DictionaryActivity extends ListActivity {
           out.write((rawText + "\n").getBytes());
           out.close();
         } catch (IOException e) {
-          throw new RuntimeException(e);
+          final AlertDialog alert = new AlertDialog.Builder(DictionaryActivity.this).create();
+          alert.setMessage("Failed to append to file: " + wordList.getAbsolutePath());
+          alert.show();
         }
         return false;
       }
@@ -306,7 +362,7 @@ public class DictionaryActivity extends ListActivity {
   private class DictionaryListAdapter extends BaseAdapter {
 
     public int getCount() {
-      return activeLangaugeData.rows.size();
+      return dictionary != null ? activeLangaugeData.rows.size() : 0;
     }
 
     public Dictionary.Row getItem(int rowIndex) {
@@ -330,7 +386,6 @@ public class DictionaryActivity extends ListActivity {
         } else {
           result = new TextView(parent.getContext());
         }
-//        result.setBackgroundColor(Color.WHITE);
         result.setText(activeLangaugeData.rowToString(row));
         result.setTextAppearance(parent.getContext(),
             android.R.style.TextAppearance_Large);
@@ -345,9 +400,6 @@ public class DictionaryActivity extends ListActivity {
       final int rowCount = entry.getRowCount();
       for (int r = 0; r < rowCount; ++r) {
         final TableRow tableRow = new TableRow(result.getContext());
-//        if (r > 0) {
-//          tableRow.setBackgroundColor(Color.DKGRAY);  
-//        }
         
         TextView column1 = new TextView(tableRow.getContext());
         TextView column2 = new TextView(tableRow.getContext());
diff --git a/src/com/hughes/android/dictionary/PreferenceActivity.java b/src/com/hughes/android/dictionary/PreferenceActivity.java
new file mode 100755 (executable)
index 0000000..4863eaf
--- /dev/null
@@ -0,0 +1,11 @@
+package com.hughes.android.dictionary;\r
+\r
+import android.os.Bundle;\r
+\r
+public class PreferenceActivity extends android.preference.PreferenceActivity {\r
+  @Override\r
+  public void onCreate(Bundle savedInstanceState) {\r
+    super.onCreate(savedInstanceState);\r
+    addPreferencesFromResource(R.xml.preferences);\r
+  }\r
+}\r
index 4ec8d9b9e537eb57dfcf09068c9f529fb9151f37..19ea99ee65662d69b078bed019c9463ff4152193 100755 (executable)
@@ -14,28 +14,34 @@ public final class R {
         public static final int icon=0x7f020000;\r
     }\r
     public static final class id {\r
-        public static final int DownButton=0x7f05000d;\r
-        public static final int ImageView01=0x7f050002;\r
-        public static final int LangButton=0x7f05000c;\r
-        public static final int LinearLayout01=0x7f050000;\r
-        public static final int LinearLayout02=0x7f050001;\r
-        public static final int SearchBarLinearLayout=0x7f050008;\r
-        public static final int SearchBarTableLayout=0x7f050009;\r
-        public static final int SearchBarTableRow=0x7f05000a;\r
-        public static final int SearchText=0x7f05000b;\r
-        public static final int UpButton=0x7f05000e;\r
-        public static final int author=0x7f050006;\r
-        public static final int copyright=0x7f050005;\r
-        public static final int email=0x7f050007;\r
-        public static final int space1=0x7f050004;\r
-        public static final int title=0x7f050003;\r
+        public static final int DownButton=0x7f06000d;\r
+        public static final int ImageView01=0x7f060002;\r
+        public static final int LangButton=0x7f06000c;\r
+        public static final int LinearLayout01=0x7f060000;\r
+        public static final int LinearLayout02=0x7f060001;\r
+        public static final int SearchBarLinearLayout=0x7f060008;\r
+        public static final int SearchBarTableLayout=0x7f060009;\r
+        public static final int SearchBarTableRow=0x7f06000a;\r
+        public static final int SearchText=0x7f06000b;\r
+        public static final int UpButton=0x7f06000e;\r
+        public static final int author=0x7f060006;\r
+        public static final int copyright=0x7f060005;\r
+        public static final int email=0x7f060007;\r
+        public static final int space1=0x7f060004;\r
+        public static final int title=0x7f060003;\r
     }\r
     public static final class layout {\r
         public static final int about=0x7f030000;\r
         public static final int main=0x7f030001;\r
     }\r
     public static final class string {\r
-        public static final int about_text=0x7f040001;\r
-        public static final int app_name=0x7f040000;\r
+        public static final int about_text=0x7f050001;\r
+        public static final int app_name=0x7f050000;\r
+        public static final int dictFetchUrl=0x7f050004;\r
+        public static final int dictFile=0x7f050003;\r
+        public static final int wordListFile=0x7f050002;\r
+    }\r
+    public static final class xml {\r
+        public static final int preferences=0x7f040000;\r
     }\r
 }\r