]> gitweb.fperrin.net Git - Dictionary.git/blobdiff - src/com/hughes/android/dictionary/DictionaryActivity.java
Long-press on lang button shows list.
[Dictionary.git] / src / com / hughes / android / dictionary / DictionaryActivity.java
index d6ec791fc9a214e9c85caa608d26147dce285e2a..428f3a0dad20fed329e131a4e51e94aa925fde90 100644 (file)
@@ -20,7 +20,6 @@ import java.io.IOException;
 import java.io.PrintWriter;\r
 import java.io.RandomAccessFile;\r
 import java.text.SimpleDateFormat;\r
-import java.util.ArrayList;\r
 import java.util.Date;\r
 import java.util.List;\r
 import java.util.concurrent.Executor;\r
@@ -74,6 +73,7 @@ import android.widget.TableRow;
 import android.widget.TextView;\r
 import android.widget.Toast;\r
 \r
+import com.hughes.android.dictionary.DictionaryInfo.IndexInfo;\r
 import com.hughes.android.dictionary.engine.Dictionary;\r
 import com.hughes.android.dictionary.engine.Index;\r
 import com.hughes.android.dictionary.engine.PairEntry;\r
@@ -81,13 +81,14 @@ import com.hughes.android.dictionary.engine.PairEntry.Pair;
 import com.hughes.android.dictionary.engine.RowBase;\r
 import com.hughes.android.dictionary.engine.TokenRow;\r
 import com.hughes.android.dictionary.engine.TransliteratorManager;\r
-import com.hughes.android.util.PersistentObjectCache;\r
+import com.hughes.android.util.IntentLauncher;\r
 \r
 public class DictionaryActivity extends ListActivity {\r
 \r
   static final String LOG = "QuickDic";\r
   \r
-  String dictFile = null;\r
+  DictionaryApplication application;\r
+  File dictFile = null;\r
   RandomAccessFile dictRaf = null;\r
   Dictionary dictionary = null;\r
   int indexIndex = 0;\r
@@ -118,46 +119,49 @@ public class DictionaryActivity extends ListActivity {
   \r
   final SearchTextWatcher searchTextWatcher = new SearchTextWatcher();\r
 \r
-  //private Vibrator vibrator = null;\r
-  \r
   public DictionaryActivity() {\r
   }\r
   \r
-  public static Intent getLaunchIntent(final String dictFile, final int indexIndex, final String searchToken) {\r
+  public static Intent getLaunchIntent(final File dictFile, final int indexIndex, final String searchToken) {\r
     final Intent intent = new Intent();\r
     intent.setClassName(DictionaryActivity.class.getPackage().getName(), DictionaryActivity.class.getName());\r
-    intent.putExtra(C.DICT_FILE, dictFile);\r
+    intent.putExtra(C.DICT_FILE, dictFile.getPath());\r
     intent.putExtra(C.INDEX_INDEX, indexIndex);\r
     intent.putExtra(C.SEARCH_TOKEN, searchToken);\r
     return intent;\r
   }\r
   \r
-  // TODO: fix these...\r
-\r
   @Override\r
   protected void onSaveInstanceState(final Bundle outState) {\r
     super.onSaveInstanceState(outState);\r
     outState.putString(C.SEARCH_TOKEN, searchText.getText().toString());\r
   }\r
-  \r
+\r
   @Override\r
-  public void onCreate(Bundle savedInstanceState) {\r
-    clearDictionaryPrefs(this);\r
-    \r
+  protected void onRestoreInstanceState(final Bundle outState) {\r
+    super.onRestoreInstanceState(outState);\r
+    setSearchText(outState.getString(C.SEARCH_TOKEN));\r
+  }\r
+\r
+  @Override\r
+  public void onCreate(Bundle savedInstanceState) {    \r
     Log.d(LOG, "onCreate:" + this);\r
-    theme = ((DictionaryApplication)getApplication()).getSelectedTheme();\r
     super.onCreate(savedInstanceState);\r
+\r
+    application = (DictionaryApplication) getApplication();\r
+    theme = application.getSelectedTheme();\r
+\r
+    // Clear them so that if something goes wrong, we won't relaunch.\r
+    clearDictionaryPrefs(this);\r
+    \r
     \r
     final Intent intent = getIntent();\r
-    dictFile = intent.getStringExtra(C.DICT_FILE);\r
+    dictFile = new File(intent.getStringExtra(C.DICT_FILE));\r
 \r
     try {\r
-      PersistentObjectCache.init(this);\r
-      QuickDicConfig quickDicConfig = PersistentObjectCache.init(\r
-          this).read(C.DICTIONARY_CONFIGS, QuickDicConfig.class);\r
-      final DictionaryInfo dictionaryConfig = quickDicConfig.getDictionaryInfoByFile(dictFile);\r
-      this.setTitle("QuickDic: " + dictionaryConfig.name);\r
-      dictRaf = new RandomAccessFile(dictionaryConfig.localFile, "r");\r
+      final String name = application.getDictionaryName(dictFile.getName());\r
+      this.setTitle("QuickDic: " + name);\r
+      dictRaf = new RandomAccessFile(dictFile, "r");\r
       dictionary = new Dictionary(dictRaf); \r
     } catch (Exception e) {\r
       Log.e(LOG, "Unable to load dictionary.", e);\r
@@ -170,7 +174,7 @@ public class DictionaryActivity extends ListActivity {
         dictRaf = null;\r
       }\r
       Toast.makeText(this, getString(R.string.invalidDictionary, "", e.getMessage()), Toast.LENGTH_LONG);\r
-      startActivity(DictionaryEditActivity.getLaunchIntent(dictFile));\r
+      startActivity(DictionaryManagerActivity.getLaunchIntent());\r
       finish();\r
       return;\r
     }\r
@@ -252,7 +256,7 @@ public class DictionaryActivity extends ListActivity {
     langButton.setOnLongClickListener(new OnLongClickListener() {\r
       @Override\r
       public boolean onLongClick(View v) {\r
-        onLanguageButtonLongClick();\r
+        onLanguageButtonLongClick(v.getContext());\r
         return true;\r
       }\r
     });\r
@@ -321,9 +325,9 @@ public class DictionaryActivity extends ListActivity {
   }\r
   \r
   private static void setDictionaryPrefs(final Context context,\r
-      final String dictFile, final int indexIndex, final String searchToken) {\r
+      final File dictFile, final int indexIndex, final String searchToken) {\r
     final SharedPreferences.Editor prefs = PreferenceManager.getDefaultSharedPreferences(context).edit();\r
-    prefs.putString(C.DICT_FILE, dictFile);\r
+    prefs.putString(C.DICT_FILE, dictFile.getPath());\r
     prefs.putInt(C.INDEX_INDEX, indexIndex);\r
     prefs.putString(C.SEARCH_TOKEN, searchToken);\r
     prefs.commit();\r
@@ -399,14 +403,12 @@ public class DictionaryActivity extends ListActivity {
   static class OpenIndexButton extends Button implements OnClickListener {\r
 \r
     final Activity activity;\r
-    final String dictFile;\r
-    final int indexIndex;\r
+    final Intent intent;\r
 \r
-    public OpenIndexButton(final Context context, final Activity activity, final String text, final String dictFile, final int indexIndex) {\r
+    public OpenIndexButton(final Context context, final Activity activity, final String text, final Intent intent) {\r
       super(context);\r
       this.activity = activity;\r
-      this.dictFile = dictFile;\r
-      this.indexIndex = indexIndex;\r
+      this.intent = intent;\r
       setOnClickListener(this);\r
       setText(text, BufferType.NORMAL);\r
     }\r
@@ -414,34 +416,47 @@ public class DictionaryActivity extends ListActivity {
     @Override\r
     public void onClick(View v) {\r
       activity.finish();\r
-      getContext().startActivity(DictionaryActivity.getLaunchIntent(dictFile, indexIndex, ""));\r
+      getContext().startActivity(intent);\r
     }\r
     \r
   }\r
 \r
-  void onLanguageButtonLongClick() {\r
-    Context mContext = getApplicationContext();\r
-    Dialog dialog = new Dialog(mContext);\r
-    \r
+  void onLanguageButtonLongClick(final Context context) {\r
+    final Dialog dialog = new Dialog(context);\r
     dialog.setContentView(R.layout.select_dictionary_dialog);\r
-    dialog.setTitle(R.string.selectADictionary);\r
+    dialog.setTitle(R.string.selectDictionary);\r
 \r
+    final List<DictionaryInfo> installedDicts = ((DictionaryApplication)getApplication()).getUsableDicts();\r
     ListView listView = (ListView) dialog.findViewById(android.R.id.list);\r
-\r
-    QuickDicConfig quickDicConfig = PersistentObjectCache.init(\r
-        this).read(C.DICTIONARY_CONFIGS, QuickDicConfig.class);\r
-    final List<DictionaryInfo> dictionaryInfos = new ArrayList<DictionaryInfo>();\r
-    for (final DictionaryInfo dictionaryInfo : quickDicConfig.dictionaryInfos) {\r
-      if (new File(dictionaryInfo.localFile).canRead()) {\r
-        dictionaryInfos.add(dictionaryInfo);\r
-      }\r
-    }\r
     listView.setAdapter(new BaseAdapter() {\r
-      \r
       @Override\r
       public View getView(int position, View convertView, ViewGroup parent) {\r
         final LinearLayout result = new LinearLayout(parent.getContext());\r
-        //result.addView(new Butt)\r
+        final DictionaryInfo dictionaryInfo = getItem(position);\r
+        for (int i = 0; i < dictionaryInfo.indexInfos.size(); ++i) {\r
+          final IndexInfo indexInfo = dictionaryInfo.indexInfos.get(i);\r
+          final Button button = new Button(parent.getContext());\r
+          String name = application.getLanguageName(indexInfo.shortName);\r
+          if (name == null) {\r
+            name = indexInfo.shortName;\r
+          }\r
+          button.setText(name);\r
+          final IntentLauncher intentLauncher = new IntentLauncher(parent.getContext(), getLaunchIntent(application.getPath(dictionaryInfo.uncompressedFilename), i, "")) {\r
+            @Override\r
+            protected void onGo() {\r
+              dialog.dismiss();\r
+              DictionaryActivity.this.finish();\r
+            };\r
+          };\r
+          button.setOnClickListener(intentLauncher);\r
+          \r
+          final LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);\r
+          layoutParams.width = 0;\r
+          layoutParams.weight = 1.0f;\r
+          button.setLayoutParams(layoutParams);\r
+\r
+          result.addView(button);\r
+        }\r
         return result;\r
       }\r
       \r
@@ -451,15 +466,17 @@ public class DictionaryActivity extends ListActivity {
       }\r
       \r
       @Override\r
-      public Object getItem(int position) {\r
-        return dictionaryInfos.get(position);\r
+      public DictionaryInfo getItem(int position) {\r
+        return installedDicts.get(position);\r
       }\r
       \r
       @Override\r
       public int getCount() {\r
-        return dictionaryInfos.size();\r
+        return installedDicts.size();\r
       }\r
     });\r
+    \r
+    dialog.show();\r
   }\r
 \r
 \r