/* * 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.annotation.TargetApi; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.speech.RecognizerIntent; import java.util.ArrayList; /** * Helper activity used for triggering the Intent recognition, and for collecting the results. */ @TargetApi(4) public class ActivityHelper extends Activity { @SuppressWarnings("unused") private static final String TAG = "ActivityHelper"; private static final int RECOGNITION_REQUEST = 1; private ServiceBridge mServiceBridge; @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); mServiceBridge = new ServiceBridge(); Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getClass().getPackage().getName()); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 5); // Specify the recognition language if provided. String languageLocale = getIntent().getStringExtra(RecognizerIntent.EXTRA_LANGUAGE); if (languageLocale != null) { intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, languageLocale); } startActivityForResult(intent, RECOGNITION_REQUEST); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == RECOGNITION_REQUEST && data != null && data.hasExtra(RecognizerIntent.EXTRA_RESULTS)) { ArrayList<String> results = data .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); createResultDialog(results.toArray(new String[results.size()])).show(); } else { notifyResult(null); } } @TargetApi(11) private Dialog createResultDialog(final String[] recognitionResults) { AlertDialog.Builder builder; if (Build.VERSION.SDK_INT < 11/*Build.VERSION_CODES.HONEYCOMB*/) { builder = new AlertDialog.Builder(this); } else { builder = new AlertDialog.Builder(this, 0x1030071/* android.R.style.Theme_Holo_Dialog_NoActionBar*/); } builder.setItems(recognitionResults, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { notifyResult(recognitionResults[which]); } }); builder.setCancelable(true); builder.setOnCancelListener(new DialogInterface.OnCancelListener() { public void onCancel(DialogInterface dialog) { notifyResult(null); } }); builder.setNeutralButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { notifyResult(null); } }); return builder.create(); } private void notifyResult(String result) { mServiceBridge.notifyResult(this, result); finish(); } }