Merge "Make the corresponding frameworks change to add VoiceRecognitionService to the list of SDK sample apps."
diff --git a/Android.mk b/Android.mk
index 4ecf5bd..0911712 100644
--- a/Android.mk
+++ b/Android.mk
@@ -409,7 +409,9 @@
 		-samplecode $(sample_dir)/Wiktionary \
 		            resources/samples/Wiktionary "Wiktionary" \
 		-samplecode $(sample_dir)/WiktionarySimple \
-		            resources/samples/WiktionarySimple "Wiktionary (Simplified)"
+		            resources/samples/WiktionarySimple "Wiktionary (Simplified)" \
+		-samplecode $(sample_dir)/VoiceRecognitionService \
+		            resources/samples/VoiceRecognitionService "Voice Recognition Service"
 
 ## SDK version identifiers used in the published docs
   # major[.minor] version for current SDK. (full releases only)
diff --git a/common/java/com/android/common/speech/Recognition.java b/common/java/com/android/common/speech/Recognition.java
new file mode 100644
index 0000000..c647687
--- /dev/null
+++ b/common/java/com/android/common/speech/Recognition.java
@@ -0,0 +1,38 @@
+/*
+ * 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.android.common.speech;
+
+import android.app.SearchDialog;
+
+/**
+ * Utilities for voice recognition implementations.
+ *
+ * @see android.app.RecognitionService
+ */
+public class Recognition {
+
+    /**
+     * The extra key used in an intent to the speech recognizer for voice search. Not
+     * generally to be used by developers. The {@link SearchDialog} uses this, for example,
+     * to set a calling package for identification by a voice search API. If this extra
+     * is set by anyone but the system process, it should be overridden by the voice search
+     * implementation.
+     */
+    public final static String EXTRA_CALLING_PACKAGE = "calling_package";
+
+    private Recognition() { }   // don't instantiate
+}
diff --git a/core/java/android/app/SearchDialog.java b/core/java/android/app/SearchDialog.java
index 63e95c0..e4c1ba6 100644
--- a/core/java/android/app/SearchDialog.java
+++ b/core/java/android/app/SearchDialog.java
@@ -68,6 +68,7 @@
 import android.widget.AdapterView.OnItemSelectedListener;
 
 import com.android.common.Patterns;
+import com.android.common.speech.Recognition;
 
 import java.util.ArrayList;
 import java.util.WeakHashMap;
@@ -94,9 +95,6 @@
     private static final String INSTANCE_KEY_PREVIOUS_COMPONENTS = "sPrev";
     private static final String INSTANCE_KEY_USER_QUERY = "uQry";
     
-    // The extra key used in an intent to the speech recognizer for in-app voice search.
-    private static final String EXTRA_CALLING_PACKAGE = "calling_package";
-    
     // The string used for privateImeOptions to identify to the IME that it should not show
     // a microphone button since one already exists in the search dialog.
     private static final String IME_OPTION_NO_MICROPHONE = "nm";
@@ -948,7 +946,7 @@
         voiceIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, prompt);
         voiceIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, language);
         voiceIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, maxResults);
-        voiceIntent.putExtra(EXTRA_CALLING_PACKAGE,
+        voiceIntent.putExtra(Recognition.EXTRA_CALLING_PACKAGE,
                 searchActivity == null ? null : searchActivity.toShortString());
         
         // Add the values that configure forwarding the results