package ru.shutoff.cgstarter;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import java.util.ArrayList;
import java.util.List;
public class VoiceSearch extends Activity {
static final int REQUEST_CODE_VOICE_SEARCH = 1;
static final int SEARCH_RESULT = 2;
boolean started;
static boolean isVoiceSearch(Context context) {
PackageManager pm = context.getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
return activities.size() > 0;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setResult(RESULT_CANCELED);
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
try {
Intent i = getIntent();
if (i.getStringExtra("TextSearch") != null) {
final AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle(getString(R.string.search))
.setView(inflater.inflate(R.layout.text_search, null, false))
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.search, null)
.create();
dialog.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
dialog.show();
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
if (!started)
finish();
}
});
final Button btn = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
btn.setEnabled(false);
final EditText ed = (EditText) dialog.findViewById(R.id.text);
ed.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
btn.setEnabled(!s.toString().isEmpty());
}
});
ed.requestFocus();
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
started = true;
Intent i = new Intent(VoiceSearch.this, SearchActivity.class);
ArrayList<String> res = new ArrayList<String>();
res.add(ed.getText().toString());
i.putExtra(RecognizerIntent.EXTRA_RESULTS, res);
startActivityForResult(i, SEARCH_RESULT);
dialog.dismiss();
}
});
} else {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
startActivityForResult(intent, REQUEST_CODE_VOICE_SEARCH);
}
} catch (Exception ex) {
finish();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if ((requestCode == SEARCH_RESULT) && (resultCode == RESULT_OK)) {
setResult(RESULT_OK);
finish();
return;
}
if (resultCode != RESULT_OK) {
finish();
return;
}
Intent i = new Intent(this, SearchActivity.class);
i.putExtra(RecognizerIntent.EXTRA_RESULTS, data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS));
i.putExtra(RecognizerIntent.EXTRA_CONFIDENCE_SCORES, data.getFloatArrayExtra(RecognizerIntent.EXTRA_CONFIDENCE_SCORES));
startActivityForResult(i, SEARCH_RESULT);
}
}