<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.hughes.android.dictionary" android:versionName="1.2" android:versionCode="5">
+ package="com.hughes.android.dictionary" android:versionName="1.6" android:versionCode="6">
<uses-sdk android:minSdkVersion="2" />
<uses-permission android:name="android.permission.INTERNET"/>
android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android">
<TextView android:id="@+id/TextView01" android:layout_width="wrap_content"
- android:layout_height="wrap_content" android:text="Downloading..."></TextView>
+ android:layout_height="wrap_content" android:text="Downloading..."/>
<LinearLayout android:id="@+id/sourceLayout"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android">
<TextView android:id="@+id/sourceTitle" android:layout_width="wrap_content"
- android:layout_height="wrap_content" android:text="Source: "></TextView>
+ android:layout_height="wrap_content" android:text="Source: "/>
<TextView android:id="@+id/source" android:layout_width="wrap_content"
- android:layout_height="wrap_content" android:text="source"></TextView>
+ android:layout_height="wrap_content" android:text="source"/>
</LinearLayout>
<LinearLayout android:id="@+id/destLayout"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android">
<TextView android:id="@+id/destTitle" android:layout_width="wrap_content"
- android:layout_height="wrap_content" android:text="Destination: "></TextView>
+ android:layout_height="wrap_content" android:text="Destination: "/>
<TextView android:id="@+id/dest" android:layout_width="wrap_content"
- android:layout_height="wrap_content" android:text="dest"></TextView>
+ android:layout_height="wrap_content" android:text="dest"/>
</LinearLayout>
- <ProgressBar android:id="@+id/downloadProgressBar"
- android:layout_width="wrap_content" android:layout_height="wrap_content" android:indeterminate="false"></ProgressBar>
+ <ProgressBar android:id="@+id/downloadProgressBar" style="?android:attr/progressBarStyleHorizontal"
+ android:max="100" android:progress="50"
+ android:layout_width="fill_parent" android:layout_height="wrap_content" android:indeterminate="false"/>
<TextView android:id="@+id/downloadStatus" android:layout_width="wrap_content"
- android:layout_height="wrap_content" android:visibility="visible" android:text="Download status."></TextView>
+ android:layout_height="wrap_content" android:visibility="visible" android:text="Download status."/>
</LinearLayout>
android:inputType="text"
android:layout_weight="1.0"/>
+ <Button
+ android:id="@+id/ClearSearchTextButton"
+ android:text="<x"
+ android:minWidth="50dip"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ />
+
<Button
android:id="@+id/LangButton"
android:text="LANG"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|fill_vertical"
+ android:layout_marginBottom="5dip"
/>
<Button
<string name="failedAddingToWordList">Fehler bei Wortliste hinzufugen: %s</string>
<!-- About. -->
- <string name="titleWithVersion">QuickDic 1.2</string>
+ <string name="titleWithVersion">QuickDic 1.6</string>
<string name="thadHughes">Thad Hughes</string>
<string name="contactMe">Wenn QuickDic dir gefällt, würde ich gern von dir hören. Bitte schicke Bemerkungen, Aufforderungen, oder Programmfehler an:</string>
<string name="myEmail">thad.hughes+quickdic@gmail.com</string>
<string name="currentDictInfo">Wörterbuch Info:</string>
<string name="noDictLoaded">Kein Wörterbuch geöffnet.</string>
+ <string name="aboutText"><![CDATA[%s\n
+\n
+Einträgezahl: %d\n
+%s:\n
+ Wörterzahl: %d\n
+ Reihezahl: %d\n
+%s:\n
+ Wörterzahl: %d\n
+ Reihezahl: %d\n
+]]></string>
<!-- Download. -->
- <string name="downloading">%d Bytes heruntergeladen...</string>
+ <string name="downloading">%d von %d Bytes heruntergeladen...</string>
<string name="downloadFinished">Herunterladen fertig, %d Bytes heruntergeladen.</string>
<string name="errorDownloadingFile">"Fehler während des Herunterladens: \n%s"</string>
<!-- NoDictionary. -->
- <string name="unableToReadDictionaryFile">Wörterbuch Datei existiert nicht: %s</string>
+ <string name="unableToReadDictionaryFile">Wörterbuch Datei existiert nicht (oder ist eine alte Version): %s</string>
<string name="DictionaryFileExists">Wörterbuch Datei existiert: %s</string>
<string name="launchDict">"Launch dictionary."</string>
<string name="wordListFileSummary">Die Datei, in der neue Worte hinzugefügt werden.</string>
<string name="wordListFileDefault">/sdcard/wordList.txt</string>
+ <string name="saveOnlyFirstSubentryKey">saveOnlyFirstSubentry</string>
+ <string name="saveOnlyFirstSubentryTitle">Save only first sub-entry</string>
+ <string name="saveOnlyFirstSubentrySummary">For entries with multiple sub-entries, only write the first to the word list.</string>
+
+ <string name="showClearSearchTextButtonKey">showClearSearchTextButton</string>
+ <string name="showClearSearchTextButtonTitle">Show 'clear search text' button</string>
+ <string name="showClearSearchTextButtonSummary">Show the button to clear the search text. You can also just move focus away from search text and start typing.</string>
+
<string name="dictFileKey">dictFile</string>
<string name="dictFileTitle">Wörterbuch Datei</string>
<string name="dictFileSummary">Die Datei, die das Wörterbuch enthält (und worein das Wörterbuch heruntergeladen wird).</string>
<string name="failedAddingToWordList">Failure adding to word list: %s</string>
<!-- About. -->
- <string name="titleWithVersion">QuickDic 1.2</string>
+ <string name="titleWithVersion">QuickDic 1.6</string>
<string name="thadHughes">Thad Hughes</string>
<string name="contactMe">If you're using QuickDic, I'd love to hear from you. Please send comments, suggestions, bug reports, or just a quick hello to:</string>
<string name="myEmail">thad.hughes+quickdic@gmail.com</string>
<string name="currentDictInfo">Current dictionary info:</string>
<string name="noDictLoaded">No dictionary loaded.</string>
+ <string name="aboutText"><![CDATA[%s\n
+\n
+Entry count: %d\n
+%s:\n
+ Unique token count: %d\n
+ Row count: %d\n
+%s:\n
+ Unique token count: %d\n
+ Row count: %d\n
+]]></string>
<!-- Download. -->
- <string name="downloading">Downloading, %d bytes so far</string>
+ <string name="downloading">Downloading, %d of %d bytes.</string>
<string name="downloadFinished">Download finished, %d bytes downloaded.</string>
<string name="errorDownloadingFile">"Error downloading file: \n%s"</string>
<!-- NoDictionary. -->
- <string name="unableToReadDictionaryFile">Unable to read dictionary file: %s</string>
+ <string name="unableToReadDictionaryFile">Unable to read dictionary file (or version is old, try downloading again): %s</string>
<string name="dictionaryFileExists">Dictionary file exists: %s</string>
<string name="launchDict">Launch dictionary.</string>
<string name="wordListFileSummary">The local file where the word list will be appended.</string>
<string name="wordListFileDefault">/sdcard/wordList.txt</string>
+ <string name="saveOnlyFirstSubentryKey">saveOnlyFirstSubentry</string>
+ <string name="saveOnlyFirstSubentryTitle">Save only first sub-entry</string>
+ <string name="saveOnlyFirstSubentrySummary">For entries with multiple sub-entries, only write the first to the word list.</string>
+
+ <string name="showClearSearchTextButtonKey">showClearSearchTextButton</string>
+ <string name="showClearSearchTextButtonTitle">Show 'clear search text' button</string>
+ <string name="showClearSearchTextButtonSummary">Show the button to clear the search text. You can also just move focus away from search text and start typing.</string>
+
<string name="dictFileKey">dictFile</string>
<string name="dictFileTitle">Dictionary file</string>
<string name="dictFileSummary">The local filename where the dictionary is stored (and downloaded to).</string>
<string name="dictFetchUrlTitle">Dictionary fetch URL</string>
<string name="dictFetchUrlSummary">URL to use to download the dictionary from the Internet.</string>
<string name="dictFetchUrlDefault">http://www.stanford.edu/~egirard/dict/de-en.dict</string>
-
+
</resources>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">\r
\r
<EditTextPreference\r
- android:key="@string/wordListFileKey"\r
- android:title="@string/wordListFileTitle" \r
- android:summary="@string/wordListFileSummary"\r
+ android:key="@string/wordListFileKey"\r
+ android:title="@string/wordListFileTitle" \r
+ android:summary="@string/wordListFileSummary"\r
android:defaultValue="@string/wordListFileDefault"\r
- android:persistent="true"\r
+ android:persistent="true"\r
/>\r
- \r
+\r
+ <CheckBoxPreference \r
+ android:key="@string/saveOnlyFirstSubentryKey"\r
+ android:title="@string/saveOnlyFirstSubentryTitle"\r
+ android:summary="@string/saveOnlyFirstSubentrySummary"\r
+ android:defaultValue="false"\r
+ android:persistent="true"\r
+ />\r
+\r
+ <CheckBoxPreference \r
+ android:key="@string/showClearSearchTextButtonKey"\r
+ android:title="@string/showClearSearchTextButtonTitle"\r
+ android:summary="@string/showClearSearchTextButtonSummary"\r
+ android:defaultValue="true"\r
+ android:persistent="true"\r
+ />\r
+\r
<EditTextPreference \r
- android:key="@string/dictFileKey"\r
- android:title="@string/dictFileTitle"\r
- android:summary="@string/dictFileSummary"\r
- android:defaultValue="@string/dictFileDefault"\r
- android:persistent="true" \r
- />\r
-
+ android:key="@string/dictFileKey"\r
+ android:title="@string/dictFileTitle"\r
+ android:summary="@string/dictFileSummary"\r
+ android:defaultValue="@string/dictFileDefault"\r
+ android:persistent="true" \r
+ />\r
+
<EditTextPreference \r
- android:key="@string/dictFetchUrlKey"\r
- android:title="@string/dictFetchUrlTitle"
- android:summary="@string/dictFetchUrlSummary"\r
- android:defaultValue="@string/dictFetchUrlDefault"
- android:persistent="true"\r
+ android:key="@string/dictFetchUrlKey"\r
+ android:title="@string/dictFetchUrlTitle"
+ android:summary="@string/dictFetchUrlSummary"\r
+ android:defaultValue="@string/dictFetchUrlDefault"
+ android:persistent="true"\r
/>
-
+\r
</PreferenceScreen>
\ No newline at end of file
import com.hughes.util.raf.UniformFileList;\r
\r
public final class Dictionary implements RAFSerializable<Dictionary> {\r
+ \r
+ private static final String VERSION_CODE = "DictionaryVersion=1.5";\r
\r
static final RAFSerializer<Entry> ENTRY_SERIALIZER = new RAFSerializableSerializer<Entry>(\r
Entry.RAF_FACTORY);\r
.getFilePointer()), 10000);\r
languageDatas[0] = new LanguageData(this, raf, Entry.LANG1);\r
languageDatas[1] = new LanguageData(this, raf, Entry.LANG2);\r
+ if (!VERSION_CODE.equals(raf.readUTF())) {\r
+ throw new IOException("Invalid dictionary version, expected: " + VERSION_CODE);\r
+ }\r
}\r
\r
public void write(RandomAccessFile raf) throws IOException {\r
FileList.write(raf, entries, ENTRY_SERIALIZER);\r
languageDatas[0].write(raf);\r
languageDatas[1].write(raf);\r
+ raf.writeUTF(VERSION_CODE);\r
}\r
\r
final class LanguageData implements RAFSerializable<LanguageData> {\r
FileList.write(raf, sortedIndex, INDEX_ENTRY_SERIALIZER);\r
}\r
\r
- String rowToString(final Row row) {\r
+ String rowToString(final Row row, final boolean onlyFirstSubentry) {\r
return row.isToken() ? sortedIndex.get(row.getIndex()).word : entries\r
- .get(row.getIndex()).toString();\r
+ .get(row.getIndex()).getRawText(onlyFirstSubentry);\r
}\r
\r
int lookup(String word, final AtomicBoolean interrupted) {\r
public class DictionaryActivity extends ListActivity {
// TODO:
- // * Version magic number at end of dictionary, checked for correctness. (Throw exception in ctor, remember to check for it).
- // * Localize "about" string if % codes
- // * Toast when word gets added to word list.
+ // * Download latest dicts.
+ // * http://ftp.tu-chemnitz.de/pub/Local/urz/ding/de-en-devel/
+ // * http://www1.dict.cc/translation_file_request.php?l=e
// * Compress all the strings everywhere, put compression table in file.
// Done:
// * Only one way to way for current search to end. (won't do).
EditText searchText;
Button langButton;
- int lastSelectedRow = 0;
+ int lastSelectedRow = 0; // TODO: I'm evil.
private boolean prefsMightHaveChanged = true;
private File wordList;
private RandomAccessFile dictRaf = null;
private Dictionary dictionary = null;
+ private boolean saveOnlyFirstSubentry = false;
// Visible for testing.
LanguageListAdapter languageList = null;
if (Language.EN.sortCollator.compare("pre-print", "preppy") >= 0) {
Log
.e(LOG,
- "Android java.text.Collator is buggy, lookups may not work properly.");
+ Language.EN.sortCollator.getClass() + " is buggy, lookups may not work properly.");
}
- initDictionaryAndPrefs();
- if (dictRaf == null) {
+ try {
+ initDictionaryAndPrefs();
+ } catch (Exception e) {
return;
}
searchText.addTextChangedListener(new SearchTextWatcher());
getListView().setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
- public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
+ public void onItemSelected(AdapterView<?> arg0, View arg1, int row,
long arg3) {
- lastSelectedRow = arg2;
- updateSearchText();
+ setSelectedRow(row);
}
public void onNothingSelected(AdapterView<?> arg0) {
}
});
-
- // Language button.
+
+ getListView().setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
+ public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int row,
+ long arg3) {
+ setSelectedRow(row);
+ return false;
+ }
+ });
+
+ final Button clearSearchTextButton = (Button) findViewById(R.id.ClearSearchTextButton);
+ clearSearchTextButton.setOnClickListener(new OnClickListener() {
+ public void onClick(View v) {
+ clearSearchTextButton.requestFocus();
+ searchText.setText("");
+ searchText.requestFocus();
+ }
+ });
+ clearSearchTextButton.setVisibility(PreferenceManager.getDefaultSharedPreferences(this).getBoolean(
+ getString(R.string.showClearSearchTextButtonKey), true) ? View.VISIBLE
+ : View.GONE);
+
final Button langButton = (Button) findViewById(R.id.LangButton);
langButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
onLanguageButton();
}
});
+
final Button upButton = (Button) findViewById(R.id.UpButton);
upButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
updateLangButton();
}
- private void initDictionaryAndPrefs() {
+ private void initDictionaryAndPrefs() throws Exception {
if (!prefsMightHaveChanged) {
return;
}
wordList = new File(prefs.getString(getString(R.string.wordListFileKey),
getString(R.string.wordListFileDefault)));
Log.d(LOG, "wordList=" + wordList);
+
+ saveOnlyFirstSubentry = prefs.getBoolean(getString(R.string.saveOnlyFirstSubentryKey), false);
final File dictFile = new File(prefs.getString(getString(R.string.dictFileKey),
getString(R.string.dictFileDefault)));
Log.d(LOG, "dictFile=" + dictFile);
+
+ try {
if (!dictFile.canRead()) {
- Log.w(LOG, "Unable to read dictionary file.");
- this.startActivity(new Intent(this, NoDictionaryActivity.class));
- finish();
+ throw new IOException("Unable to read dictionary file.");
}
-
- try {
- dictRaf = new RandomAccessFile(dictFile, "r");
- dictionary = new Dictionary(dictRaf);
- } catch (Exception e) {
+
+ dictRaf = new RandomAccessFile(dictFile, "r");
+ dictionary = new Dictionary(dictRaf);
+ } catch (IOException e) {
Log.e(LOG, "Couldn't open dictionary.", e);
- return;
+ this.startActivity(new Intent(this, NoDictionaryActivity.class));
+ finish();
+ throw new Exception(e);
}
-
+
final byte lang = prefs.getInt(PREF_DICT_ACTIVE_LANG, Entry.LANG1) == Entry.LANG1 ? Entry.LANG1
: Entry.LANG2;
-
+
languageList = new LanguageListAdapter(dictionary.languageDatas[lang]);
setListAdapter(languageList);
prefsMightHaveChanged = false;
super.onResume();
Log.d(LOG, "onResume:" + this);
- initDictionaryAndPrefs();
+ try {
+ initDictionaryAndPrefs();
+ } catch (Exception e) {
+ return;
+ }
final SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(this);
final String searchTextString = prefs
.getString(PREF_ACTIVE_SEARCH_TEXT, "");
searchText.setText(searchTextString);
- onSearchTextChange(searchTextString);
getListView().requestFocus();
+ onSearchTextChange(searchTextString);
}
@Override
dictRaf = null;
}
- public String getSelectedRowRawText() {
- final int row = getSelectedRow();
- return row < 0 ? "" : languageList.languageData
- .rowToString(languageList.languageData.rows.get(row));
+ public String getSelectedRowRawText(final boolean onlyFirstSubentry) {
+ final Row row = languageList.languageData.rows.get(getSelectedRow());
+ return languageList.languageData.rowToString(row, onlyFirstSubentry);
}
// ----------------------------------------------------------------
public boolean onMenuItemClick(final MenuItem menuItem) {
final Intent intent = new Intent().setClassName(AboutActivity.class
.getPackage().getName(), AboutActivity.class.getCanonicalName());
- final StringBuilder currentDictInfo = new StringBuilder();
+ final String currentDictInfo;
if (dictionary == null) {
- currentDictInfo.append(getString(R.string.noDictLoaded));
+ currentDictInfo = getString(R.string.noDictLoaded);
} else {
- currentDictInfo.append(dictionary.dictionaryInfo).append("\n\n");
- currentDictInfo.append("Entry count: " + dictionary.entries.size())
- .append("\n");
- for (int i = 0; i < 2; ++i) {
- final LanguageData languageData = dictionary.languageDatas[i];
- currentDictInfo.append(languageData.language.symbol).append(":\n");
- currentDictInfo.append(
- " Unique token count: " + languageData.sortedIndex.size())
- .append("\n");
- currentDictInfo.append(" Row count: " + languageData.rows.size())
- .append("\n");
- }
+ final LanguageData lang0 = dictionary.languageDatas[0];
+ final LanguageData lang1 = dictionary.languageDatas[1];
+ currentDictInfo = getString(R.string.aboutText, dictionary.dictionaryInfo, dictionary.entries.size(),
+ lang0.language.symbol, lang0.sortedIndex.size(), lang0.rows.size(),
+ lang1.language.symbol, lang1.sortedIndex.size(), lang1.rows.size());
}
intent.putExtra(AboutActivity.CURRENT_DICT_INFO, currentDictInfo
.toString());
final MenuItem download = menu.add(getString(R.string.downloadDictionary));
download.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(final MenuItem menuItem) {
+ prefsMightHaveChanged = true;
startDownloadDictActivity(DictionaryActivity.this);
return false;
}
}
void onUpButton() {
- final int destRowIndex = languageList.languageData.getPrevTokenRow(lastSelectedRow);
+ final int destRowIndex = languageList.languageData.getPrevTokenRow(getSelectedRow());
Log.d(LOG, "onUpButton, destRowIndex=" + destRowIndex);
jumpToRow(languageList, destRowIndex);
}
void onDownButton() {
- final int destRowIndex = languageList.languageData.getNextTokenRow(lastSelectedRow);
+ final int destRowIndex = languageList.languageData.getNextTokenRow(getSelectedRow());
Log.d(LOG, "onDownButton, destRowIndex=" + destRowIndex);
jumpToRow(languageList, destRowIndex);
}
new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(new Date()))
.append("\t");
rawText.append(word).append("\t");
- rawText.append(getSelectedRowRawText());
+ rawText.append(getSelectedRowRawText(saveOnlyFirstSubentry));
Log.d(LOG, "Writing : " + rawText);
try {
wordList.getParentFile().mkdirs();
}
Log.d(LOG, "Copy." + DictionaryActivity.this.getSelectedRow());
final StringBuilder result = new StringBuilder();
- result.append(getSelectedRowRawText());
+ result.append(getSelectedRowRawText(false));
final ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
clipboardManager.setText(result.toString());
Log.d(LOG, "Copied: " + result);
@Override
protected void onListItemClick(ListView l, View v, int row, long id) {
- Log.d(LOG, "Clicked: " + getSelectedRowRawText());
+ setSelectedRow(row);
openContextMenu(getListView());
}
return;
}
setSelection(rowIndex);
- lastSelectedRow = rowIndex; // TODO: find a way to delete this.
- updateSearchText();
+ setSelectedRow(rowIndex);
getListView().setSelected(true);
}
private int getSelectedRow() {
return lastSelectedRow;
}
+ private void setSelectedRow(final int row) {
+ lastSelectedRow = row;
+ Log.d(LOG, "Selected: " + getSelectedRowRawText(true));
+ updateSearchText();
+ }
private void updateSearchText() {
Log.d(LOG, "updateSearchText");
if (row == null) {
return result;
}
- result.setText(languageData.rowToString(row));
+ result.setText(languageData.rowToString(row, false));
result.setTextAppearance(parent.getContext(),
android.R.style.TextAppearance_Large);
result.setClickable(false);
import java.io.IOException;\r
import java.io.InputStream;\r
import java.net.URL;\r
+import java.net.URLConnection;\r
import java.util.concurrent.Executor;\r
import java.util.concurrent.Executors;\r
import java.util.concurrent.atomic.AtomicBoolean;\r
\r
String source;\r
String dest;\r
+ long bytesDownloaded = 0;\r
+ long contentLength = -1;\r
\r
private final Executor downloadExecutor = Executors.newSingleThreadExecutor();\r
private final Handler uiHandler = new Handler();\r
destTmpFile = File.createTempFile("dictionaryDownload", "tmp", destFile\r
.getParentFile());\r
final URL uri = new URL(source);\r
- in = uri.openStream();\r
+ final URLConnection connection = uri.openConnection();\r
+ contentLength = connection.getContentLength();\r
+ in = connection.getInputStream();\r
out = new FileOutputStream(destTmpFile);\r
} catch (Exception e) {\r
Log.e("THAD", "Error downloading file", e);\r
final Runnable runnable = new Runnable() {\r
public void run() {\r
try {\r
- long byteCount = 0;\r
+ bytesDownloaded = 0;\r
int bytesRead;\r
final byte[] bytes = new byte[1024 * 8];\r
int count = 0;\r
while ((bytesRead = in.read(bytes)) != -1 && !stop.get()) {\r
out.write(bytes, 0, bytesRead);\r
- byteCount += bytesRead;\r
+ bytesDownloaded += bytesRead;\r
if (count++ % 20 == 0) {\r
- setDownloadStatus(String.format(getString(R.string.downloading),\r
- byteCount));\r
+ setDownloadStatus(getString(R.string.downloading,\r
+ bytesDownloaded, contentLength));\r
}\r
}\r
in.close();\r
destFile.delete();\r
destTmpFile.renameTo(destFile);\r
} else {\r
- Log.d("THAD", "Stopped downloading file.");\r
+ Log.d("THAD", "Stopped downloading file.");\r
}\r
setDownloadStatus(String.format(getString(R.string.downloadFinished),\r
- byteCount));\r
+ bytesDownloaded));\r
} catch (IOException e) {\r
Log.e("THAD", "Error downloading file", e);\r
setDownloadStatus(String.format(getString(R.string.errorDownloadingFile), e.getLocalizedMessage()));\r
}\r
\r
private void setDownloadStatus(final String status) {\r
- final TextView downloadStatus = (TextView) findViewById(R.id.downloadStatus);\r
-// final ProgressBar progressBar = (ProgressBar) findViewById(R.id.downloadProgressBar);\r
uiHandler.post(new Runnable() {\r
public void run() {\r
+ final ProgressBar progressBar = (ProgressBar) findViewById(R.id.downloadProgressBar);\r
+ if (contentLength > 0) {\r
+ progressBar.setProgress((int) (bytesDownloaded * 100 / contentLength));\r
+ }\r
+ \r
+ final TextView downloadStatus = (TextView) findViewById(R.id.downloadStatus);\r
downloadStatus.setText(status);\r
}\r
});\r
\r
@Override\r
public String toString() {\r
- return getRawText();\r
+ return getRawText(false);\r
}\r
\r
public int getRowCount() {\r
return lang2;\r
}\r
\r
- String getRawText() {\r
+ String getRawText(boolean onlyFirstSubentry) {\r
final StringBuilder result = new StringBuilder();\r
- for (int i = 0; i < lang1.length; ++i) {\r
+ for (int i = 0; i < (onlyFirstSubentry ? 1 : lang1.length); ++i) {\r
result.append(i == 0 ? "" : " | ").append(lang1[i]);\r
}\r
result.append("\t");\r
- for (int i = 0; i < lang2.length; ++i) {\r
+ for (int i = 0; i < (onlyFirstSubentry ? 1 : lang2.length); ++i) {\r
result.append(i == 0 ? "" : " | ").append(lang2[i]);\r
}\r
return result.toString();\r
@Override\r
public void onCreate(final Bundle savedInstanceState) {\r
super.onCreate(savedInstanceState);\r
-\r
setContentView(R.layout.no_dictionary);\r
\r
- final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);\r
- final String dictFile = prefs.getString(getString(R.string.dictFileKey), getString(R.string.dictFileDefault));\r
-\r
- final boolean canReadDict = new File(dictFile).canRead();\r
- \r
- final TextView statusText = (TextView) findViewById(R.id.statusTextId);\r
- if (!canReadDict) {\r
- statusText.setText(String.format(getString(R.string.unableToReadDictionaryFile), dictFile));\r
- } else {\r
- statusText.setText(String.format(getString(R.string.unableToReadDictionaryFile), dictFile));\r
- }\r
-\r
final Button downloadButton = (Button) findViewById(R.id.downloadDict);\r
downloadButton.setOnClickListener(new OnClickListener() {\r
public void onClick(View arg0) {\r
}});\r
\r
final Button launchButton = (Button) findViewById(R.id.launchDict);\r
- launchButton.setEnabled(canReadDict);\r
launchButton.setOnClickListener(new OnClickListener() {\r
public void onClick(View arg0) {\r
startActivity(new Intent(NoDictionaryActivity.this, DictionaryActivity.class));\r
}});\r
-}\r
+ }\r
+\r
+ @Override\r
+ protected void onResume() {\r
+ super.onResume();\r
\r
+ final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);\r
+ final String dictFile = prefs.getString(getString(R.string.dictFileKey), getString(R.string.dictFileDefault));\r
+ final boolean canReadDict = new File(dictFile).canRead();\r
+\r
+ final TextView statusText = (TextView) findViewById(R.id.statusTextId);\r
+ if (!canReadDict) {\r
+ statusText.setText(String.format(getString(R.string.unableToReadDictionaryFile), dictFile));\r
+ } else {\r
+ statusText.setText(String.format(getString(R.string.unableToReadDictionaryFile), dictFile));\r
+ }\r
+\r
+ final Button launchButton = (Button) findViewById(R.id.launchDict);\r
+ launchButton.setEnabled(canReadDict);\r
+\r
+ }\r
+ \r
}\r