+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal" >
-
- <LinearLayout
- android:id="@+id/dictionaryLauncherButtons"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:paddingRight="5dip" >
- </LinearLayout>
-
- <TextView
- android:id="@+id/dictionaryName"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="English-German"
- android:textAppearance="?android:attr/textAppearanceLarge"
- tools:ignore="HardcodedText" />
- </LinearLayout>
-
- <TextView
- android:id="@+id/dictionaryDetails"
- android:layout_width="fill_parent"
- android:layout_height="0dip"
- android:layout_weight="1"
- android:text="@string/indexInfo"
- android:textAppearance="?android:attr/textAppearanceSmall"
- tools:ignore="HardcodedText" />
-
-</LinearLayout>
\ No newline at end of file
android:showAsAction="always"
android:actionViewClass="com.actionbarsherlock.widget.SearchView" />
- <item
- android:id="@+id/action_settings"
- android:orderInCategory="100"
- android:showAsAction="never"
- android:title="@string/settings"/>
-
</menu>
\ No newline at end of file
<string name="FI">Finnisch</string>
<string name="FR">Französisch</string>
<string name="GD">Schottisch-Gälisch</string>
+ <string name="GV">Manx</string>
<string name="DE">Deutsch</string>
<string name="EL">Griechisch</string>
<string name="grc">Altgriechisch</string>
<!-- About dictionary. -->
<string name="dictionaryPath">Datei: %s</string>
- <string name="dictionarySize">Grosse: %,d bytes</string>
+ <string name="dictionarySize">Größe: %,d bytes</string>
<string name="dictionaryCreationTime">Hergestellt: %tc</string>
<string name="indexName">Index: %s</string>
<string name="mainTokenCount">Wortzahl: %,d</string>
<string name="openingConnection">Verbindungsaufbau…</string>
<string name="downloading">Herunterladen: %1$,d von %2$,d Bytes.</string>
<string name="unzipping">Entpackung: %1$,d von %2$,d Bytes.</string>
- <string name="downloadFinished">Fertig: %,d Bytes.</string>
+ <string name="downloadFinished">Fertig: \n%s.</string>
<string name="errorDownloadingFile">"Fehler beim Herunterladen: \n%s"</string>
<!-- Preferences -->
<string name="CA">Catalán</string>
<string name="CS">Checo</string>
<string name="ZH">Chino (Mandarín)</string>
+ <string name="cmn">Mandarín</string>
<string name="DA">Danés</string>
<string name="NL">Holandés</string>
<string name="EN">Inglés</string>
<string name="FI">Finés</string>
<string name="FR">Francés</string>
<string name="GD">Gaélico escocés</string>
+ <string name="GV">Manx</string>
<string name="DE">Alemán</string>
<string name="EL">Griego</string>
<string name="grc">Griego Antiguo</string>
<string name="managerFilterText">Listar filtro</string>
<string name="managerFilterCheckbox">Sólo local</string>
+ <!-- Download. -->
+ <string name="downloadFinished">Terminado: \n%s.</string>
+ <string name="downloadFailed">Error descargando archivo: \n%s</string>
<string name="thanksForUpdatingVersion">4.0.1_en_a</string>
<string name="license">QuickDic contiene código con derechos de autor de Google y publicado bajo la licencia Apache 2.0.</string>
<string name="licenseUrl">http://www.apache.org/licenses/LICENSE-2.0</string>
-
- <!-- Download. -->
- <string name="openingConnection">Abriendo conexión…</string>
- <string name="downloading">Descargando: %1$,d of %2$,d bytes.</string>
- <string name="unzipping">Descomprimiendo: %1$,d of %2$,d bytes.</string>
- <string name="downloadFinished">Terminado: %,d bytes.</string>
- <string name="errorDownloadingFile">Error descargando archivo: \n%s</string>
-
<!-- Preferences -->
<string name="themeKey">theme</string>
<string name="themeTitle">Tema</string>
- <string name="themeSummary">Color y tema del interfaz de usuario.</string>
+ <string name="themeSummary">Color y tema de la interfaz de usuario.</string>
</resources>
<string name="FI">Finlandese</string>
<string name="FR">Francese</string>
<string name="GD">Gaelico scozzese</string>
+ <string name="GV">Manx</string>
<string name="DE">Tedesco</string>
<string name="EL">Greco</string>
<string name="grc">Greco antico</string>
<string name="openingConnection">Apertura connessione…</string>
<string name="downloading">Downloading: %1$,d of %2$,d bytes.</string>
<string name="unzipping">Decompressione: %1$,d of %2$,d bytes.</string>
-<string name="downloadFinished">Terminato: %,d bytes.</string>
-<string name="errorDownloadingFile">Errore nel dowload del file: \n%s</string>
+<string name="downloadFinished">Terminato: \n%s.</string>
+<string name="downloadFailed">Errore nel dowload del file: \n%s</string>
<!-- Preferences -->
<string name="quickdicDirectoryKey">QuickDic Directory</string>
<string name="quickdicDirectoryTitle">QuickDic Directory</string>
<string name="noDictionariesOnDevice">No dictionaries on device</string>
<string name="downloadableDictionaries">Downloadable dictionaries</string>
<string name="downloadButton">%.1fMB</string>
+ <string name="updateAvailable">UPDATE!</string>
<string name="moveToTop">Move to top</string>
<string name="deleteDictionary">Delete dictionary</string>
<string name="indexInfo">%1$s: %2$,d words</string>
<string name="managerFilterText">List filter</string>
<string name="managerShow">Show</string>
<string name="managerHide">Hide</string>
+
+ <string name="error">Error</string>
+ <string name="unableToReadDictionaryDir">Unable to read dictionary directory: \n%1$s\n\nAndroid external storage directory: \n%2$s</string>
+
+ <!-- Download. -->
+ <string name="downloadFinished">Download finished: \n%s.</string>
+ <string name="downloadFailed">Download failed: \n%s.</string>
+
+
<string name="thanksForUpdatingVersion">4.0.1_en_a</string>
<string name="sources">Sources</string>
<string name="sourceInfo">%1$s : %2$,d entries</string>
-
<!-- About. -->
<string name="thadHughes">Thad Hughes</string>
<string name="licenseUrl">http://www.apache.org/licenses/LICENSE-2.0</string>
- <!-- Download. -->
- <string name="downloadFinished">Download finished: \n%s.</string>
- <string name="downloadFailed">Download failed: \n%s.</string>
-
-
<!-- Preferences -->
<string name="defaultDicKey">defaultddic</string>
<string name="quickdicDirectoryKey">quickdicDirectory</string>
<string name="quickdicDirectoryTitle">QuickDic directory</string>
- <string name="quickdicDirectorySummary">The directory where QuickDic stores dictionaries.</string>
- <string name="quickdicDirectoryDefault">/sdcard/quickDic/</string>
+ <string name="quickdicDirectorySummary">The directory where QuickDic stores dictionaries (empty for default quickDic folder on external storage).</string>
<string name="wordListFileKey">wordListFile</string>
<string name="wordListFileTitle">Word list file</string>
<string name="clickOpensContextMenuTitle">Click opens context menu</string>
<string name="clickOpensContextMenuSummary">Open context menu for clicks on entries (long-click will always open-context menu).</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="showPrevNextButtonsKey">showPrevNextButtons</string>
<string name="showPrevNextButtonsTitle">Show up/down buttons</string>
<string name="showPrevNextButtonsSummary">Show or hide the previous and next word buttons in the dictionary view.</string>
android:key="@string/quickdicDirectoryKey"\r
android:title="@string/quickdicDirectoryTitle" \r
android:summary="@string/quickdicDirectorySummary"\r
- android:defaultValue="@string/quickdicDirectoryDefault"\r
+ android:defaultValue=""\r
android:persistent="true"\r
/>\r
\r
public void onCreate(Bundle savedInstanceState) {
Log.d(LOG, "onCreate:" + this);
super.onCreate(savedInstanceState);
-
+
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// Don't auto-launch if this fails.
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.net.Uri;
+import android.os.Environment;
import android.preference.PreferenceManager;
import android.util.Log;
import android.util.TypedValue;
languageButtonPixels = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 60, getResources().getDisplayMetrics());
-
// Load the dictionaries we know about.
dictionaryConfig = PersistentObjectCache.init(getApplicationContext()).read(
}
public synchronized File getDictDir() {
- // This metaphore doesn't work, because we've already reset prefsMightHaveChanged.
+ // This metaphor doesn't work, because we've already reset prefsMightHaveChanged.
// if (dictDir == null || PreferenceActivity.prefsMightHaveChanged) {
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
- final String dir = prefs.getString(getString(R.string.quickdicDirectoryKey), getString(R.string.quickdicDirectoryDefault));
+ final File defaultDictDir = new File(Environment.getExternalStorageDirectory(), "quickDic");
+ String dir = prefs.getString(getString(R.string.quickdicDirectoryKey), defaultDictDir.getAbsolutePath());
+ if (dir.isEmpty()) {
+ dir = defaultDictDir.getAbsolutePath();
+ }
dictDir = new File(dir);
dictDir.mkdirs();
-// }
- return dictDir;
+ return dictDir;
}
public C.Theme getSelectedTheme() {
package com.hughes.android.dictionary;
+import android.app.AlertDialog;
+import android.app.Dialog;
import android.app.DownloadManager;
import android.app.DownloadManager.Request;
import android.content.BroadcastReceiver;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
+import android.widget.ListView;
import android.widget.Toast;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.LinearLayout;
return intent;
}
+ @Override
public void onCreate(Bundle savedInstanceState) {
setTheme(((DictionaryApplication) getApplication()).getSelectedTheme().themeId);
Log.d(LOG, "onCreate:" + this);
application = (DictionaryApplication) getApplication();
-
+
+ blockAutoLaunch = false;
+
// UI init.
setContentView(R.layout.dictionary_manager_activity);
dictionariesOnDeviceHeaderRow = (LinearLayout) LayoutInflater.from(getListView().getContext()).inflate(
- R.layout.dictionaries_on_device_header_row, getListView(), false);
+ R.layout.dictionary_manager_header_row_on_device, getListView(), false);
downloadableDictionariesHeaderRow = (LinearLayout) LayoutInflater.from(getListView().getContext()).inflate(
- R.layout.downloadable_dictionaries_header_row, getListView(), false);
+ R.layout.dictionary_manager_header_row_downloadable, getListView(), false);
showDownloadable = (ToggleButton) downloadableDictionariesHeaderRow.findViewById(R.id.hideDownloadable);
showDownloadable.setOnCheckedChangeListener(new OnCheckedChangeListener() {
}
});
- blockAutoLaunch = false;
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
final String thanksForUpdatingLatestVersion = getString(R.string.thanksForUpdatingVersion);
if (!prefs.getString(C.THANKS_FOR_UPDATING_VERSION, "").equals(
setListAdapater();
registerForContextMenu(getListView());
+
+ final File dictDir = application.getDictDir();
+ if (!dictDir.canRead() || !dictDir.canExecute()) {
+ blockAutoLaunch = true;
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(getListView().getContext());
+ builder.setTitle(getString(R.string.error));
+ builder.setMessage(getString(
+ R.string.unableToReadDictionaryDir,
+ dictDir.getAbsolutePath(),
+ Environment.getExternalStorageDirectory()));
+ builder.create().show();
+ }
}
@Override
public void onDestroy() {
+ super.onDestroy();
unregisterReceiver(broadcastReceiver);
}
if (convertView instanceof LinearLayout &&
convertView != dictionariesOnDeviceHeaderRow &&
convertView != downloadableDictionariesHeaderRow) {
+ /* This is done to try to avoid leaking memory that used to
+ * happen on Android 4.0.3 */
((LinearLayout)convertView).removeAllViews();
}
if (row.dictionaryInfo == null) {
return dictionariesOnDeviceHeaderRow;
}
- return createDictionaryRow(row.dictionaryInfo,
- parent, R.layout.dictionaries_on_device_row, true);
+ return createDictionaryRow(row.dictionaryInfo, parent, true);
}
if (row.dictionaryInfo == null) {
return downloadableDictionariesHeaderRow;
}
- return createDictionaryRow(row.dictionaryInfo,
- parent, R.layout.downloadable_dictionary_row, false);
+ return createDictionaryRow(row.dictionaryInfo, parent, false);
}
}
setListAdapter(new MyListAdapter(filters));
}
- private View createDictionaryRow(final DictionaryInfo dictionaryInfo, final ViewGroup parent,
- final int viewResource, final boolean canLaunch) {
+ private View createDictionaryRow(final DictionaryInfo dictionaryInfo,
+ final ViewGroup parent, final boolean canLaunch) {
View row = LayoutInflater.from(parent.getContext()).inflate(
- viewResource, parent, false);
+ R.layout.dictionary_manager_row, parent, false);
final TextView name = (TextView) row.findViewById(R.id.dictionaryName);
final TextView details = (TextView) row.findViewById(R.id.dictionaryDetails);
name.setText(application.getDictionaryName(dictionaryInfo.uncompressedFilename));
- if (!canLaunch) {
- final Button downloadButton = (Button) row.findViewById(R.id.downloadButton);
- downloadButton.setText(getString(R.string.downloadButton, dictionaryInfo.zipBytes / 1024.0 / 1024.0));
+ final boolean updateAvailable = application.updateAvailable(dictionaryInfo);
+ final Button downloadButton = (Button) row.findViewById(R.id.downloadButton);
+ if (!canLaunch || updateAvailable) {
+ downloadButton.setText(getString(R.string.downloadButton, application.getDownloadable(dictionaryInfo.uncompressedFilename).zipBytes / 1024.0 / 1024.0));
downloadButton.setMinWidth(application.languageButtonPixels * 3 / 2);
downloadButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
- DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
- Request request = new Request(
- Uri.parse(dictionaryInfo.downloadUrl));
- try {
- final String destFile = new File(new URL(dictionaryInfo.downloadUrl).getFile()).getName();
- Log.d(LOG, "Downloading to: " + destFile);
-
- request.setDestinationUri(Uri.fromFile(new File(Environment.getExternalStorageDirectory(), destFile)));
- } catch (MalformedURLException e) {
- throw new RuntimeException(e);
- }
- downloadManager.enqueue(request);
+ downloadDictionary(dictionaryInfo);
}
});
+ } else {
+ downloadButton.setVisibility(View.INVISIBLE);
}
- final StringBuilder builder = new StringBuilder();
LinearLayout buttons = (LinearLayout) row.findViewById(R.id.dictionaryLauncherButtons);
final List<IndexInfo> sortedIndexInfos = application.sortedIndexInfos(dictionaryInfo.indexInfos);
+ final StringBuilder builder = new StringBuilder();
+ if (updateAvailable) {
+ builder.append(getString(R.string.updateButton));
+ }
for (IndexInfo indexInfo : sortedIndexInfos) {
final View button = application.createButton(buttons.getContext(), dictionaryInfo, indexInfo);
buttons.addView(button);
return row;
}
+
+ private void downloadDictionary(final DictionaryInfo dictionaryInfo) {
+ DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
+ Request request = new Request(
+ Uri.parse(dictionaryInfo.downloadUrl));
+ try {
+ final String destFile = new File(new URL(dictionaryInfo.downloadUrl).getFile()).getName();
+ Log.d(LOG, "Downloading to: " + destFile);
+
+ request.setDestinationUri(Uri.fromFile(new File(Environment.getExternalStorageDirectory(), destFile)));
+ } catch (MalformedURLException e) {
+ throw new RuntimeException(e);
+ }
+ downloadManager.enqueue(request);
+ }
}
-* Application: fix which directory the thing uses: use default SD card instead of what's in prefs.
-* Show download button when dictionaries can be updated.
-* Text rows are too tall.
\ No newline at end of file
+* Contributions from:
+* Unable to read quickdic dir message.
+* HtmlEntries inline, expandable.
\ No newline at end of file