Keep legacy compatibility with old speech recognizer

pull/14/head
Sam Bosley 14 years ago
parent 4e85017921
commit 7ef01bbef3

@ -125,6 +125,7 @@ public class RecognizerApi implements RecognitionListener {
} }
public void destroy() { public void destroy() {
sr.setRecognitionListener(null);
sr.destroy(); sr.destroy();
} }

@ -62,6 +62,7 @@ import com.todoroo.astrid.utility.Constants;
import com.todoroo.astrid.utility.Flags; import com.todoroo.astrid.utility.Flags;
import com.todoroo.astrid.voice.VoiceInputAssistant; import com.todoroo.astrid.voice.VoiceInputAssistant;
import com.todoroo.astrid.voice.VoiceOutputService; import com.todoroo.astrid.voice.VoiceOutputService;
import com.todoroo.astrid.voice.VoiceRecognizer;
import com.todoroo.astrid.welcome.tutorial.WelcomeWalkthrough; import com.todoroo.astrid.welcome.tutorial.WelcomeWalkthrough;
import com.todoroo.astrid.widget.TasksWidget; import com.todoroo.astrid.widget.TasksWidget;
@ -503,7 +504,7 @@ public class EditPreferences extends TodorooPreferenceActivity {
return; return;
final Resources r = getResources(); final Resources r = getResources();
if (!voiceInputAssistant.isVoiceInputAvailable()) { if (!VoiceRecognizer.voiceInputAvailable(this)) {
if (AndroidUtilities.getSdkVersion() > 6) { if (AndroidUtilities.getSdkVersion() > 6) {
DialogUtilities.okCancelDialog(this, DialogUtilities.okCancelDialog(this,
r.getString(R.string.EPr_voiceInputInstall_dlg), r.getString(R.string.EPr_voiceInputInstall_dlg),

@ -24,7 +24,6 @@ import android.widget.TextView.OnEditorActionListener;
import android.widget.Toast; import android.widget.Toast;
import com.timsu.astrid.R; import com.timsu.astrid.R;
import com.todoroo.aacenc.RecognizerApi;
import com.todoroo.aacenc.RecognizerApi.RecognizerApiListener; import com.todoroo.aacenc.RecognizerApi.RecognizerApiListener;
import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.ContextManager;
@ -57,6 +56,7 @@ import com.todoroo.astrid.service.StatisticsConstants;
import com.todoroo.astrid.service.StatisticsService; import com.todoroo.astrid.service.StatisticsService;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.utility.Flags; import com.todoroo.astrid.utility.Flags;
import com.todoroo.astrid.voice.VoiceRecognizer;
/** /**
* Quick Add Bar lets you add tasks. * Quick Add Bar lets you add tasks.
@ -86,8 +86,10 @@ public class QuickAddBar extends LinearLayout implements RecognizerApiListener {
@Autowired MetadataService metadataService; @Autowired MetadataService metadataService;
@Autowired ActFmPreferenceService actFmPreferenceService; @Autowired ActFmPreferenceService actFmPreferenceService;
//private VoiceInputAssistant voiceInputAssistant; // private VoiceInputAssistant voiceInputAssistant;
private RecognizerApi recognizerApi; // private RecognizerApi recognizerApi;
private VoiceRecognizer voiceRecognizer;
private Activity activity; private Activity activity;
private TaskListFragment fragment; private TaskListFragment fragment;
@ -156,20 +158,11 @@ public class QuickAddBar extends LinearLayout implements RecognizerApiListener {
// prepare and set listener for voice add button // prepare and set listener for voice add button
voiceAddButton = (ImageButton) findViewById( voiceAddButton = (ImageButton) findViewById(
R.id.voiceAddButton); R.id.voiceAddButton);
int prompt = R.string.voice_edit_title_prompt;
if (Preferences.getBoolean(R.string.p_voiceInputCreatesTask, false)) voiceAddButton.setOnClickListener(new OnClickListener() {
prompt = R.string.voice_create_prompt;
// voiceInputAssistant = new VoiceInputAssistant(fragment,
// voiceAddButton, quickAddBox);
// voiceInputAssistant.configureMicrophoneButton(prompt);
findViewById(R.id.voiceAddButton).setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (currentVoiceFile == null) startVoiceRecognition();
currentVoiceFile = Long.toString(DateUtilities.now());
recognizerApi.setTemporaryFile(currentVoiceFile);
recognizerApi.start();
} }
}); });
@ -189,7 +182,7 @@ public class QuickAddBar extends LinearLayout implements RecognizerApiListener {
if (addOnService.hasPowerPack() if (addOnService.hasPowerPack()
&& Preferences.getBoolean(R.string.p_voiceInputEnabled, true) && Preferences.getBoolean(R.string.p_voiceInputEnabled, true)
/*&& voiceInputAssistant.isVoiceInputAvailable()*/) { && VoiceRecognizer.voiceInputAvailable(activity)) {
voiceAddButton.setVisibility(View.VISIBLE); voiceAddButton.setVisibility(View.VISIBLE);
} else { } else {
voiceAddButton.setVisibility(View.GONE); voiceAddButton.setVisibility(View.GONE);
@ -348,7 +341,7 @@ public class QuickAddBar extends LinearLayout implements RecognizerApiListener {
.append("_audio.mp4"); .append("_audio.mp4");
String filePath = filePathBuilder.toString(); String filePath = filePathBuilder.toString();
System.err.println("Saving to " + filePath); System.err.println("Saving to " + filePath);
recognizerApi.convert(filePath); voiceRecognizer.convert(filePath);
currentVoiceFile = null; currentVoiceFile = null;
Metadata fileMetadata = FileMetadata.createNewFileMetadata(task.getId(), filePath, FileMetadata.FILE_TYPE_AUDIO); Metadata fileMetadata = FileMetadata.createNewFileMetadata(task.getId(), filePath, FileMetadata.FILE_TYPE_AUDIO);
@ -449,17 +442,19 @@ public class QuickAddBar extends LinearLayout implements RecognizerApiListener {
return false; return false;
} }
public void setupRecognizerApi() { public void startVoiceRecognition() {
if (recognizerApi != null) if (VoiceRecognizer.speechRecordingAvailable(activity) && currentVoiceFile == null) {
recognizerApi.destroy(); currentVoiceFile = Long.toString(DateUtilities.now());
}
voiceRecognizer.startVoiceRecognition(activity, currentVoiceFile);
}
recognizerApi = new RecognizerApi(activity); public void setupRecognizerApi() {
recognizerApi.setListener(this); voiceRecognizer = VoiceRecognizer.instantiateVoiceRecognizer(activity, this, fragment, voiceAddButton, quickAddBox);
} }
public void destroyRecognizerApi() { public void destroyRecognizerApi() {
recognizerApi.destroy(); voiceRecognizer.destroyRecognizerApi();
recognizerApi = null;
} }
@Override @Override
@ -469,7 +464,7 @@ public class QuickAddBar extends LinearLayout implements RecognizerApiListener {
@Override @Override
public void onSpeechError(int error) { public void onSpeechError(int error) {
recognizerApi.cancel(); voiceRecognizer.cancel();
int errorStr = 0; int errorStr = 0;
switch(error) { switch(error) {

@ -2,15 +2,12 @@ package com.todoroo.astrid.voice;
import java.security.InvalidParameterException; import java.security.InvalidParameterException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import junit.framework.Assert; import junit.framework.Assert;
import android.app.Activity; import android.app.Activity;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.speech.RecognizerIntent; import android.speech.RecognizerIntent;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.util.Log; import android.util.Log;
@ -270,29 +267,8 @@ public class VoiceInputAssistant {
return null; return null;
} }
/**
* Call this to see if your phone supports voiceinput in its current configuration.
* If this method returns false, it could also mean that Google Voicesearch is simply
* not installed.
* If this method returns true, internal use of it enables the registered microphone-button.
*
* @return whether this phone supports voiceinput
*/
public boolean isVoiceInputAvailable() {
// Check to see if a recognition activity is present
PackageManager pm = null;
if (fragment == null) {
pm = ContextManager.getContext().getPackageManager();
} else {
pm = fragment.getActivity().getPackageManager();
}
List<ResolveInfo> activities = pm.queryIntentActivities(
new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
return (activities.size() != 0);
}
public void configureMicrophoneButton(final int prompt) { public void configureMicrophoneButton(final int prompt) {
if (Preferences.getBoolean(R.string.p_voiceInputEnabled, true) && isVoiceInputAvailable()) { if (Preferences.getBoolean(R.string.p_voiceInputEnabled, true) && VoiceRecognizer.voiceInputAvailable(ContextManager.getContext())) {
voiceButton.setVisibility(View.VISIBLE); voiceButton.setVisibility(View.VISIBLE);
voiceButton.setOnClickListener(new OnClickListener() { voiceButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) { public void onClick(View v) {

@ -0,0 +1,100 @@
package com.todoroo.astrid.voice;
import java.util.List;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.speech.RecognizerIntent;
import android.speech.SpeechRecognizer;
import android.support.v4.app.Fragment;
import android.widget.EditText;
import android.widget.ImageButton;
import com.timsu.astrid.R;
import com.todoroo.aacenc.RecognizerApi;
import com.todoroo.aacenc.RecognizerApi.RecognizerApiListener;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.Preferences;
public class VoiceRecognizer {
protected RecognizerApi recognizerApi;
protected VoiceInputAssistant voiceInputAssistant;
public static boolean speechRecordingAvailable(Context context) {
return AndroidUtilities.getSdkVersion() >= 8 && SpeechRecognizer.isRecognitionAvailable(context);
}
/**
* Call this to see if your phone supports voiceinput in its current configuration.
* If this method returns false, it could also mean that Google Voicesearch is simply
* not installed.
* If this method returns true, internal use of it enables the registered microphone-button.
*
* @return whether this phone supports voiceinput
*/
public static boolean voiceInputAvailable(Context context) {
PackageManager pm = context.getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(
new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
return (activities.size() != 0);
}
private VoiceRecognizer() {
//
}
private static VoiceRecognizer instance = null;
public static VoiceRecognizer instantiateVoiceRecognizer(Context context, RecognizerApiListener listener,
Fragment fragment, ImageButton voiceAddButton, EditText quickAddBox) {
synchronized(VoiceRecognizer.class) {
if (instance == null)
instance = new VoiceRecognizer();
}
if (speechRecordingAvailable(context)) {
if (instance.recognizerApi != null)
instance.recognizerApi.destroy();
instance.recognizerApi = new RecognizerApi(context);
instance.recognizerApi.setListener(listener);
} else {
instance.voiceInputAssistant = new VoiceInputAssistant(fragment,
voiceAddButton, quickAddBox);
}
return instance;
}
public void startVoiceRecognition(Context context, String currentVoiceFile) {
if (speechRecordingAvailable(context)) {
recognizerApi.setTemporaryFile(currentVoiceFile);
recognizerApi.start();
} else {
int prompt = R.string.voice_edit_title_prompt;
if (Preferences.getBoolean(R.string.p_voiceInputCreatesTask, false))
prompt = R.string.voice_create_prompt;
voiceInputAssistant.startVoiceRecognitionActivity(prompt);
}
}
public void destroyRecognizerApi() {
if (instance != null && instance.recognizerApi != null) {
instance.recognizerApi.destroy();
instance.recognizerApi = null;
}
}
public void cancel() {
if (instance != null && instance.recognizerApi != null)
instance.recognizerApi.cancel();
}
public void convert(String filePath) {
if (instance != null && instance.recognizerApi != null)
instance.recognizerApi.convert(filePath);
}
}
Loading…
Cancel
Save