From 1fbf9e0bdc074f31cdf33b77f20054d7d3838173 Mon Sep 17 00:00:00 2001 From: thadh Date: Mon, 14 Dec 2009 21:51:18 -0800 Subject: [PATCH] go --- .../dictionary/DictionaryActivity.java | 45 ++++++++++++++----- .../hughes/android/dictionary/Language.java | 32 ++++++++----- .../dictionary/NoDictionaryActivity.java | 4 +- 3 files changed, 57 insertions(+), 24 deletions(-) diff --git a/src/com/hughes/android/dictionary/DictionaryActivity.java b/src/com/hughes/android/dictionary/DictionaryActivity.java index 76a7997..61061d5 100755 --- a/src/com/hughes/android/dictionary/DictionaryActivity.java +++ b/src/com/hughes/android/dictionary/DictionaryActivity.java @@ -6,6 +6,7 @@ import java.io.IOException; import java.io.PrintWriter; import java.io.RandomAccessFile; import java.text.SimpleDateFormat; +import java.util.Arrays; import java.util.Date; import java.util.concurrent.Executor; import java.util.concurrent.Executors; @@ -48,6 +49,7 @@ import android.widget.Toast; import com.hughes.android.dictionary.Dictionary.IndexEntry; import com.hughes.android.dictionary.Dictionary.LanguageData; import com.hughes.android.dictionary.Dictionary.Row; +import com.ibm.icu.text.Collator; public class DictionaryActivity extends ListActivity { @@ -82,6 +84,24 @@ public class DictionaryActivity extends ListActivity { // Visible for testing. LanguageListAdapter languageList = null; private SearchOperation searchOperation = null; + + public DictionaryActivity() { + + searchExecutor.execute(new Runnable() { + public void run() { + final long startMillis = System.currentTimeMillis(); + for (final String lang : Arrays.asList("EN", "DE")) { + Language.lookup(lang).getFindCollator(); + final Collator c = Language.lookup(lang).getSortCollator(); + if (c.compare("pre-print", "preppy") >= 0) { + Log.e(LOG, c.getClass() + " is buggy, lookups may not work properly."); + } + } + Log.d(LOG, "Loading collators took:" + (System.currentTimeMillis() - startMillis)); + } + }); + + } /** Called when the activity is first created. */ @Override @@ -89,12 +109,6 @@ public class DictionaryActivity extends ListActivity { super.onCreate(savedInstanceState); Log.d(LOG, "onCreate:" + this); - if (Language.EN.sortCollator.compare("pre-print", "preppy") >= 0) { - Log - .e(LOG, - Language.EN.sortCollator.getClass() + " is buggy, lookups may not work properly."); - } - try { initDictionaryAndPrefs(); } catch (Exception e) { @@ -184,12 +198,14 @@ public class DictionaryActivity extends ListActivity { Log.d(LOG, "dictFile=" + dictFile); try { - if (!dictFile.canRead()) { - throw new IOException("Unable to read dictionary file."); - } - - dictRaf = new RandomAccessFile(dictFile, "r"); - dictionary = new Dictionary(dictRaf); + if (!dictFile.canRead()) { + throw new IOException("Unable to read dictionary file."); + } + + dictRaf = new RandomAccessFile(dictFile, "r"); + final long startMillis = System.currentTimeMillis(); + dictionary = new Dictionary(dictRaf); + Log.d(LOG, "Read dictionary millis: " + (System.currentTimeMillis() - startMillis)); } catch (IOException e) { Log.e(LOG, "Couldn't open dictionary.", e); this.startActivity(new Intent(this, NoDictionaryActivity.class)); @@ -248,9 +264,13 @@ public class DictionaryActivity extends ListActivity { private void closeCurrentDictionary() { Log.i(LOG, "closeCurrentDictionary"); + if (dictionary == null) { + return; + } waitForSearchEnd(); languageList = null; setListAdapter(null); + Log.d(LOG, "setListAdapter finished."); dictionary = null; try { if (dictRaf != null) { @@ -684,6 +704,7 @@ public class DictionaryActivity extends ListActivity { void waitForSearchEnd() { synchronized (this) { while (searchOperation != null) { + Log.d(LOG, "waitForSearchEnd"); try { this.wait(); } catch (InterruptedException e) { diff --git a/src/com/hughes/android/dictionary/Language.java b/src/com/hughes/android/dictionary/Language.java index 440a7d0..d8fa360 100755 --- a/src/com/hughes/android/dictionary/Language.java +++ b/src/com/hughes/android/dictionary/Language.java @@ -12,31 +12,25 @@ public class Language { final String symbol; final Locale locale; - final Collator sortCollator; + private Collator sortCollator; final Comparator sortComparator; - final Collator findCollator; + private Collator findCollator; final Comparator findComparator; public Language(final String symbol, final Locale locale) { this.symbol = symbol; this.locale = locale; - this.sortCollator = Collator.getInstance(locale); - this.sortCollator.setDecomposition(Collator.CANONICAL_DECOMPOSITION); - this.sortCollator.setStrength(Collator.IDENTICAL); this.sortComparator = new Comparator() { public int compare(final String s1, final String s2) { - return sortCollator.compare(textNorm(s1), textNorm(s2)); + return getSortCollator().compare(textNorm(s1), textNorm(s2)); } }; - this.findCollator = Collator.getInstance(locale); - this.findCollator.setDecomposition(Collator.CANONICAL_DECOMPOSITION); - this.findCollator.setStrength(Collator.SECONDARY); this.findComparator = new Comparator() { public int compare(final String s1, final String s2) { - return findCollator.compare(textNorm(s1), textNorm(s2)); + return getFindCollator().compare(textNorm(s1), textNorm(s2)); } }; @@ -50,6 +44,24 @@ public class Language { public String toString() { return symbol; } + + synchronized Collator getFindCollator() { + if (findCollator == null) { + findCollator = Collator.getInstance(locale); + findCollator.setDecomposition(Collator.CANONICAL_DECOMPOSITION); + findCollator.setStrength(Collator.SECONDARY); + } + return findCollator; + } + + synchronized Collator getSortCollator() { + if (sortCollator == null) { + sortCollator = Collator.getInstance(locale); + sortCollator.setDecomposition(Collator.CANONICAL_DECOMPOSITION); + sortCollator.setStrength(Collator.IDENTICAL); + } + return sortCollator; + } // ---------------------------------------------------------------- diff --git a/src/com/hughes/android/dictionary/NoDictionaryActivity.java b/src/com/hughes/android/dictionary/NoDictionaryActivity.java index bc8499f..f7fb10f 100755 --- a/src/com/hughes/android/dictionary/NoDictionaryActivity.java +++ b/src/com/hughes/android/dictionary/NoDictionaryActivity.java @@ -49,9 +49,9 @@ public class NoDictionaryActivity extends Activity { final TextView statusText = (TextView) findViewById(R.id.statusTextId); if (!canReadDict) { - statusText.setText(String.format(getString(R.string.unableToReadDictionaryFile), dictFile)); + statusText.setText(getString(R.string.unableToReadDictionaryFile, dictFile)); } else { - statusText.setText(String.format(getString(R.string.unableToReadDictionaryFile), dictFile)); + statusText.setText(getString(R.string.dictionaryFileExists)); } final Button launchButton = (Button) findViewById(R.id.launchDict); -- 2.43.0