/*
* Copyright (c) 2013 Menny Even-Danan
*
* 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.anysoftkeyboard.voice;
import android.content.Intent;
import android.inputmethodservice.InputMethodService;
import com.anysoftkeyboard.utils.Log;
/**
* Triggers a voice recognition by using {@link ImeTrigger} or
* {@link IntentApiTrigger}.
*/
public class VoiceRecognitionTrigger implements VoiceInput {
private static final String TAG = "ASK_VoiceRecognitionTrigger";
protected final InputMethodService mInputMethodService;
private Trigger mTrigger;
public VoiceRecognitionTrigger(VoiceInputDiagram diagram) {
mInputMethodService = diagram.getInputMethodService();
mTrigger = getTrigger();
}
protected Trigger getTrigger() {
if (IntentApiTrigger.isInstalled(mInputMethodService)) {
return getIntentTrigger();
} else {
Log.d(TAG, "IntentApiTrigger is not installed");
return null;
}
}
private Trigger getIntentTrigger() {
return new IntentApiTrigger(mInputMethodService);
}
/**
* Starts a voice recognition. The language of the recognition will match
* the voice search language settings, or the locale of the calling IME.
*/
public void startVoiceRecognition() {
startVoiceRecognition(null);
}
/*
* (non-Javadoc)
*
* @see
* com.anysoftkeyboard.voice.VoiceInput#startVoiceRecognition(java.lang.
* String)
*/
public void startVoiceRecognition(String language) {
// The trigger is refreshed as the system may have changed in the
// meanwhile.
mTrigger = getTrigger();
if (mTrigger != null) {
mTrigger.startVoiceRecognition(language);
} else {
Intent notInstalledActivity = new Intent(
mInputMethodService.getApplicationContext(),
VoiceInputNotInstalledActivity.class);
notInstalledActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mInputMethodService.getApplicationContext().startActivity(
notInstalledActivity);
}
}
/*
* (non-Javadoc)
*
* @see com.anysoftkeyboard.voice.VoiceInput#onStartInputView()
*/
public void onStartInputView() {
if (mTrigger != null) {
mTrigger.onStartInputView();
}
}
}