// 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
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;
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";
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();
}
});
Log.d(LOG, "wordList=" + wordList + ", saveOnlyFirstSubentry=" + saveOnlyFirstSubentry);
setDictionaryPrefs(this, dictFile, indexIndex, searchText.getText().toString());
+
+
+
}
@Override
// 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;