// 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;
private SearchOperation currentSearchOperation = null;
-
TextToSpeech textToSpeech;
volatile boolean ttsReady;
public DictionaryActivity() {
}
- public static Intent getLaunchIntent(final File dictFile, final int indexIndex,
+ public static Intent getLaunchIntent(final File dictFile, final String indexShortName,
final String searchToken) {
final Intent intent = new Intent();
intent.setClassName(DictionaryActivity.class.getPackage().getName(),
DictionaryActivity.class.getName());
intent.putExtra(C.DICT_FILE, dictFile.getPath());
- intent.putExtra(C.INDEX_INDEX, indexIndex);
+ intent.putExtra(C.INDEX_SHORT_NAME, indexShortName);
intent.putExtra(C.SEARCH_TOKEN, searchToken);
return intent;
}
protected void onSaveInstanceState(final Bundle outState) {
super.onSaveInstanceState(outState);
Log.d(LOG, "onSaveInstanceState: " + searchView.getQuery().toString());
- outState.putInt(C.INDEX_INDEX, indexIndex);
+ outState.putString(C.INDEX_SHORT_NAME, index.shortName);
outState.putString(C.SEARCH_TOKEN, searchView.getQuery().toString());
}
@Override
- protected void onRestoreInstanceState(final Bundle outState) {
- super.onRestoreInstanceState(outState);
- Log.d(LOG, "onRestoreInstanceState: " + outState.getString(C.SEARCH_TOKEN));
- onCreate(outState);
+ protected void onRestoreInstanceState(final Bundle savedInstanceState) {
+ super.onRestoreInstanceState(savedInstanceState);
+ Log.d(LOG, "onRestoreInstanceState: " + savedInstanceState.getString(C.SEARCH_TOKEN));
+ onCreate(savedInstanceState);
}
@Override
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.
- prefs.edit().remove(C.INDEX_INDEX).commit();
+ prefs.edit().remove(C.DICT_FILE).commit();
setTheme(((DictionaryApplication) getApplication()).getSelectedTheme().themeId);
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.getDictionariesOnDevice(null);
+ 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_SHORT_NAME, info.indexInfos.get(which_index).shortName);
+
+ }
+ 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();
}
});
finish();
return;
}
- indexIndex = intent.getIntExtra(C.INDEX_INDEX, 0);
- if (savedInstanceState != null) {
- indexIndex = savedInstanceState.getInt(C.INDEX_INDEX, indexIndex);
+ String targetIndex = intent.getStringExtra(C.INDEX_SHORT_NAME);
+ if (savedInstanceState != null && savedInstanceState.getString(C.INDEX_SHORT_NAME) != null) {
+ targetIndex = savedInstanceState.getString(C.INDEX_SHORT_NAME);
+ }
+ indexIndex = 0;
+ for (int i = 0; i < dictionary.indices.size(); ++i) {
+ if (dictionary.indices.get(i).shortName.equals(targetIndex)) {
+ indexIndex = i;
+ break;
+ }
}
- indexIndex %= dictionary.indices.size();
Log.d(LOG, "Loading index " + indexIndex);
index = dictionary.indices.get(indexIndex);
setListAdapter(new IndexAdapter(index));
setSearchText(text, true);
Log.d(LOG, "Trying to restore searchText=" + text);
- setDictionaryPrefs(this, dictFile, indexIndex, searchView.getQuery().toString());
+ setDictionaryPrefs(this, dictFile, index.shortName, searchView.getQuery().toString());
updateLangButton();
}
searchView = new SearchView(getSupportActionBar().getThemedContext());
searchView.setIconifiedByDefault(false);
- // searchView.setIconified(false); // puts the magifying glass in the
+ // searchView.setIconified(false); // puts the magnifying glass in the
// wrong place.
searchView.setQueryHint(getString(R.string.searchText));
searchView.setSubmitButtonEnabled(false);
protected void onResume() {
Log.d(LOG, "onResume");
super.onResume();
- if (SettingsActivity.settingsMightHaveChanged) {
- SettingsActivity.settingsMightHaveChanged = false;
+ if (PreferenceActivity.prefsMightHaveChanged) {
+ PreferenceActivity.prefsMightHaveChanged = false;
finish();
startActivity(getIntent());
}
}
private static void setDictionaryPrefs(final Context context, final File dictFile,
- final int indexIndex, final String searchToken) {
+ final String indexShortName, final String searchToken) {
final SharedPreferences.Editor prefs = PreferenceManager.getDefaultSharedPreferences(
context).edit();
prefs.putString(C.DICT_FILE, dictFile.getPath());
- prefs.putInt(C.INDEX_INDEX, indexIndex);
+ prefs.putString(C.INDEX_SHORT_NAME, indexShortName);
prefs.putString(C.SEARCH_TOKEN, ""); // Don't need to save search token.
prefs.commit();
}
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;
dialog.setContentView(R.layout.select_dictionary_dialog);
dialog.setTitle(R.string.selectDictionary);
- final List<DictionaryInfo> installedDicts = ((DictionaryApplication) getApplication())
- .getUsableDicts();
+ final List<DictionaryInfo> installedDicts = application.getDictionariesOnDevice(null);
ListView listView = (ListView) dialog.findViewById(android.R.id.list);
-
final Button button = new Button(listView.getContext());
final String name = getString(R.string.dictionaryManager);
button.setText(name);
final LinearLayout result = new LinearLayout(parent.getContext());
for (int i = 0; i < dictionaryInfo.indexInfos.size(); ++i) {
- if (i > 0) {
- final TextView dash = new TextView(parent.getContext());
- dash.setText("-");
- result.addView(dash);
- }
-
final IndexInfo indexInfo = dictionaryInfo.indexInfos.get(i);
- final Button button = new Button(parent.getContext());
- button.setText(indexInfo.shortName);
+ final View button = application.createButton(parent.getContext(), dictionaryInfo, indexInfo);
final IntentLauncher intentLauncher = new IntentLauncher(parent.getContext(),
getLaunchIntent(
application.getPath(dictionaryInfo.uncompressedFilename),
- i, searchView.getQuery().toString())) {
+ indexInfo.shortName, searchView.getQuery().toString())) {
@Override
protected void onGo() {
dialog.dismiss();
};
button.setOnClickListener(intentLauncher);
result.addView(button);
-
}
final TextView nameView = new TextView(parent.getContext());
layoutParams.weight = 1.0f;
nameView.setLayoutParams(layoutParams);
result.addView(nameView);
-
return result;
}
return installedDicts.size();
}
});
-
dialog.show();
}
indexAdapter = new IndexAdapter(index);
setListAdapter(indexAdapter);
Log.d(LOG, "changingIndex, newLang=" + index.longName);
- setDictionaryPrefs(this, dictFile, indexIndex, searchView.getQuery().toString());
+ setDictionaryPrefs(this, dictFile, index.shortName, searchView.getQuery().toString());
updateLangButton();
}
setSearchText(newSearchText, true);