<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
+
+ <!--
+ <intent-filter>
+ <action android:name="android.intent.action.SEND" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data android:mimeType="text/plain" />
+ </intent-filter>
+ <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
+ <intent-filter>
+ <action android:name="android.intent.action.SEARCH" />
+ </intent-filter>
+ -->
</activity>
- <activity android:name=".DictionaryActivity" />
+
+
+ <activity android:name=".DictionaryActivity" android:label="@string/app_name">
+ <!-- @author Dominik Köppl
+ Added two different intents to catch simple and advanced queries from other extern applications.
+ -->
+ <intent-filter>
+ <action android:name="android.intent.action.SEARCH" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+
+
+ <intent-filter>
+ <action android:name="com.hughes.action.ACTION_SEARCH_DICT" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+
+ </activity>
+
+
<activity android:name=".DictionaryEditActivity" />
<activity android:name=".AboutActivity" />
<activity android:name=".HtmlDisplayActivity" />
- <activity android:name=".SettingsActivity" />
+ <activity android:name=".PreferenceActivity" />
<activity
android:name=".DownloadActivity"
android:configChanges="keyboardHidden|orientation" />
</application>
+
+
+
</manifest>
\ No newline at end of file
<string name="MY">Burmese</string>
<string name="yue">Cantonés</string>
<string name="CA">Catalán</string>
- <string name="HR">Croata</string>
<string name="CS">Checo</string>
<string name="ZH">Chino (Mandarín)</string>
<string name="DA">Danés</string>
<string name="clearSearchText">Clear search text</string>
+ <string name="no_dict_file">Please specify a default directory in the settings.</string>
+
+
+
<!-- DictionaryManagerActivity -->
<string name="dictionaryManager">Dictionary manager</string>
<string name="helpText">Long-press a dictionary for more options.</string>
<string name="unzipping">Unzipping: %1$,d of %2$,d bytes.</string>
<string name="downloadFinished">Finished: %,d bytes.</string>
<string name="errorDownloadingFile">Error downloading file: \n%s</string>
-
+
+
+ <string name="search_hint">An unknown word</string>
+
+
<!-- Preferences -->
+ <string name="defaultDicKey">defaultddic</string>
+ <string name="defaultDicTitle">Default Dic</string>
+ <string name="defaultDicSummary">The directory to fired up when nothing else mentioned.</string>
+
+
<string name="quickdicDirectoryKey">quickdicDirectory</string>
<string name="quickdicDirectoryTitle">QuickDic directory</string>
<string name="quickdicDirectorySummary">The directory where QuickDic stores dictionaries.</string>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">\r
\r
+ <ListPreference \r
+ android:key="@string/defaultDicKey"\r
+ android:title="@string/defaultDicTitle"\r
+ android:summary="@string/defaultDicSummary"\r
+ android:persistent="true"\r
+ />\r
+\r
<EditTextPreference\r
android:key="@string/quickdicDirectoryKey"\r
android:title="@string/quickdicDirectoryTitle" \r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<searchable xmlns:android="http://schemas.android.com/apk/res/android"
+ android:label="@string/app_name"
+ android:hint="@string/search_hint" >
+</searchable>
\ No newline at end of file
// 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
import android.annotation.SuppressLint;
import android.app.Dialog;
+import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.text.ClipboardManager;
-import android.text.Editable;
-import android.text.Selection;
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.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.KeyEvent;
-import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
-import android.view.View.OnFocusChangeListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.BaseAdapter;
import android.widget.Button;
-import android.widget.EditText;
import android.widget.FrameLayout;
-import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
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<DictionaryInfo> 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();
}
});
protected void onResume() {
Log.d(LOG, "onResume");
super.onResume();
- if (SettingsActivity.settingsMightHaveChanged) {
- SettingsActivity.settingsMightHaveChanged = false;
+ if (PreferenceActivity.prefsMightHaveChanged) {
+ PreferenceActivity.prefsMightHaveChanged = false;
finish();
startActivity(getIntent());
}
searchHintIcon.setImageResource(android.R.drawable.ic_media_previous);
}
}
- updateTTSLanuage();
+ updateTTSLanguage();
}
- private void updateTTSLanuage() {
+ private void updateTTSLanguage() {
if (!ttsReady || index == null || textToSpeech == null) {
Log.d(LOG, "Can't updateTTSLanguage.");
return;
preferences.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
preferences.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(final MenuItem menuItem) {
- SettingsActivity.settingsMightHaveChanged = true;
- final Intent intent = new Intent().setClassName(SettingsActivity.class
- .getPackage().getName(), SettingsActivity.class.getCanonicalName());
+ PreferenceActivity.prefsMightHaveChanged = true;
+ final Intent intent = new Intent().setClassName(PreferenceActivity.class
+ .getPackage().getName(), PreferenceActivity.class.getCanonicalName());
context.startActivity(intent);
return false;
}
protected void onResume() {
super.onResume();
- if (SettingsActivity.settingsMightHaveChanged) {
- SettingsActivity.settingsMightHaveChanged = false;
+ if (PreferenceActivity.prefsMightHaveChanged) {
+ PreferenceActivity.prefsMightHaveChanged = false;
finish();
startActivity(getIntent());
}
--- /dev/null
+// Copyright 2011 Google Inc. All Rights Reserved.
+//
+// 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
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+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
+ 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<DictionaryInfo> 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
+ public void onContentChanged() {
+ super.onContentChanged();
+ }
+}
+++ /dev/null
-// Copyright 2011 Google Inc. All Rights Reserved.
-//
-// 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
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.hughes.android.dictionary;
-
-import android.os.Bundle;
-
-public class SettingsActivity extends android.preference.PreferenceActivity {
-
- static boolean settingsMightHaveChanged = false;
-
- @SuppressWarnings("deprecation")
-@Override
- public void onCreate(Bundle savedInstanceState) {
- setTheme(((DictionaryApplication)getApplication()).getSelectedTheme().themeId);
-
- super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.settings);
- }
-
- @Override
- public void onContentChanged() {
- super.onContentChanged();
- }
-}