Merge "New dev tools option for window manager pointer location."
diff --git a/samples/VoiceRecognitionService/Android.mk b/samples/VoiceRecognitionService/Android.mk
new file mode 100755
index 0000000..6155a0f
--- /dev/null
+++ b/samples/VoiceRecognitionService/Android.mk
@@ -0,0 +1,12 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := samples
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+
+LOCAL_SDK_VERSION := current
+
+LOCAL_PACKAGE_NAME := VoiceRecognitionService
+
+include $(BUILD_PACKAGE)
diff --git a/samples/VoiceRecognitionService/AndroidManifest.xml b/samples/VoiceRecognitionService/AndroidManifest.xml
new file mode 100644
index 0000000..f6128fa
--- /dev/null
+++ b/samples/VoiceRecognitionService/AndroidManifest.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2010, 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.
+*/
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.example.android.voicerecognitionservice">
+
+ <uses-sdk android:minSdkVersion="Froyo" />
+
+ <application>
+
+ <!-- The service that implements voice recognition. Note that a label
+ for the service is important to provide, as this is what will show
+ to users if they have to choose between multiple recognizers in
+ system settings. -->
+ <service android:name="VoiceRecognitionService"
+ android:label="@string/service_name">
+
+ <intent-filter>
+ <!-- Here we identify that we are a RecognitionService by specifying that
+ we satisfy RecognitionService's interface intent.
+
+ The constant value is defined at RecognitionService.SERVICE_INTERFACE. -->
+ <action android:name="android.speech.RecognitionService" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+
+ <!-- This points to a metadata xml file that contains information about this
+ RecognitionService - specifically, the name of the settings activity to
+ expose in system settings.
+
+ The constant value is defined at RecognitionService.SERVICE_META_DATA. -->
+ <meta-data android:name="android.speech" android:resource="@xml/recognizer" />
+
+ </service>
+
+ <!-- The settings activity for this sample voice recognizer. -->
+ <activity android:name=".VoiceRecognitionSettings"
+ android:label="@string/settings_name"
+ android:exported="true" />
+
+ </application>
+</manifest>
diff --git a/samples/VoiceRecognitionService/_index.html b/samples/VoiceRecognitionService/_index.html
new file mode 100644
index 0000000..377b10c
--- /dev/null
+++ b/samples/VoiceRecognitionService/_index.html
@@ -0,0 +1,14 @@
+<p>A sample application that demonstrates Android's pluggable voice recognition framework.</p>
+
+<p>This application includes a sample voice recognition service, and a settings activity
+for that service. It shows the basic skeleton for setting up a recognition service and
+exposing its settings activity to settings.</p>
+
+<p>The behavior is extremely simple - it does no real voice recognition, and just returns a
+fixed set of results immediately. The results can be either a set of letters or numbers, as
+chosen by the user in the simplistic settings activity.</p>
+
+<p>See also:</p>
+<ul>
+ <li><a href="../../../reference/android/speech/RecognitionService.html">RecognitionService</a></li>
+</ul>
\ No newline at end of file
diff --git a/samples/VoiceRecognitionService/res/values/strings.xml b/samples/VoiceRecognitionService/res/values/strings.xml
new file mode 100644
index 0000000..d872019
--- /dev/null
+++ b/samples/VoiceRecognitionService/res/values/strings.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2010, 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.
+*/
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+
+ <!-- The name for the recognizer - to be shown in system settings. -->
+ <string name="service_name">Sample Recognizer</string>
+
+ <!-- The name of the settings activity. -->
+ <string name="settings_name">Voice Recognition Settings</string>
+
+ <!-- The title of the preference for the type of results to return (letters or numbers). -->
+ <string name="results_type_title">Results type</string>
+
+ <!-- The entry names of the preference for the type of results to return
+ (letters or numbers). -->
+ <string-array name="results_type_entries">
+ <item>Letters</item>
+ <item>Numbers</item>
+ </string-array>
+
+ <!-- The entry values of the preference for the type of results to return
+ (letters or numbers). -->
+ <string-array name="results_type_values">
+ <item>0</item>
+ <item>1</item>
+ </string-array>
+
+ <!-- The default value of the preference for the type of results to return
+ (letters or numbers). -->
+ <string name="results_type_default_value">0</string>
+
+</resources>
diff --git a/samples/VoiceRecognitionService/res/xml/preferences.xml b/samples/VoiceRecognitionService/res/xml/preferences.xml
new file mode 100644
index 0000000..2d9e08c
--- /dev/null
+++ b/samples/VoiceRecognitionService/res/xml/preferences.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010, 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/settings_name">
+
+ <!-- This setting lets you choose what kind of fake results you get from
+ this sample recognizer. If you choose "letters", you'll get letters
+ like "a", "b", "c" in the list of results. If you choose "numbers",
+ you'll get numbers like "1", "2", "3" in the list of results. -->
+ <ListPreference
+ android:key="results_type"
+ android:title="@string/results_type_title"
+ android:entries="@array/results_type_entries"
+ android:entryValues="@array/results_type_values"
+ android:dialogTitle="@string/results_type_title"
+ android:defaultValue="@string/results_type_default_value"
+ />
+
+</PreferenceScreen>
diff --git a/samples/VoiceRecognitionService/res/xml/recognizer.xml b/samples/VoiceRecognitionService/res/xml/recognizer.xml
new file mode 100644
index 0000000..37b5c8a
--- /dev/null
+++ b/samples/VoiceRecognitionService/res/xml/recognizer.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright (c) 2010, 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.
+ */
+-->
+
+<!-- The attributes in this XML file provide configuration information
+ for the sample voice recognizer. -->
+
+<recognition-service xmlns:android="http://schemas.android.com/apk/res/android"
+ android:settingsActivity="com.example.android.voicerecognitionservice.VoiceRecognitionSettings"
+/>
diff --git a/samples/VoiceRecognitionService/src/com/example/android/voicerecognitionservice/VoiceRecognitionService.java b/samples/VoiceRecognitionService/src/com/example/android/voicerecognitionservice/VoiceRecognitionService.java
new file mode 100644
index 0000000..f0d1676
--- /dev/null
+++ b/samples/VoiceRecognitionService/src/com/example/android/voicerecognitionservice/VoiceRecognitionService.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2010 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.example.android.voicerecognitionservice;
+
+import java.util.ArrayList;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.speech.RecognitionManager;
+import android.speech.RecognitionService;
+
+/**
+ * A sample implementation of a {@link RecognitionService}. This very simple implementation does
+ * no actual voice recognition. It just immediately returns fake recognition results.
+ * Depending on the setting chosen in {@link VoiceRecognitionSettings}, it either returns a
+ * list of letters ("a", "b", "c"), or a list of numbers ("1", "2", "3").
+ */
+public class VoiceRecognitionService extends RecognitionService {
+
+ @Override
+ protected void onCancel(Callback listener) {
+ // A real recognizer would do something to shut down recognition here.
+ }
+
+ @Override
+ protected void onStartListening(Intent recognizerIntent, Callback listener) {
+ // A real recognizer would probably utilize a lot of the other listener callback
+ // methods. But we'll just skip all that and pretend we've got a result.
+ ArrayList<String> results = new ArrayList<String>();
+
+ SharedPreferences prefs = getSharedPreferences(
+ VoiceRecognitionSettings.SHARED_PREFERENCES_NAME,
+ Context.MODE_PRIVATE);
+
+ String resultType = prefs.getString(
+ VoiceRecognitionSettings.PREF_KEY_RESULTS_TYPE,
+ String.valueOf(VoiceRecognitionSettings.RESULT_TYPE_LETTERS));
+ int resultTypeInt = Integer.parseInt(resultType);
+
+ if (resultTypeInt == VoiceRecognitionSettings.RESULT_TYPE_LETTERS) {
+ results.add("a");
+ results.add("b");
+ results.add("c");
+ } else if (resultTypeInt == VoiceRecognitionSettings.RESULT_TYPE_NUMBERS) {
+ results.add("1");
+ results.add("2");
+ results.add("3");
+ }
+
+ Bundle bundle = new Bundle();
+ bundle.putStringArrayList(RecognitionManager.RESULTS_RECOGNITION, results);
+
+ try {
+ listener.results(bundle);
+ } catch (RemoteException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ protected void onStopListening(Callback listener) {
+ // Not implemented - in this sample we assume recognition would be endpointed
+ // automatically, though certain applications may wish to expose an affordance
+ // for stopping recording manually.
+ }
+
+}
diff --git a/samples/VoiceRecognitionService/src/com/example/android/voicerecognitionservice/VoiceRecognitionSettings.java b/samples/VoiceRecognitionService/src/com/example/android/voicerecognitionservice/VoiceRecognitionSettings.java
new file mode 100644
index 0000000..1360ce3
--- /dev/null
+++ b/samples/VoiceRecognitionService/src/com/example/android/voicerecognitionservice/VoiceRecognitionSettings.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2010 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.example.android.voicerecognitionservice;
+
+import android.os.Bundle;
+import android.preference.PreferenceActivity;
+
+/**
+ * A settings activity for the sample voice recognizer.
+ */
+public class VoiceRecognitionSettings extends PreferenceActivity {
+
+ // The name of the SharedPreferences file we'll store preferences in.
+ public static final String SHARED_PREFERENCES_NAME = "VoiceRecognitionService";
+
+ // The key to the preference for the type of results to show (letters or numbers).
+ // Identical to the value specified in res/values/strings.xml.
+ public static final String PREF_KEY_RESULTS_TYPE = "results_type";
+
+ // The values of the preferences for the type of results to show (letters or numbers).
+ // Identical to the values specified in res/values/strings.xml.
+ public static final int RESULT_TYPE_LETTERS = 0;
+ public static final int RESULT_TYPE_NUMBERS = 1;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getPreferenceManager().setSharedPreferencesName(SHARED_PREFERENCES_NAME);
+ addPreferencesFromResource(R.xml.preferences);
+ }
+}