Skip to content

Commit 1c047da

Browse files
committed
Made fixes to Conversation mode
1 parent 29e13c6 commit 1c047da

6 files changed

Lines changed: 79 additions & 71 deletions

File tree

app/src/main/java/nie/translator/rtranslator/tools/gui/messages/MessagesAdapter.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -236,8 +236,12 @@ private static class ReceivedHolder extends RecyclerView.ViewHolder implements M
236236

237237
@Override
238238
public void setText(String originalTextToBeTranslated, String text) {
239+
if(originalTextToBeTranslated != null && !originalTextToBeTranslated.isEmpty()){
240+
this.originalTextToBeTranslated.setText(originalTextToBeTranslated);
241+
}else{
242+
this.originalTextToBeTranslated.setVisibility(View.GONE);
243+
}
239244
this.textSender.setText(text);
240-
this.originalTextToBeTranslated.setText(originalTextToBeTranslated);
241245
this.text.setText(text);
242246
}
243247

@@ -256,8 +260,8 @@ public void setIsPlayingTTS(boolean playingTTS) {
256260
}else{
257261
ttsButton.setImageResource(R.drawable.sound_icon);
258262
ttsButton.setTag(R.drawable.sound_icon);
259-
ttsButton2.setImageResource(R.drawable.stop_icon);
260-
ttsButton2.setTag(R.drawable.stop_icon);
263+
ttsButton2.setImageResource(R.drawable.sound_icon);
264+
ttsButton2.setTag(R.drawable.sound_icon);
261265
}
262266
}
263267
}
@@ -282,7 +286,11 @@ private static class SendHolder extends RecyclerView.ViewHolder implements Messa
282286

283287
@Override
284288
public void setText(String originalTextToBeTranslated, String text) {
285-
this.originalTextToBeTranslated.setText(originalTextToBeTranslated);
289+
if(originalTextToBeTranslated != null && !originalTextToBeTranslated.isEmpty()){
290+
this.originalTextToBeTranslated.setText(originalTextToBeTranslated);
291+
}else{
292+
this.originalTextToBeTranslated.setVisibility(View.GONE);
293+
}
286294
this.text.setText(text);
287295
}
288296

app/src/main/java/nie/translator/rtranslator/voice_translation/VoiceTranslationService.java

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ public abstract class VoiceTranslationService extends GeneralService {
107107
protected boolean isMicMute = false;
108108
protected boolean isAudioMute = false;
109109
protected boolean isEditTextOpen = false;
110-
protected int utterancesCurrentlySpeaking = 0;
111110
protected final Object mLock = new Object();
112111
protected boolean isMicActivated = true;
113112
protected boolean isMicAutomatic = true;
@@ -262,8 +261,7 @@ protected boolean isMetaText(String text){
262261
// tts
263262
public synchronized void speak(GuiMessage message, CustomLocale language) {
264263
synchronized (mLock) {
265-
if (ttsEngine != null && ttsEngine.isActive() && !isAudioMute) {
266-
utterancesCurrentlySpeaking++;
264+
if (ttsEngine != null && ttsEngine.isActive()) {
267265
ttsEngine.speak(message, language);
268266
}
269267
}
@@ -403,21 +401,6 @@ protected boolean executeCommand(int command, Bundle data) {
403401
}
404402
stopVoiceRecorder();
405403
return true;
406-
case START_SOUND:
407-
isAudioMute = false;
408-
if (ttsEngine != null && !ttsEngine.isActive()) {
409-
initializeTTS();
410-
}
411-
return true;
412-
case STOP_SOUND:
413-
isAudioMute = true;
414-
if (utterancesCurrentlySpeaking > 0) {
415-
utterancesCurrentlySpeaking = 0;
416-
if(ttsEngine != null) {
417-
ttsEngine.stop();
418-
}
419-
}
420-
return true;
421404
case SET_EDIT_TEXT_OPEN:
422405
isEditTextOpen = data.getBoolean("value");
423406
return true;

app/src/main/java/nie/translator/rtranslator/voice_translation/_conversation_mode/_conversation/ConversationService.java

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package nie.translator.rtranslator.voice_translation._conversation_mode._conversation;
1818

1919
import android.content.Context;
20+
import android.content.SharedPreferences;
2021
import android.os.Bundle;
2122
import android.os.Handler;
2223
import android.os.Looper;
@@ -54,7 +55,6 @@ public class ConversationService extends VoiceTranslationService {
5455
public static final int CHANGE_LANGUAGE = 15;
5556

5657
//others
57-
private String textRecognized = "";
5858
private Translator translator;
5959
private String myPeerName;
6060
private Recognizer mVoiceRecognizer;
@@ -73,6 +73,8 @@ public void onCreate() {
7373
isRunning = true;
7474
global = (Global) getApplication();
7575
mainHandler = new Handler(Looper.getMainLooper());
76+
SharedPreferences sharedPreferences = this.getSharedPreferences("default", Context.MODE_PRIVATE);
77+
isAudioMute = !sharedPreferences.getBoolean("conversationAutoTTS", true);
7678
//startBluetoothSco
7779
//mBluetoothHelper = new BluetoothHelper(this);
7880
mVoiceCallback = new Recorder.Callback() {
@@ -103,10 +105,6 @@ public void onVoiceEnd() {
103105
if (mVoiceRecognizer != null) {
104106
super.onVoiceEnd();
105107
Log.e("recorder","onVoiceEnd");
106-
// if the textRecognizer is not empty then it means that we have a result that has not been correctly recognized as final
107-
if (!textRecognized.equals("")) {
108-
textRecognized = "";
109-
}
110108
// the client is notified
111109
ConversationService.super.notifyVoiceEnd();
112110
}
@@ -127,6 +125,22 @@ public boolean handleMessage(final android.os.Message message) {
127125
if (command != -1) {
128126
if (!ConversationService.super.executeCommand(command, message.getData())) {
129127
switch (command) {
128+
case START_SOUND: {
129+
isAudioMute = false;
130+
SharedPreferences sharedPreferences = ConversationService.this.getSharedPreferences("default", Context.MODE_PRIVATE);
131+
SharedPreferences.Editor editor = sharedPreferences.edit();
132+
editor.putBoolean("conversationAutoTTS", true);
133+
editor.apply();
134+
break;
135+
}
136+
case STOP_SOUND: {
137+
isAudioMute = true;
138+
SharedPreferences sharedPreferences = ConversationService.this.getSharedPreferences("default", Context.MODE_PRIVATE);
139+
SharedPreferences.Editor editor = sharedPreferences.edit();
140+
editor.putBoolean("conversationAutoTTS", false);
141+
editor.apply();
142+
break;
143+
}
130144
case RECEIVE_TEXT:
131145
CustomLocale language = global.getLanguage(true);
132146
if (text != null) {
@@ -161,11 +175,13 @@ public void onTranslatedMessage(ConversationMessage conversationMessage, long me
161175
global.getTTSLanguages(true, new Global.GetLocalesListListener() {
162176
@Override
163177
public void onSuccess(ArrayList<CustomLocale> ttsLanguages) {
178+
// updating the text with the new translated and the new transcribed text (and without the language code)
179+
message.setTextToTranslate(text);
180+
message.setText(conversationMessage.getPayload().getText());
164181
GuiMessage guiMessage = new GuiMessage(message, messageID, false, isFinal);
165-
if(isFinal && CustomLocale.containsLanguage(ttsLanguages, conversationMessage.getPayload().getLanguage())) { // check if the language can be speak
182+
if(isFinal && CustomLocale.containsLanguage(ttsLanguages, conversationMessage.getPayload().getLanguage()) && !isAudioMute) { // check if the language can be spoken
166183
speak(guiMessage, conversationMessage.getPayload().getLanguage());
167184
}
168-
message.setText(conversationMessage.getPayload().getText()); // updating the text with the new translated text (and without the language code)
169185
notifyMessage(guiMessage);
170186
// we save every new message in the exchanged messages so that the fragment can restore them
171187
addOrUpdateMessage(guiMessage);
@@ -214,7 +230,6 @@ public void onSpeechRecognizedResult(String text, String languageCode, double co
214230
CustomLocale language = CustomLocale.getInstance(languageCode);
215231
GuiMessage guiMessage = new GuiMessage(new Message(global, text), global.getTranslator().incrementCurrentResultID(), true, isFinal);
216232
if (isFinal) {
217-
textRecognized = ""; // to ensure that we continue to listen since in this case the result is automatically extracted
218233
// send the message
219234
sendMessage(new ConversationMessage(new NeuralNetworkApiText(text, language)));
220235

@@ -223,7 +238,6 @@ public void onSpeechRecognizedResult(String text, String languageCode, double co
223238
addOrUpdateMessage(guiMessage);
224239
} else {
225240
notifyMessage(guiMessage);
226-
textRecognized = text; // if it equals something then when calling voiceEnd we stop recognition
227241
}
228242
}
229243
}

app/src/main/java/nie/translator/rtranslator/voice_translation/_conversation_mode/_conversation/main/ConversationMainFragment.java

Lines changed: 19 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,7 @@ public class ConversationMainFragment extends VoiceTranslationFragment {
6969
//connection
7070
protected VoiceTranslationService.VoiceTranslationServiceCommunicator conversationServiceCommunicator;
7171
protected VoiceTranslationService.VoiceTranslationServiceCallback conversationServiceCallback;
72-
73-
// tts UI states
74-
private android.widget.ImageView currentPlayingIcon = null;
75-
private String currentPlayingUtteranceId = null;
72+
7673

7774
public ConversationMainFragment() {
7875
//an empty constructor is always needed for fragments
@@ -290,7 +287,7 @@ public void restoreAttributesFromService() {
290287
public void onSuccess(ArrayList<GuiMessage> messages, boolean isMicMute, boolean isAudioMute, boolean isTTSError, final boolean isEditTextOpen, boolean isBluetoothHeadsetConnected, boolean isMicAutomatic, boolean isMicActivated, long speakingUtteranceId, int listeningMic) {
291288
container.setVisibility(View.VISIBLE);
292289
// initialization with service values
293-
mAdapter = new MessagesAdapter(messages, global, -1, new MessagesAdapter.Callback() {
290+
mAdapter = new MessagesAdapter(messages, global, speakingUtteranceId, new MessagesAdapter.Callback() {
294291
@Override
295292
public void onFirstItemAdded() {
296293
description.setVisibility(View.GONE);
@@ -299,31 +296,14 @@ public void onFirstItemAdded() {
299296

300297
@Override
301298
public void onTTSButtonClick(final GuiMessage message, final boolean play) {
302-
/*if (icon.getTag() != null && ((int) icon.getTag()) == R.drawable.stop_icon) {
303-
conversationServiceCommunicator.stopSpeakingText();
304-
icon.setImageResource(R.drawable.sound_icon);
305-
icon.setTag(R.drawable.sound_icon);
306-
currentPlayingIcon = null;
307-
currentPlayingUtteranceId = null;
308-
return;
309-
}
310-
311-
if (currentPlayingIcon != null) {
312-
currentPlayingIcon.setImageResource(R.drawable.sound_icon);
313-
currentPlayingIcon.setTag(R.drawable.sound_icon);
299+
if(play){
300+
final String textToSpeak = message.getMessage().getText();
301+
final String utteranceId = String.valueOf(message.getMessageID());
302+
String localeCode = global.getLanguage(true).getCode();
303+
conversationServiceCommunicator.speakText(textToSpeak, localeCode, utteranceId);
304+
}else{
314305
conversationServiceCommunicator.stopSpeakingText();
315306
}
316-
317-
icon.setImageResource(R.drawable.stop_icon);
318-
icon.setTag(R.drawable.stop_icon);
319-
currentPlayingIcon = icon;
320-
321-
final String textToSpeak = message.getMessage().getText();
322-
final String utteranceId = String.valueOf(System.currentTimeMillis());
323-
currentPlayingUtteranceId = utteranceId;
324-
325-
String localeCode = message.isMine() ? global.getSecondLanguage(true).getCode() : global.getFirstLanguage(true).getCode();
326-
conversationServiceCommunicator.speakText(textToSpeak, localeCode, utteranceId);*/
327307
}
328308
});
329309
mRecyclerView.setAdapter(mAdapter);
@@ -468,16 +448,20 @@ public void onDestroy() {
468448

469449

470450
public class ConversationServiceCallback extends VoiceTranslationService.VoiceTranslationServiceCallback {
451+
@Override
452+
public void onTTSStarted(String utteranceId) {
453+
super.onTTSStarted(utteranceId);
454+
if(utteranceId != null) {
455+
long id = Long.parseLong(utteranceId);
456+
mAdapter.setPlayingMessageID(id);
457+
}
458+
}
459+
471460
@Override
472461
public void onTTSDone(String utteranceId) {
473462
super.onTTSDone(utteranceId);
474-
if (utteranceId != null && utteranceId.equals(currentPlayingUtteranceId)) {
475-
if (currentPlayingIcon != null) {
476-
currentPlayingIcon.setImageResource(R.drawable.sound_icon);
477-
currentPlayingIcon.setTag(R.drawable.sound_icon);
478-
currentPlayingIcon = null;
479-
}
480-
currentPlayingUtteranceId = null;
463+
if (utteranceId != null) {
464+
mAdapter.setPlayingMessageID(-1);
481465
}
482466
}
483467

@@ -576,6 +560,4 @@ public void onError(int[] reasons, long value) {
576560
}
577561
}
578562
}
579-
580-
581563
}

app/src/main/java/nie/translator/rtranslator/voice_translation/_walkie_talkie_mode/_walkie_talkie/WalkieTalkieFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ protected void deactivateInputs(int cause) {
478478
if (cause == DeactivableButton.DEACTIVATED) {
479479
sound.deactivate(DeactivableButton.DEACTIVATED);
480480
} else {
481-
sound.activate(false); // to activate the button sound which otherwise remains deactivated and when clicked it shows the message "wait for initialisation"
481+
sound.activate(false); // to activate the button sound which otherwise remains deactivated and when clicked it shows the message "wait for initialization"
482482
}
483483
}
484484

app/src/main/java/nie/translator/rtranslator/voice_translation/_walkie_talkie_mode/_walkie_talkie/WalkieTalkieService.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616

1717
package nie.translator.rtranslator.voice_translation._walkie_talkie_mode._walkie_talkie;
1818

19+
import android.content.Context;
1920
import android.content.Intent;
21+
import android.content.SharedPreferences;
2022
import android.os.Bundle;
2123
import android.os.Handler;
2224
import android.util.Log;
@@ -32,6 +34,7 @@
3234
import nie.translator.rtranslator.voice_translation.VoiceTranslationService;
3335
import nie.translator.rtranslator.bluetooth.Message;
3436
import nie.translator.rtranslator.bluetooth.Peer;
37+
import nie.translator.rtranslator.voice_translation._conversation_mode._conversation.ConversationService;
3538
import nie.translator.rtranslator.voice_translation.neural_networks.NeuralNetworkApiResult;
3639
import nie.translator.rtranslator.voice_translation.neural_networks.translation.Translator;
3740
import nie.translator.rtranslator.voice_translation.neural_networks.voice.Recognizer;
@@ -79,13 +82,31 @@ public void onCreate() {
7982
super.onCreate();
8083
translator = ((Global) getApplication()).getTranslator();
8184
speechRecognizer = ((Global) getApplication()).getSpeechRecognizer();
85+
SharedPreferences sharedPreferences = this.getSharedPreferences("default", Context.MODE_PRIVATE);
86+
isAudioMute = !sharedPreferences.getBoolean("walkieTalkieAutoTTS", true);
8287
clientHandler = new Handler(new Handler.Callback() {
8388
@Override
8489
public boolean handleMessage(@NonNull android.os.Message message) {
8590
int command = message.getData().getInt("command", -1);
8691
if (command != -1) {
8792
if (!WalkieTalkieService.super.executeCommand(command, message.getData())) {
8893
switch (command) {
94+
case START_SOUND: {
95+
isAudioMute = false;
96+
SharedPreferences sharedPreferences = WalkieTalkieService.this.getSharedPreferences("default", Context.MODE_PRIVATE);
97+
SharedPreferences.Editor editor = sharedPreferences.edit();
98+
editor.putBoolean("walkieTalkieAutoTTS", true);
99+
editor.apply();
100+
break;
101+
}
102+
case STOP_SOUND: {
103+
isAudioMute = true;
104+
SharedPreferences sharedPreferences = WalkieTalkieService.this.getSharedPreferences("default", Context.MODE_PRIVATE);
105+
SharedPreferences.Editor editor = sharedPreferences.edit();
106+
editor.putBoolean("walkieTalkieAutoTTS", false);
107+
editor.apply();
108+
break;
109+
}
89110
case CHANGE_FIRST_LANGUAGE:
90111
CustomLocale newFirstLanguage = (CustomLocale) message.getData().getSerializable("language");
91112
if (!firstLanguage.equals(newFirstLanguage)) {
@@ -300,7 +321,7 @@ public void onTranslatedText(String textToTranslate, String text, String[] synon
300321
@Override
301322
public void onSuccess(ArrayList<CustomLocale> ttsLanguages) {
302323
GuiMessage message = new GuiMessage(new Message(textToTranslate, WalkieTalkieService.this, text), resultID, true, isFinal);
303-
if(isFinal && CustomLocale.containsLanguage(ttsLanguages, languageOfText)) { // check if the text can be speak
324+
if(isFinal && CustomLocale.containsLanguage(ttsLanguages, languageOfText) && !isAudioMute) { // check if the text can be spoken
304325
speak(message, languageOfText);
305326
}
306327
WalkieTalkieService.super.notifyMessage(message);
@@ -343,7 +364,7 @@ public void onTranslatedText(String textToTranslate, String text, String[] syno
343364
@Override
344365
public void onSuccess(ArrayList<CustomLocale> ttsLanguages) {
345366
GuiMessage message = new GuiMessage(new Message(textToTranslate, WalkieTalkieService.this, text), resultID, false, isFinal);
346-
if(isFinal && CustomLocale.containsLanguage(ttsLanguages, languageOfText)) { // check if the text can be speak
367+
if(isFinal && CustomLocale.containsLanguage(ttsLanguages, languageOfText) && !isAudioMute) { // check if the text can be spoken
347368
speak(message, languageOfText);
348369
}
349370
WalkieTalkieService.super.notifyMessage(message);

0 commit comments

Comments
 (0)