]> gitweb.fperrin.net Git - Dictionary.git/commitdiff
Added intent framework
authorDominik Köppl <niki@berlios.org>
Thu, 11 Jul 2013 13:20:23 +0000 (15:20 +0200)
committerDominik Köppl <niki@berlios.org>
Thu, 11 Jul 2013 13:20:23 +0000 (15:20 +0200)
AndroidManifest.xml
res/values-es/languages.xml
res/values/strings.xml
res/xml/preferences.xml
res/xml/searchable.xml [new file with mode: 0755]
src/com/hughes/android/dictionary/DictionaryActivity.java
src/com/hughes/android/dictionary/PreferenceActivity.java

index 0c8e8ace574d3b2db9da24ec92c0d538a2b06c20..6f90cc489d73c16bb3d08784333907b66a6d9625 100644 (file)
 
                 <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" />
@@ -46,4 +77,7 @@
             android:configChanges="keyboardHidden|orientation" />
     </application>
 
+    
+        
+    
 </manifest>
\ No newline at end of file
index 191f37683dfef0b656f771c82226abc4c80fc475..027b68ed3c7e2e11430ffac119c10506ffb801fe 100644 (file)
@@ -12,7 +12,6 @@
   <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>
index b9f3f1748112eda47a7f8c662c3c7ee698581b99..ef7d8bd50809434895a9c08ef08eea410d1dfbbb 100644 (file)
   <string name="fontWorkaround">Detected font problem (common on Sony Ericsson devices), switching back to default font.</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>
index f331dfb67ee824773b40e7c0bbeffce8aef66a95..a57dece5b51e3cf1f2a9fbce891ea8921b969a6f 100644 (file)
@@ -1,5 +1,13 @@
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">\r
 \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
diff --git a/res/xml/searchable.xml b/res/xml/searchable.xml
new file mode 100755 (executable)
index 0000000..27879cc
--- /dev/null
@@ -0,0 +1,5 @@
+<?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
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;
index b179c3f54f6406c50f8232b69e1f57aaa2457530..343deda4d5089e9c4eb8ff6a9eaaf4a83a946e19 100644 (file)
 
 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<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