mirror of
https://github.com/moparisthebest/Yaaic
synced 2024-11-29 20:32:22 -05:00
Added voice recognition to yaaic
This commit is contained in:
parent
a1731b597b
commit
17aba7ca71
@ -60,10 +60,21 @@ along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
android:id="@+id/dots"
|
android:id="@+id/dots"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content" />
|
android:layout_height="wrap_content" />
|
||||||
<EditText
|
<LinearLayout
|
||||||
android:id="@+id/input"
|
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/input"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:imeOptions="actionSend" />
|
android:imeOptions="actionSend" />
|
||||||
|
<Button
|
||||||
|
android:id="@+id/speech"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:drawableLeft="@android:drawable/ic_btn_speak_now" />
|
||||||
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
@ -20,7 +20,9 @@ along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
*/
|
*/
|
||||||
package org.yaaic.activity;
|
package org.yaaic.activity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.yaaic.R;
|
import org.yaaic.R;
|
||||||
import org.yaaic.Yaaic;
|
import org.yaaic.Yaaic;
|
||||||
@ -35,6 +37,7 @@ import org.yaaic.listener.ConversationClickListener;
|
|||||||
import org.yaaic.listener.ConversationListener;
|
import org.yaaic.listener.ConversationListener;
|
||||||
import org.yaaic.listener.ConversationSelectedListener;
|
import org.yaaic.listener.ConversationSelectedListener;
|
||||||
import org.yaaic.listener.ServerListener;
|
import org.yaaic.listener.ServerListener;
|
||||||
|
import org.yaaic.listener.SpeechClickListener;
|
||||||
import org.yaaic.model.Broadcast;
|
import org.yaaic.model.Broadcast;
|
||||||
import org.yaaic.model.Conversation;
|
import org.yaaic.model.Conversation;
|
||||||
import org.yaaic.model.Extra;
|
import org.yaaic.model.Extra;
|
||||||
@ -54,8 +57,11 @@ import android.content.DialogInterface;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.content.ServiceConnection;
|
import android.content.ServiceConnection;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.content.pm.ResolveInfo;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
|
import android.speech.RecognizerIntent;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
@ -63,6 +69,7 @@ import android.view.MenuItem;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnKeyListener;
|
import android.view.View.OnKeyListener;
|
||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
|
import android.widget.Button;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.Gallery;
|
import android.widget.Gallery;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
@ -77,6 +84,8 @@ import android.widget.ViewSwitcher;
|
|||||||
*/
|
*/
|
||||||
public class ConversationActivity extends Activity implements ServiceConnection, ServerListener, ConversationListener, OnKeyListener
|
public class ConversationActivity extends Activity implements ServiceConnection, ServerListener, ConversationListener, OnKeyListener
|
||||||
{
|
{
|
||||||
|
public static final int REQUEST_CODE_SPEECH = 99;
|
||||||
|
|
||||||
private static final int REQUEST_CODE_JOIN = 1;
|
private static final int REQUEST_CODE_JOIN = 1;
|
||||||
private static final int REQUEST_CODE_USERS = 2;
|
private static final int REQUEST_CODE_USERS = 2;
|
||||||
private static final int REQUEST_CODE_USER = 3;
|
private static final int REQUEST_CODE_USER = 3;
|
||||||
@ -135,6 +144,16 @@ public class ConversationActivity extends Activity implements ServiceConnection,
|
|||||||
deckAdapter.clearConversations();
|
deckAdapter.clearConversations();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if speech recognition is available
|
||||||
|
PackageManager pm = getPackageManager();
|
||||||
|
Button speechButton = (Button) findViewById(R.id.speech);
|
||||||
|
List<ResolveInfo> activities = pm.queryIntentActivities(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
|
||||||
|
if (activities.size() != 0) {
|
||||||
|
((Button) findViewById(R.id.speech)).setOnClickListener(new SpeechClickListener(this));
|
||||||
|
} else {
|
||||||
|
speechButton.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
// Optimization : cache field lookups
|
// Optimization : cache field lookups
|
||||||
Collection<Conversation> mConversations = server.getConversations();
|
Collection<Conversation> mConversations = server.getConversations();
|
||||||
|
|
||||||
@ -530,6 +549,15 @@ public class ConversationActivity extends Activity implements ServiceConnection,
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (requestCode) {
|
switch (requestCode) {
|
||||||
|
case REQUEST_CODE_SPEECH:
|
||||||
|
ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
|
||||||
|
StringBuffer buffer = new StringBuffer();
|
||||||
|
for (String partial : matches) {
|
||||||
|
buffer.append(" ");
|
||||||
|
buffer.append(partial);
|
||||||
|
}
|
||||||
|
((EditText) findViewById(R.id.input)).setText(buffer.toString().trim());
|
||||||
|
break;
|
||||||
case REQUEST_CODE_JOIN:
|
case REQUEST_CODE_JOIN:
|
||||||
joinChannelBuffer = data.getExtras().getString("channel");
|
joinChannelBuffer = data.getExtras().getString("channel");
|
||||||
break;
|
break;
|
||||||
|
63
src/org/yaaic/listener/SpeechClickListener.java
Normal file
63
src/org/yaaic/listener/SpeechClickListener.java
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
/*
|
||||||
|
Yaaic - Yet Another Android IRC Client
|
||||||
|
|
||||||
|
Copyright 2009-2010 Sebastian Kaspari
|
||||||
|
|
||||||
|
This file is part of Yaaic.
|
||||||
|
|
||||||
|
Yaaic is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Yaaic is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.yaaic.listener;
|
||||||
|
|
||||||
|
import org.yaaic.activity.ConversationActivity;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.speech.RecognizerIntent;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.View.OnClickListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OnClickListener for the Speech Recognition Button
|
||||||
|
*
|
||||||
|
* @author Sebastian Kaspari <sebastian@yaaic.org>
|
||||||
|
*/
|
||||||
|
public class SpeechClickListener implements OnClickListener
|
||||||
|
{
|
||||||
|
private Activity activity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new listener for speech button
|
||||||
|
*
|
||||||
|
* @param activity
|
||||||
|
* @param input
|
||||||
|
*/
|
||||||
|
public SpeechClickListener(Activity activity)
|
||||||
|
{
|
||||||
|
this.activity = activity;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On Click on speech button
|
||||||
|
*/
|
||||||
|
public void onClick(View v)
|
||||||
|
{
|
||||||
|
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
|
||||||
|
|
||||||
|
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
|
||||||
|
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "");
|
||||||
|
|
||||||
|
activity.startActivityForResult(intent, ConversationActivity.REQUEST_CODE_SPEECH);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user