]> gitweb.fperrin.net Git - Dictionary.git/blobdiff - src/com/hughes/android/dictionary/DictionaryActivity.java
Added intent framework
[Dictionary.git] / src / com / hughes / android / dictionary / DictionaryActivity.java
index f432a8faa7aa63ac10da5fea447e3a0c27cfd8b0..991e87b9a88e9d0f06e89fa3c93bec70014e2f45 100644 (file)
@@ -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
 
 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<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();
             }
         });
         
@@ -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;