\r
// Visible for testing.\r
ListAdapter indexAdapter = null;\r
+ \r
+ final SearchTextWatcher searchTextWatcher = new SearchTextWatcher();\r
\r
//private Vibrator vibrator = null;\r
\r
dictionary = new Dictionary(dictRaf); \r
} catch (Exception e) {\r
Log.e(LOG, "Unable to load dictionary.", e);\r
+ if (dictRaf != null) {\r
+ try {\r
+ dictRaf.close();\r
+ } catch (IOException e1) {\r
+ Log.e(LOG, "Unable to close dictRaf.", e1);\r
+ }\r
+ dictRaf = null;\r
+ }\r
Toast.makeText(this, getString(R.string.invalidDictionary, "", e.getMessage()), Toast.LENGTH_LONG);\r
startActivity(DictionaryEditActivity.getIntent(dictIndex));\r
finish();\r
searchExecutor.execute(new Runnable() {\r
public void run() {\r
final long startMillis = System.currentTimeMillis();\r
+ Log.d(LOG, "Constructing index for lang=" + index.sortLanguage.getSymbol());\r
for (final Index index : dictionary.indices) {\r
+ Log.d(LOG, "Starting collator load for lang=" + index.sortLanguage.getSymbol());\r
final com.ibm.icu.text.Collator c = index.sortLanguage.getCollator();\r
if (c.compare("pre-print", "preppy") >= 0) {\r
Log.e(LOG, c.getClass()\r
langButton = (Button) findViewById(R.id.LangButton);\r
\r
searchText.requestFocus();\r
- searchText.addTextChangedListener(new SearchTextWatcher());\r
+ searchText.addTextChangedListener(searchTextWatcher);\r
searchText.setText(prefs.getString(C.SEARCH_TOKEN, ""));\r
Log.d(LOG, "Trying to restore searchText=" + searchText.getText());\r
\r
@Override\r
protected void onDestroy() {\r
super.onDestroy();\r
+ if (dictRaf == null) {\r
+ return;\r
+ }\r
setDictionaryPrefs(this, dictIndex, indexIndex, searchText.getText().toString());\r
try {\r
dictRaf.close();\r
// Down\r
destIndexEntry = Math.min(tokenRow.referenceIndex + 1, index.sortedIndexEntries.size());\r
}\r
- \r
final Index.IndexEntry dest = index.sortedIndexEntries.get(destIndexEntry);\r
- searchText.setText(dest.token);\r
Log.d(LOG, "onUpDownButton, destIndexEntry=" + dest.token);\r
- //jumpToRow(index.sortedIndexEntries.get(destIndexEntry).startRow);\r
+ searchText.removeTextChangedListener(searchTextWatcher);\r
+ searchText.setText(dest.token);\r
+ jumpToRow(index.sortedIndexEntries.get(destIndexEntry).startRow);\r
+ searchText.removeTextChangedListener(searchTextWatcher);\r
}\r
\r
// --------------------------------------------------------------------------\r
\r
void onSearchTextChange(final String text) {\r
if (!searchText.isFocused()) {\r
+ Log.d(LOG, "searchText changed without focus, doing nothing.");\r
return;\r
}\r
Log.d(LOG, "onSearchTextChange: " + text); \r
public void print(final PrintStream out) {
out.println("dictInfo=" + dictInfo);
for (final Index index : indices) {
+ out.printf("Index: %s %s\n", index.shortName, index.longName);
index.print(out);
out.println();
}
public enum EntryTypeName {
+ WIKTIONARY_TITLE_ONE_WORD(0),
+ WIKTIONARY_MEANING_ONE_WORD(0),
+ WIKTIONARY_TRANSLATION_ONE_WORD(0),
+
NOUN(0),
VERB(0),
ADJ(0),
MULTIROW_HEAD_ONE_WORD(0),
MULTIROW_TAIL_ONE_WORD(0),
+ WIKTIONARY_TITLE_MULTI_WORD(0),
+ WIKTIONARY_MEANING_MULTI_WORD(0),
+ WIKTIONARY_FORM_OF(0),
+ WIKTIONARY_EXAMPLE_HEADWORDS(0),
TWO_WORDS(0),
THREE_WORDS(0),
FOUR_WORDS(0),
FIVE_OR_MORE_WORDS(0),
+ WIKTIONARY_EXAMPLE_OTHER_WORDS(0),
- WIKTIONARY_DE_MAIN(0),
MULTIROW_HEAD_MANY_WORDS(0),
MULTIROW_TAIL_MANY_WORDS(0),
PART_OF_HYPHENATED(0),
BRACKETED(0),
PARENTHESIZED(0),
- SEE_ALSO(0),
+ SEE_ALSO(0),
;
final int nameResId;
return result;
}
+ /*
+ public int tokenRowBinarySearch(final int rowIndex) {
+ int start = 0;
+ int end = sortedIndexEntries.size();
+ while (start < end) {
+ final int mid = (start + end) / 2;
+ final int midRowIndex = sortedIndexEntries.get(mid).startRow;
+ if (midRowIndex == rowIndex) {
+ return mid;
+ }
+ if ()
+ }
+ }
+ */
}
\ No newline at end of file
import com.hughes.util.raf.RAFSerializable;
import com.hughes.util.raf.RAFSerializer;
-public class PairEntry extends Entry implements RAFSerializable<PairEntry> {
+public class PairEntry extends Entry implements RAFSerializable<PairEntry>, Comparable<PairEntry> {
public static final class Pair {
this.lang1 = lang1;
this.lang2 = lang2;
}
-
+
+ public Pair(final String lang1, final String lang2, final boolean swap) {
+ this(swap ? lang2 : lang1, swap ? lang1 : lang2);
+ }
+
public String toString() {
return lang1 + " :: " + lang2;
}
return lang1 + "\t" + lang2;
}
+ public String get(int i) {
+ if (i == 0) {
+ return lang1;
+ } else if (i == 1) {
+ return lang2;
+ }
+ throw new IllegalArgumentException();
+ }
+
}
public final Pair[] pairs;
this.pairs = pairs;
}
+ public PairEntry(final String lang1, final String lang2) {
+ this.pairs = new Pair[] { new Pair(lang1, lang2) };
+ }
+
public PairEntry(final RandomAccessFile raf) throws IOException {
pairs = new Pair[raf.readInt()];
for (int i = 0; i < pairs.length; ++i) {
@Override
public String getRawText(boolean compact) {
final PairEntry pairEntry = getEntry();
- if (compact) {
- return pairEntry.pairs[0].toStringTab();
- }
- final StringBuilder builder = new StringBuilder();
- for (int i = 0; i < pairEntry.pairs.length; ++i) {
- if (i > 0) {
- builder.append(" | ");
- }
- builder.append(pairEntry.pairs[i].lang1);
+ return pairEntry.getRawText(compact);
+ }
+
+ }
+
+ public String getRawText(final boolean compact) {
+ if (compact) {
+ return this.pairs[0].toStringTab();
+ }
+ final StringBuilder builder = new StringBuilder();
+ for (int i = 0; i < this.pairs.length; ++i) {
+ if (i > 0) {
+ builder.append(" | ");
}
- builder.append("\t");
- for (int i = 0; i < pairEntry.pairs.length; ++i) {
- if (i > 0) {
- builder.append(" | ");
- }
- builder.append(pairEntry.pairs[i].lang2);
+ builder.append(this.pairs[i].lang1);
+ }
+ builder.append("\t");
+ for (int i = 0; i < this.pairs.length; ++i) {
+ if (i > 0) {
+ builder.append(" | ");
}
- return builder.toString();
+ builder.append(this.pairs[i].lang2);
}
+ return builder.toString();
}
-
+ @Override
+ public int compareTo(final PairEntry that) {
+ return this.getRawText(false).compareTo(that.getRawText(false));
+ }
+
+ @Override
+ public String toString() {
+ return getRawText(false);
+ }
+
}
public TokenRow getTokenRow(final boolean search) {
if (tokenRow == null && search) {
int r = index() - 1;
+ int rUp = index() + 1;
while (r >= 0) {
final RowBase row = index.rows.get(r);
final TokenRow candidate = row.getTokenRow(false);
}
break;
}
+ if (rUp < index.rows.size()) {
+ final RowBase rowUp = index.rows.get(rUp);
+ final TokenRow candidateUp = rowUp.getTokenRow(false);
+ if (candidateUp != null) {
+ for (--rUp; rUp >= index(); --rUp) {
+ index.rows.get(rUp).setTokenRow(candidateUp);
+ }
+ break;
+ }
+ rUp++;
+ }
--r;
}
assert tokenRow != null;