Skip to content
Snippets Groups Projects
Commit 17bc97c1 authored by Satoshi Kataoka's avatar Satoshi Kataoka Committed by Android (Google) Code Review
Browse files

Merge "Fix resetting the status of VoiceIME when the user is switching from...

Merge "Fix resetting the status of VoiceIME when the user is switching from one VoiceIME to another Voice IME" into honeycomb
parents bab08331 35f1c6a7
No related branches found
No related tags found
No related merge requests found
......@@ -223,6 +223,9 @@ public class SubtypeSwitcher {
}
mMode = newMode;
}
// If the old mode is voice input, we need to reset or cancel its status.
// We cancel its status when we change mode, while we reset otherwise.
if (isKeyboardMode()) {
if (modeChanged) {
if (VOICE_MODE.equals(oldMode) && mVoiceInput != null) {
......@@ -233,17 +236,23 @@ public class SubtypeSwitcher {
updateShortcutIME();
mService.onRefreshKeyboard();
}
} else if (isVoiceMode()) {
} else if (isVoiceMode() && mVoiceInput != null) {
if (VOICE_MODE.equals(oldMode)) {
mVoiceInput.reset();
}
// If needsToShowWarningDialog is true, voice input need to show warning before
// show recognition view.
if (languageChanged || modeChanged
|| VoiceIMEConnector.getInstance().needsToShowWarningDialog()) {
if (mVoiceInput != null) {
triggerVoiceIME();
}
triggerVoiceIME();
}
} else {
Log.w(TAG, "Unknown subtype mode: " + mMode);
if (VOICE_MODE.equals(oldMode) && mVoiceInput != null) {
// We need to reset the voice input to release the resources and to reset its status
// as it is not the current input mode.
mVoiceInput.reset();
}
}
}
......
......@@ -130,19 +130,14 @@ public class VoiceInput implements OnClickListener {
private int mState = DEFAULT;
private final static int MSG_CLOSE_ERROR_DIALOG = 1;
private final static int MSG_RESET = 2;
private final static int MSG_RESET = 1;
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == MSG_RESET || msg.what == MSG_CLOSE_ERROR_DIALOG) {
if (msg.what == MSG_RESET) {
mState = DEFAULT;
mRecognitionView.finish();
}
if (msg.what == MSG_CLOSE_ERROR_DIALOG) {
mUiListener.onCancelVoice();
}
}
......@@ -318,7 +313,14 @@ public class VoiceInput implements OnClickListener {
if (DBG) {
Log.d(TAG, "startListening: " + context);
}
mState = DEFAULT;
if (mState != DEFAULT) {
Log.w(TAG, "startListening in the wrong status " + mState);
}
// If everything works ok, the voice input should be already in the correct state. As this
// class can be called by third-party, we call reset just to be on the safe side.
reset();
Locale locale = Locale.getDefault();
String localeString = locale.getLanguage() + "-" + locale.getCountry();
......@@ -503,6 +505,21 @@ public class VoiceInput implements OnClickListener {
return intent;
}
/**
* Reset the current voice recognition.
*/
public void reset() {
if (mState != DEFAULT) {
mState = DEFAULT;
// Remove all pending tasks (e.g., timers to cancel voice input)
mHandler.removeMessages(MSG_RESET);
mSpeechRecognizer.cancel();
mRecognitionView.finish();
}
}
/**
* Cancel in-progress speech recognition.
*/
......@@ -518,14 +535,9 @@ public class VoiceInput implements OnClickListener {
mLogger.cancelDuringError();
break;
}
mState = DEFAULT;
// Remove all pending tasks (e.g., timers to cancel voice input)
mHandler.removeMessages(MSG_RESET);
mSpeechRecognizer.cancel();
reset();
mUiListener.onCancelVoice();
mRecognitionView.finish();
}
private int getErrorStringId(int errorType, boolean endpointed) {
......@@ -560,7 +572,7 @@ public class VoiceInput implements OnClickListener {
mState = ERROR;
mRecognitionView.showError(error);
// Wait a couple seconds and then automatically dismiss message.
mHandler.sendMessageDelayed(Message.obtain(mHandler, MSG_CLOSE_ERROR_DIALOG), 2000);
mHandler.sendMessageDelayed(Message.obtain(mHandler, MSG_RESET), 2000);
}
private class ImeRecognitionListener implements RecognitionListener {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment