Adding an EngineSettings screen to Pico that enables languages
to be installed individually.

Change-Id: I29f98ff65a3c8c90747f635d0ad3887ab27a65d7
diff --git a/pico/AndroidManifest.xml b/pico/AndroidManifest.xml
index fcf6980..c8cb570 100755
--- a/pico/AndroidManifest.xml
+++ b/pico/AndroidManifest.xml
@@ -55,6 +55,13 @@
             </intent-filter>
         </activity>
 
+        <activity android:name=".EngineSettings" android:label="@string/app_name">
+            <intent-filter>
+                <action android:name="android.speech.tts.engine.CONFIGURE_ENGINE" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
         <activity android:enabled="true" android:name=".Pico"
             android:hasCode="false" android:label="@string/app_name"
             android:theme="@android:style/Theme.Translucent.NoTitleBar">
diff --git a/pico/res/values/strings.xml b/pico/res/values/strings.xml
index f68995a..932403d 100755
--- a/pico/res/values/strings.xml
+++ b/pico/res/values/strings.xml
@@ -26,4 +26,6 @@
     <string name="deu_deu_sample">Dies ist ein Beispiel für Sprachsynthese in Deutsch mit Pico.</string>
     <string name="ita_ita_sample">Questo è un esempio di sintesi vocale in italiano con Pico.</string>
     <string name="spa_esp_sample">Este es un ejemplo de síntesis de voz en español con Pico.</string>
+    <string name="installed">Installed</string>
+    <string name="not_installed">Not Installed</string>
 </resources>
diff --git a/pico/res/xml/voices_list.xml b/pico/res/xml/voices_list.xml
new file mode 100755
index 0000000..3b7e640
--- /dev/null
+++ b/pico/res/xml/voices_list.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     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.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+        android:title="@string/app_name">
+
+        <Preference
+            android:key="eng-USA"
+            android:persistent="false" />
+        <Preference
+            android:key="eng-GBR"
+            android:persistent="false" />
+        <Preference
+            android:key="fra-FRA"
+            android:persistent="false" />
+        <Preference
+            android:key="ita-ITA"
+            android:persistent="false" />
+        <Preference
+            android:key="deu-DEU"
+            android:persistent="false" />
+        <Preference
+            android:key="spa-ESP"
+            android:persistent="false" />
+
+</PreferenceScreen>
diff --git a/pico/src/com/svox/pico/EngineSettings.java b/pico/src/com/svox/pico/EngineSettings.java
new file mode 100755
index 0000000..dee798a
--- /dev/null
+++ b/pico/src/com/svox/pico/EngineSettings.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * 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.svox.pico;
+
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.preference.Preference.OnPreferenceClickListener;
+import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.Locale;
+
+/*
+ * Checks if the voice data for the SVOX Pico Engine is present on the
+ * sd card.
+ */
+public class EngineSettings extends PreferenceActivity {
+    private final static String MARKET_URI_START = "market://search?q=pname:com.svox.pico.voice.";
+    private static final int VOICE_DATA_CHECK_CODE = 42;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        
+        Intent i = new Intent();
+        i.setClass(this, CheckVoiceData.class);
+        startActivityForResult(i, VOICE_DATA_CHECK_CODE);
+    }
+    
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data){
+        if (requestCode == VOICE_DATA_CHECK_CODE){
+            ArrayList<String> available = data.getStringArrayListExtra("TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES");
+            ArrayList<String> unavailable = data.getStringArrayListExtra("TextToSpeech.Engine.EXTRA_UNAVAILABLE_VOICES");
+
+            addPreferencesFromResource(R.xml.voices_list);
+            
+            for (int i = 0; i < available.size(); i++){
+                Log.e("debug", available.get(i));
+                String[] languageCountry = available.get(i).split("-");
+                Locale loc = new Locale(languageCountry[0], languageCountry[1]);
+                Preference pref = findPreference(available.get(i));
+                pref.setTitle(loc.getDisplayLanguage() + " (" + loc.getDisplayCountry() + ")");
+                pref.setSummary(R.string.installed);
+                pref.setEnabled(false);
+            }
+
+            
+            for (int i = 0; i < unavailable.size(); i++){
+                final String unavailableLang = unavailable.get(i);
+                String[] languageCountry = unavailableLang.split("-");
+                Locale loc = new Locale(languageCountry[0], languageCountry[1]);
+                Preference pref = findPreference(unavailableLang);
+                pref.setTitle(loc.getDisplayLanguage() + " (" + loc.getDisplayCountry() + ")");
+                pref.setSummary(R.string.not_installed);
+                pref.setEnabled(true);
+                pref.setOnPreferenceClickListener(new OnPreferenceClickListener(){
+                    public boolean onPreferenceClick(Preference preference) {
+                        Uri marketUri = Uri.parse(MARKET_URI_START + unavailableLang.toLowerCase().replace("-", "."));
+                        Intent marketIntent = new Intent(Intent.ACTION_VIEW, marketUri);
+                        startActivity(marketIntent);
+                        return false;
+                    }
+                });
+            }
+        }
+    }
+    
+
+}