Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1098)

Unified Diff: remoting/android/java/src/org/chromium/chromoting/CardboardDesktopActivity.java

Issue 1257283007: Voice input (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Improve documentation. Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: remoting/android/java/src/org/chromium/chromoting/CardboardDesktopActivity.java
diff --git a/remoting/android/java/src/org/chromium/chromoting/CardboardDesktopActivity.java b/remoting/android/java/src/org/chromium/chromoting/CardboardDesktopActivity.java
index 8289d0eba6b04e6b4fb0ac92ce0eb1f2adb5965e..df454a97dae4399d1bd35e22c054ff350cce46e6 100644
--- a/remoting/android/java/src/org/chromium/chromoting/CardboardDesktopActivity.java
+++ b/remoting/android/java/src/org/chromium/chromoting/CardboardDesktopActivity.java
@@ -4,14 +4,20 @@
package org.chromium.chromoting;
+import android.content.Intent;
import android.graphics.PointF;
import android.os.Bundle;
+import android.speech.RecognitionListener;
+import android.speech.RecognizerIntent;
+import android.speech.SpeechRecognizer;
import com.google.vrtoolkit.cardboard.CardboardActivity;
import com.google.vrtoolkit.cardboard.CardboardView;
import org.chromium.chromoting.jni.JniInterface;
+import java.util.ArrayList;
+
/**
* Virtual desktop activity for Cardboard.
*/
@@ -21,6 +27,10 @@ public class CardboardDesktopActivity extends CardboardActivity {
private boolean mSwitchToDesktopActivity;
private CardboardDesktopRenderer mRenderer;
+ private SpeechRecognizer mSpeechRecognizer;
+
+ // Flag to indicate whether the speech recognizer is listening or not.
+ private boolean mIsListening;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -29,6 +39,7 @@ public class CardboardDesktopActivity extends CardboardActivity {
mSwitchToDesktopActivity = false;
CardboardView cardboardView = (CardboardView) findViewById(R.id.cardboard_view);
mRenderer = new CardboardDesktopRenderer(this);
+ mIsListening = false;
// Associate a CardboardView.StereoRenderer with cardboardView.
cardboardView.setRenderer(mRenderer);
@@ -45,9 +56,13 @@ public class CardboardDesktopActivity extends CardboardActivity {
TouchInputHandler.BUTTON_LEFT, true);
JniInterface.sendMouseEvent((int) coordinates.x, (int) coordinates.y,
TouchInputHandler.BUTTON_LEFT, false);
- } else {
+ } else if (mRenderer.isLookingLeftOfDesktop()) {
+ // TODO(shichengfeng): Give a more polished UI (including menu icons
+ // and visual indicator during when speech recognizer is listening).
mSwitchToDesktopActivity = true;
finish();
+ } else if (mRenderer.isLookingRightOfDesktop()) {
+ listenForVoiceInput();
}
}
@@ -64,6 +79,9 @@ public class CardboardDesktopActivity extends CardboardActivity {
if (!mSwitchToDesktopActivity) {
JniInterface.enableVideoChannel(false);
}
+ if (mSpeechRecognizer != null) {
+ mSpeechRecognizer.stopListening();
+ }
}
@Override
@@ -80,5 +98,80 @@ public class CardboardDesktopActivity extends CardboardActivity {
} else {
JniInterface.enableVideoChannel(false);
}
+ if (mSpeechRecognizer != null) {
+ mSpeechRecognizer.stopListening();
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ if (mSpeechRecognizer != null) {
+ mSpeechRecognizer.cancel();
+ mSpeechRecognizer.destroy();
+ }
+ }
+
+ private void listenForVoiceInput() {
+ if (mIsListening) {
+ return;
+ }
+
+ if (mSpeechRecognizer == null) {
+ if (SpeechRecognizer.isRecognitionAvailable(this)) {
+ mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
+ mSpeechRecognizer.setRecognitionListener(new VoiceInputRecognitionListener());
+ } else {
+ return;
+ }
+ }
+
+ mIsListening = true;
+
+ Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
+
+ // LANGUAGE_MODEL_FREE_FORM is used to improve dictation accuracy
+ // for the voice keyboard.
+ intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
+ RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
+
+ mSpeechRecognizer.startListening(intent);
+ }
+
+ private class VoiceInputRecognitionListener implements RecognitionListener {
+ public void onReadyForSpeech(Bundle params) {
+ }
+
+ public void onBeginningOfSpeech() {
+ }
+
+ public void onRmsChanged(float rmsdB){
+ }
+
+ public void onBufferReceived(byte[] buffer) {
+ }
+
+ public void onEndOfSpeech() {
+ mIsListening = false;
+ }
+
+ public void onError(int error) {
+ mIsListening = false;
+ }
+
+ public void onResults(Bundle results) {
+ // TODO(shichengfeng): If necessary, provide a list of choices for user to pick.
+ ArrayList<String> data =
+ results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
+ if (!data.isEmpty()) {
+ JniInterface.sendTextEvent(data.get(0));
+ }
+ }
+
+ public void onPartialResults(Bundle partialResults) {
+ }
+
+ public void onEvent(int eventType, Bundle params) {
+ }
}
}

Powered by Google App Engine
This is Rietveld 408576698