<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hughes.android.dictionary"
android:installLocation="auto"
- android:versionCode="21"
- android:versionName="3.3" >
+ android:versionCode="22"
+ android:versionName="4.0" >
<uses-sdk
android:minSdkVersion="4"
<body>
<!-- Don't use links in the text below, it crashes the app. -->
<h2>Dictionary data</h2>
-Most dictionary data comes from http://wiktionary.org (mostly from
-en.wiktionary.org). If you want to add or fix an entry, please do
-it there.
+Most dictionary data comes from http://wiktionary.org.
+If you want to add or fix an entry, please do it there.
<h2>Important notes</h2>
<ul>
<li>If QuickDic seems to crash when opening a dictionary
<ul>
<li>Type a single word to search for it. QuickDic searches as you
type, jumping to the relevant position in the list.</li>
-<li>(NEW) Type multiple words separated by spaces. QuickDic finds
+<li>Type multiple words separated by spaces. QuickDic finds
all the rows containing all of the words and displays them.</li>
<li>QuickDic tries to sort words using a romanized transliteration,
so you can try searching for non-Latin words using the Latin
<ul>
<li>Click the button to the right of the search box to switch
dictionary directions: EN->DE to DE->EN.</li>
-<li>(NEW) Long-click the button to the right of the search box to
+<li>Long-click the button to the right of the search box to
pick a new dictionary.</li>
<li>Long-click any entry to bring up the context menu, from which
you can:
</head>
<body>
<!-- Don't use links in the text below, it crashes the app. -->
-Thanks for updating to QuickDic 3.3.
+Thanks for updating to QuickDic 4.0.
<p>New features:</p>
<ul>
<li>If QuickDic crashes on your device (especially Sony Ericsson
devices), try using QuickDic's preferences to change to the "System
default" font.</li>
-<li>Updated all dictionaries with new enwiktionary data.</li>
-<li>Several non-English dictionaries available for download
-(probably lower quality but perhaps useful, in beta):
-<ul>
-<li>Arabic-Chinese|Mandarin|Cantonese</li>
-<li>Arabic-French</li>
-<li>Arabic-German</li>
-<li>Arabic-Hebrew</li>
-<li>Arabic-Italian</li>
-<li>Arabic-Japanese</li>
-<li>Arabic-Russian</li>
-<li>Arabic-Spanish</li>
-<li>Bulgarian-French</li>
-<li>Catalan-German</li>
-<li>Czech-French</li>
-<li>Czech-German</li>
-<li>English-Afrikaans</li>
-<li>English-Albanian</li>
-<li>English-Arabic</li>
-<li>English-Armenian</li>
-<li>English-Azeri</li>
-<li>English-Basque</li>
-<li>English-Belarusian</li>
-<li>English-Bengali</li>
-<li>English-Bosnian</li>
-<li>English-Breton</li>
-<li>English-Bulgarian</li>
-<li>English-Burmese</li>
-<li>English-Catalan</li>
-<li>English-Chinese|Mandarin|Cantonese</li>
-<li>English-Croatian</li>
-<li>English-Czech</li>
-<li>English-Danish</li>
-<li>English-Dutch</li>
-<li>English-Esperanto</li>
-<li>English-Estonian</li>
-<li>English-Faroese</li>
-<li>English-Finnish</li>
-<li>English-French</li>
-<li>English-Gaelic</li>
-<li>English-Galician</li>
-<li>English-Georgian</li>
-<li>English-Greek</li>
-<li>English-Haitian Creole</li>
-<li>English-Hawaiian</li>
-<li>English-Hebrew</li>
-<li>English-Hindi</li>
-<li>English-Hungarian</li>
-<li>English-Icelandic</li>
-<li>English-Indonesian</li>
-<li>English-Irish</li>
-<li>English-Italian</li>
-<li>English-Japanese</li>
-<li>English-Korean</li>
-<li>English-Kurdish</li>
-<li>English-Latin</li>
-<li>English-Latvian</li>
-<li>English-Lithuanian</li>
-<li>English-Luxembourgish</li>
-<li>English-Macedonian</li>
-<li>English-Malay</li>
-<li>English-Maori</li>
-<li>English-Mongolian</li>
-<li>English-Nepali</li>
-<li>English-Norwegian</li>
-<li>English-Persian</li>
-<li>English-Polish</li>
-<li>English-Portuguese</li>
-<li>English-Punjabi</li>
-<li>English-Romanian</li>
-<li>English-Russian</li>
-<li>English-Sanskrit</li>
-<li>English-Serbian</li>
-<li>English-Slovak</li>
-<li>English-Somali</li>
-<li>English-Spanish</li>
-<li>English-Swahili</li>
-<li>English-Swedish</li>
-<li>English-Tagalog</li>
-<li>English-Tajik</li>
-<li>English-Thai</li>
-<li>English-Tibetan</li>
-<li>English-Turkish</li>
-<li>English-Ukrainian</li>
-<li>English-Urdu</li>
-<li>English-Vietnamese</li>
-<li>English-Welsh</li>
-<li>English-Yiddish</li>
-<li>English-Zulu</li>
-<li>Finnish-Norwegian</li>
-<li>Finnish-Swedish</li>
-<li>French-Chinese|Mandarin|Cantonese</li>
-<li>French-Dutch</li>
-<li>French-Italian</li>
-<li>French-Japanese</li>
-<li>French-Latin</li>
-<li>French-Russian</li>
-<li>German-Chinese|Mandarin|Cantonese</li>
-<li>German-English</li>
-<li>German-Esperanto</li>
-<li>German-French</li>
-<li>German-Hungarian</li>
-<li>German-Italian</li>
-<li>German-Japanese</li>
-<li>German-Latin</li>
-<li>German-Polish</li>
-<li>German-Russian</li>
-<li>German-Spanish</li>
-<li>German-Swedish</li>
-<li>Greek-Italian</li>
-<li>Hungarian-Italian</li>
-<li>Italian-Chinese|Mandarin|Cantonese</li>
-<li>Italian-Dutch</li>
-<li>Italian-Japanese</li>
-<li>Italian-Latin</li>
-<li>Italian-Latvian</li>
-<li>Italian-Polish</li>
-<li>Italian-Russian</li>
-<li>Italian-Swedish</li>
-<li>Japanese-Chinese|Mandarin|Cantonese</li>
-<li>Korean-Chinese|Mandarin|Cantonese</li>
-<li>Norwegian-Swedish</li>
-<li>Spanish-Chinese|Mandarin|Cantonese</li>
-<li>Spanish-French</li>
-<li>Spanish-Italian</li>
+<li>(BETA) Single-language dictionaries for English, German, Italian, and French (French is ALPHA quality).</li>
+<li>Detail pages showing more Wiktionary information about the word, including Italian verb conjugations.</li>
+<li>Started parsing Wiktionary data from de.wiktionary.org and it.wiktionary.org for better coverage of those languages.</li>
+<li>Updated all dictionaries with latest Wiktionary data.</li>
+<li>Simple text-to-speech pronunciations for main rows.</li>
+<li>Several new dictionaries, by request.</li>
</ul>
</li>
</ul>
<string name="app_name">QuickDic</string>
- <string name="titleWithVersion">QuickDic 3.3</string>
+ <string name="titleWithVersion">QuickDic 4.0</string>
<!-- Global. -->
<string name="about">Über QuickDic…</string>
<string name="managerFilterText">Filter</string>
<string name="managerFilterCheckbox">Nur SD-Karte</string>
- <string name="thanksForUpdatingVersion">3.3_de_a</string>
+ <string name="thanksForUpdatingVersion">4.0_de_a</string>
<!-- DictionaryActivity -->
<string name="searchText">Suchtext</string>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">QuickDic</string>
-<string name="titleWithVersion">QuickDic 3.3</string>
+<string name="titleWithVersion">QuickDic 4.0</string>
<!-- Global. -->
<string name="about">About QuickDic…</string>
<string name="preferences">Preferenze…</string>
<!-- Default: dark theme -->
<style name="Theme.Default" parent="@android:style/Theme.Holo">
- <item name="android:textColorLink">#FFFFFF</item>
+ <item name="android:textColorLink">#0000FF</item>
</style>
<!-- ****************************************************************** -->
<style name="Theme.Light" parent="@android:style/Theme.Holo.Light">
- <item name="android:textColorLink">#000000</item>
+ <item name="android:textColorLink">#0000FF</item>
</style>
<string name="app_name">QuickDic</string>
- <string name="titleWithVersion">QuickDic 3.3</string>
+ <string name="titleWithVersion">QuickDic 4.0</string>
<!-- Global. -->
<string name="about">About QuickDic…</string>
<string name="managerFilterCheckbox">Local only</string>
- <string name="thanksForUpdatingVersion">3.3_en_e</string>
+ <string name="thanksForUpdatingVersion">4.0_en_a</string>
<!-- DictionaryActivity -->
<string name="searchText">Search Text</string>
import android.text.Spannable;
import android.text.TextWatcher;
import android.text.method.LinkMovementMethod;
+import android.text.style.ClickableSpan;
import android.text.style.StyleSpan;
import android.util.Log;
import android.util.TypedValue;
final TextViewLongClickListener textViewLongClickListenerIndex0 = new TextViewLongClickListener(
0);
textView.setOnLongClickListener(textViewLongClickListenerIndex0);
+ result.setLongClickable(true);
// Doesn't work:
// textView.setTextColor(android.R.color.secondary_text_light);
tableRow.addView(textView);
if (!htmlEntries.isEmpty()) {
- final ImageButton button = new ImageButton(context);
- button.setImageResource(R.drawable.ic_menu_forward);
- button.setOnClickListener(new OnClickListener() {
+ final ClickableSpan clickableSpan = new ClickableSpan() {
+ @Override
+ public void onClick(View widget) {
+ }
+ };
+ ((Spannable) textView.getText()).setSpan(clickableSpan, 0, text.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
+ result.setClickable(true);
+ textView.setClickable(true);
+ textView.setMovementMethod(LinkMovementMethod.getInstance());
+ textView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
final String html = HtmlEntry.htmlBody(htmlEntries, index.shortName);
0);
}
});
- tableRow.addView(button);
- lp = new TableRow.LayoutParams(1);
- lp.weight = 0.0f;
- button.setLayoutParams(lp);
- // result.setColumnStretchable(0, true);
- // result.setColumnStretchable(1, false);
}
- result.setLongClickable(true);
return result;
}
import android.util.Log;\r
import android.view.View;\r
import android.view.View.OnClickListener;\r
-import android.webkit.WebView;\r
import android.widget.Button;\r
\r
import com.hughes.util.StringUtil;\r
package com.hughes.android.dictionary.engine;
import android.content.Intent;
+import android.net.Uri;
import com.hughes.android.dictionary.C;
import com.hughes.util.StringUtil;
import java.io.IOException;
import java.io.PrintStream;
import java.io.RandomAccessFile;
+import java.io.UnsupportedEncodingException;
+import java.net.URI;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
import java.util.List;
import java.util.regex.Pattern;
public static String formatQuickdicUrl(final String indexShortName, final String text) {
assert !indexShortName.contains(":");
assert text.length() > 0;
- return String.format("qd:%s:%s", indexShortName, text);
+ try {
+ return String.format("qd:%s:%s", indexShortName, URLEncoder.encode(text, "UTF-8"));
+ } catch (UnsupportedEncodingException e) {
+ throw new RuntimeException(e);
+ }
}
public static boolean isQuickdicUrl(String url) {
if (firstColon == -1) return;
int secondColon = url.indexOf(":", firstColon + 1);
if (secondColon == -1) return;
- intent.putExtra(C.SEARCH_TOKEN, url.substring(secondColon + 1));
+ intent.putExtra(C.SEARCH_TOKEN, Uri.decode(url.substring(secondColon + 1)));
}
}
public class NonLinkClickableSpan extends ClickableSpan {
- static NonLinkClickableSpan instance = new NonLinkClickableSpan();
+ public static final NonLinkClickableSpan instance = new NonLinkClickableSpan();
// Won't see these on a long-click.
@Override