From: Dominik Köppl Date: Thu, 11 Jul 2013 13:20:23 +0000 (+0200) Subject: Added intent framework X-Git-Url: http://gitweb.fperrin.net/?p=Dictionary.git;a=commitdiff_plain;h=25ea6e908f9d0d78bf6ad789aa2ecc66700e2087 Added intent framework --- diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 0c8e8ac..6f90cc4 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -35,8 +35,39 @@ + + - + + + + + + + + + + + + + + + + + + @@ -46,4 +77,7 @@ android:configChanges="keyboardHidden|orientation" /> + + + \ No newline at end of file diff --git a/res/values-es/languages.xml b/res/values-es/languages.xml index 191f376..027b68e 100644 --- a/res/values-es/languages.xml +++ b/res/values-es/languages.xml @@ -12,7 +12,6 @@ Burmese Cantonés Catalán - Croata Checo Chino (Mandarín) Danés diff --git a/res/values/strings.xml b/res/values/strings.xml index b9f3f17..ef7d8bd 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -13,6 +13,10 @@ Detected font problem (common on Sony Ericsson devices), switching back to default font. + Please specify a default directory in the settings. + + + Dictionary manager Long-press a dictionary for more options. @@ -75,10 +79,19 @@ Unzipping: %1$,d of %2$,d bytes. Finished: %,d bytes. Error downloading file: \n%s - + + + An unknown word + + + defaultddic + Default Dic + The directory to fired up when nothing else mentioned. + + quickdicDirectory QuickDic directory The directory where QuickDic stores dictionaries. diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index f331dfb..a57dece 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -1,5 +1,13 @@ + + + + + \ No newline at end of file diff --git a/src/com/hughes/android/dictionary/DictionaryActivity.java b/src/com/hughes/android/dictionary/DictionaryActivity.java index f432a8f..991e87b 100644 --- a/src/com/hughes/android/dictionary/DictionaryActivity.java +++ b/src/com/hughes/android/dictionary/DictionaryActivity.java @@ -1,5 +1,5 @@ // Copyright 2011 Google Inc. All Rights Reserved. -// +// Some Parts Copyright 2013 Dominik Köppl // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at @@ -14,9 +14,34 @@ package com.hughes.android.dictionary; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.RandomAccessFile; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Locale; +import java.util.Random; +import java.util.Set; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import android.app.AlertDialog; import android.app.Dialog; import android.app.ListActivity; +import android.app.SearchManager; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Color; @@ -81,28 +106,6 @@ import com.hughes.android.util.IntentLauncher; import com.hughes.android.util.NonLinkClickableSpan; import com.hughes.util.StringUtil; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; -import java.io.RandomAccessFile; -import java.text.SimpleDateFormat; -import java.util.Arrays; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Locale; -import java.util.Random; -import java.util.Set; -import java.util.concurrent.Executor; -import java.util.concurrent.Executors; -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - public class DictionaryActivity extends ListActivity { static final String LOG = "QuickDic"; @@ -212,15 +215,101 @@ public class DictionaryActivity extends ListActivity { theme = application.getSelectedTheme(); textColorFg = getResources().getColor(theme.tokenRowFgColor); + + final Intent intent = getIntent(); - dictFile = new File(intent.getStringExtra(C.DICT_FILE)); + String intentAction = intent.getAction(); + /** + * @author Dominik Köppl + * Querying the Intent + * com.hughes.action.ACTION_SEARCH_DICT is the advanced query + * Arguments: + * SearchManager.QUERY -> the phrase to search + * from -> language in which the phrase is written + * to -> to which language shall be translated + */ + if(intentAction != null && intentAction.equals("com.hughes.action.ACTION_SEARCH_DICT")) + { + String query = intent.getStringExtra(SearchManager.QUERY); + String from = intent.getStringExtra("from"); + if(from != null) from = from.toLowerCase(Locale.US); + String to = intent.getStringExtra("to"); + if(to != null) to = to.toLowerCase(Locale.US); + if(query != null) + { + getIntent().putExtra(C.SEARCH_TOKEN, query); + } + if(intent.getStringExtra(C.DICT_FILE) == null && (from != null || to != null)) + { + Log.d(LOG, "DictSearch: from: " + from + " to " + to); + List dicts = application.getUsableDicts(); + for(DictionaryInfo info : dicts) + { + boolean hasFrom = from == null; + boolean hasTo = to == null; + for(IndexInfo index : info.indexInfos) + { + if(!hasFrom && index.shortName.toLowerCase(Locale.US).equals(from)) hasFrom = true; + if(!hasTo && index.shortName.toLowerCase(Locale.US).equals(to)) hasTo = true; + } + if(hasFrom && hasTo) + { + if(from != null) + { + int which_index = 0; + for(;which_index < info.indexInfos.size(); ++which_index) + { + if(info.indexInfos.get(which_index).shortName.toLowerCase(Locale.US).equals(from)) + break; + } + intent.putExtra(C.INDEX_INDEX, which_index); + + } + intent.putExtra(C.DICT_FILE, application.getPath(info.uncompressedFilename).toString()); + break; + } + } + + } + } + /** + * @author Dominik Köppl + * Querying the Intent + * Intent.ACTION_SEARCH is a simple query + * Arguments follow from android standard (see documentation) + */ + if (intentAction != null && intentAction.equals(Intent.ACTION_SEARCH)) + { + String query = intent.getStringExtra(SearchManager.QUERY); + if(query != null) getIntent().putExtra(C.SEARCH_TOKEN,query); + } + /** + * @author Dominik Köppl + * If no dictionary is chosen, use the default dictionary specified in the preferences + * If this step does fail (no default directory specified), show a toast and abort. + */ + if(intent.getStringExtra(C.DICT_FILE) == null) + { + String dictfile = prefs.getString(getString(R.string.defaultDicKey), null); + if(dictfile != null) intent.putExtra(C.DICT_FILE, application.getPath(dictfile).toString()); + } + String dictFilename = intent.getStringExtra(C.DICT_FILE); + + if(dictFilename == null) + { + Toast.makeText(this, getString(R.string.no_dict_file), Toast.LENGTH_LONG).show(); + startActivity(DictionaryManagerActivity.getLaunchIntent()); + finish(); + return; + } + if(dictFilename != null) dictFile = new File(dictFilename); ttsReady = false; textToSpeech = new TextToSpeech(getApplicationContext(), new OnInitListener() { @Override public void onInit(int status) { ttsReady = true; - updateTTSLanuage(); + updateTTSLanguage(); } }); @@ -416,6 +505,9 @@ public class DictionaryActivity extends ListActivity { Log.d(LOG, "wordList=" + wordList + ", saveOnlyFirstSubentry=" + saveOnlyFirstSubentry); setDictionaryPrefs(this, dictFile, indexIndex, searchText.getText().toString()); + + + } @Override @@ -514,10 +606,10 @@ public class DictionaryActivity extends ListActivity { // langButton.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); langButton.setText(index.shortName); // } - updateTTSLanuage(); + updateTTSLanguage(); } - private void updateTTSLanuage() { + private void updateTTSLanguage() { if (!ttsReady || index == null || textToSpeech == null) { Log.d(LOG, "Can't updateTTSLanguage."); return; diff --git a/src/com/hughes/android/dictionary/PreferenceActivity.java b/src/com/hughes/android/dictionary/PreferenceActivity.java index b179c3f..343deda 100644 --- a/src/com/hughes/android/dictionary/PreferenceActivity.java +++ b/src/com/hughes/android/dictionary/PreferenceActivity.java @@ -14,19 +14,44 @@ package com.hughes.android.dictionary; +import java.util.List; + import android.os.Bundle; +import android.preference.ListPreference; public class PreferenceActivity extends android.preference.PreferenceActivity { static boolean prefsMightHaveChanged = false; @SuppressWarnings("deprecation") -@Override + @Override public void onCreate(Bundle savedInstanceState) { setTheme(((DictionaryApplication)getApplication()).getSelectedTheme().themeId); + /** + * @author Dominik Köppl + * Preference: select default dictionary + * As this list is dynamically generated, we have to do it in this fashion + */ super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); + ListPreference defaultDic = (ListPreference) findPreference(getResources().getString(R.string.defaultDicKey)); + DictionaryApplication application = (DictionaryApplication) getApplication(); + List dicts = application.getUsableDicts(); + + final CharSequence[] entries = new CharSequence[dicts.size()]; + final CharSequence[] entryvalues = new CharSequence[dicts.size()]; + + for(int i = 0; i < entries.length; ++i) + { + entries[i] = dicts.get(i).dictInfo; + entryvalues[i] = dicts.get(i).uncompressedFilename; + } + + defaultDic.setEntries(entries); + defaultDic.setEntryValues(entryvalues); + + } @Override