Skip to content

Commit

Permalink
Improved handling of missing TTS and fixed control over maximum voice…
Browse files Browse the repository at this point in the history
… duration
  • Loading branch information
niedev committed Jun 20, 2024
1 parent 0b46dcc commit a0ddc23
Show file tree
Hide file tree
Showing 18 changed files with 172 additions and 65 deletions.
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ android {
defaultConfig {
applicationId "nie.translator.rtranslator"
targetSdkVersion 32 //32
versionCode 15
versionName '2.0.0'
versionCode 16
versionName '2.0.1'
minSdkVersion 24
externalNativeBuild {
cmake {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,12 @@
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentActivity;

import javax.annotation.Nullable;


public abstract class GeneralActivity extends FragmentActivity {

public void showMissingGoogleTTSDialog() {
public void showMissingGoogleTTSDialog(@Nullable DialogInterface.OnClickListener continueListener) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(R.string.error_missing_tts);
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
Expand All @@ -42,6 +44,9 @@ public void onClick(DialogInterface dialog, int which) {
}
}
});
if(continueListener != null){
builder.setNegativeButton(R.string.continue_without_tts, continueListener);
}
builder.create().show();
}

Expand All @@ -52,10 +57,10 @@ public void showGoogleTTSErrorDialog() {
builder.create().show();
}

public void showGoogleTTSErrorDialog(DialogInterface.OnClickListener retryListener) {
public void showGoogleTTSErrorDialog(DialogInterface.OnClickListener continueListener) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(R.string.error_tts);
builder.setPositiveButton(R.string.retry, retryListener);
builder.setPositiveButton(R.string.continue_without_tts, continueListener);
builder.setNegativeButton(R.string.exit, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Expand Down
50 changes: 46 additions & 4 deletions app/src/main/java/nie/translator/rtranslator/Global.java
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ public void onDestroyed() {
}

public void getLanguages(final boolean recycleResult, final GetLocalesListListener responseListener) {
if (recycleResult && languages.size() > 0) {
if (recycleResult && !languages.isEmpty()) {
responseListener.onSuccess(languages);
} else {
TTS.getSupportedLanguages(this, new TTS.SupportedLanguagesListener() {
Expand All @@ -145,6 +145,48 @@ public void onError(int reason) {
}
}

public void getLanguages(final boolean recycleResult, boolean ignoreTTSError,final GetLocalesListListener responseListener) {
if (recycleResult && !languages.isEmpty()) {
responseListener.onSuccess(languages);
} else {
TTS.getSupportedLanguages(this, new TTS.SupportedLanguagesListener() {
@Override
public void onLanguagesListAvailable(ArrayList<CustomLocale> ttsLanguages) {
ArrayList<CustomLocale> translatorLanguages = Translator.getSupportedLanguages(Global.this, Translator.NLLB);
ArrayList<CustomLocale> speechRecognizerLanguages = Recognizer.getSupportedLanguages(Global.this);
//we return only the languages compatible with the speech recognizer, the translator and the tts
final ArrayList<CustomLocale> compatibleLanguages = new ArrayList<>();
for (CustomLocale translatorLanguage : translatorLanguages) {
if (CustomLocale.containsLanguage(ttsLanguages, translatorLanguage) && CustomLocale.containsLanguage(speechRecognizerLanguages, translatorLanguage)) {
compatibleLanguages.add(translatorLanguage);
}
}
languages = compatibleLanguages;
responseListener.onSuccess(compatibleLanguages);
}

@Override
public void onError(int reason) {
if(ignoreTTSError) {
ArrayList<CustomLocale> translatorLanguages = Translator.getSupportedLanguages(Global.this, Translator.NLLB);
ArrayList<CustomLocale> speechRecognizerLanguages = Recognizer.getSupportedLanguages(Global.this);
//we return only the languages compatible with the speech recognizer, the translator and the tts
final ArrayList<CustomLocale> compatibleLanguages = new ArrayList<>();
for (CustomLocale translatorLanguage : translatorLanguages) {
if (CustomLocale.containsLanguage(speechRecognizerLanguages, translatorLanguage)) {
compatibleLanguages.add(translatorLanguage);
}
}
languages = compatibleLanguages;
responseListener.onSuccess(compatibleLanguages);
}else{
responseListener.onFailure(new int[]{reason}, 0);
}
}
});
}
}

public Translator getTranslator() {
return translator;
}
Expand Down Expand Up @@ -195,7 +237,7 @@ public interface GetLocalesListListener {
}

public void getLanguage(final boolean recycleResult, final GetLocaleListener responseListener) {
getLanguages(true, new GetLocalesListListener() {
getLanguages(true, true, new GetLocalesListListener() {
@Override
public void onSuccess(ArrayList<CustomLocale> languages) {
CustomLocale predefinedLanguage = CustomLocale.getDefault();
Expand Down Expand Up @@ -234,7 +276,7 @@ public void onFailure(int[] reasons, long value) {
}

public void getFirstLanguage(final boolean recycleResult, final GetLocaleListener responseListener) {
getLanguages(true, new GetLocalesListListener() {
getLanguages(true, true, new GetLocalesListListener() {
@Override
public void onSuccess(final ArrayList<CustomLocale> languages) {
getLanguage(true, new GetLocaleListener() {
Expand Down Expand Up @@ -283,7 +325,7 @@ public void onFailure(int[] reasons, long value) {
}

public void getSecondLanguage(final boolean recycleResult, final GetLocaleListener responseListener) {
getLanguages(true, new GetLocalesListListener() {
getLanguages(true, true, new GetLocalesListListener() {
@Override
public void onSuccess(ArrayList<CustomLocale> languages) {
CustomLocale predefinedLanguage = CustomLocale.getDefault();
Expand Down
18 changes: 12 additions & 6 deletions app/src/main/java/nie/translator/rtranslator/LoadingActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,8 @@ public void onResume() {
} else if (global.getTranslator() != null && global.getSpeechRecognizer() != null) {
startVoiceTranslationActivity();
} else {
initializeApp();
initializeApp(false);
//onFailure(new int[]{ErrorCodes.GOOGLE_TTS_ERROR}, 0);
}
}

Expand All @@ -94,8 +95,8 @@ protected void onPause() {
isVisible = false;
}

private void initializeApp() {
global.getLanguages(false, new Global.GetLocalesListListener() {
private void initializeApp(boolean ignoreTTSError) {
global.getLanguages(false, ignoreTTSError, new Global.GetLocalesListListener() {
@Override
public void onSuccess(ArrayList<CustomLocale> result) {
global.initializeTranslator(new Translator.InitListener() {
Expand Down Expand Up @@ -148,7 +149,7 @@ public void run() {
showGoogleTTSErrorDialog(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
initializeApp();
initializeApp(true);
}
});
}
Expand All @@ -173,7 +174,7 @@ public void onClick(DialogInterface dialog, int which) {
builder.setPositiveButton(R.string.retry, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
initializeApp();
initializeApp(false);
}
});
AlertDialog dialog = builder.create();
Expand Down Expand Up @@ -212,7 +213,12 @@ private void notifyMissingGoogleTTSDialog() {
@Override
public void run() {
if (isVisible) {
showMissingGoogleTTSDialog();
showMissingGoogleTTSDialog(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
initializeApp(true);
}
});
}
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -193,24 +193,26 @@ public void run() {
if (!error) {
//we update the Gui according to the downloads status
mainHandler.post(() -> {
updateProgress();
//we update the progressDescriptionText
int indexOfRunningTransfer = getIndexOfRunningTransfer();
if(indexOfRunningTransfer != -1){
String downloadName = DOWNLOAD_NAMES[indexOfRunningTransfer];
downloadName = downloadName.replace(".onnx", "");
downloadName = downloadName.replace("_", " ");
progressDescriptionText.setText(getString(R.string.description_transfer, downloadName));
}else{
SharedPreferences sharedPreferences = global.getSharedPreferences("default", Context.MODE_PRIVATE);
long currentDownloadId = sharedPreferences.getLong("currentDownloadId", -1);
if(currentDownloadId >= 0){
int indexOfRunningDownload = downloader.findDownloadUrlIndex(currentDownloadId);
if(indexOfRunningDownload >= 0){
String downloadName = DOWNLOAD_NAMES[indexOfRunningDownload];
downloadName = downloadName.replace(".onnx", "");
downloadName = downloadName.replace("_", " ");
progressDescriptionText.setText(getString(R.string.description_download, downloadName));
if(getContext() != null) {
updateProgress();
//we update the progressDescriptionText
int indexOfRunningTransfer = getIndexOfRunningTransfer();
if (indexOfRunningTransfer != -1) {
String downloadName = DOWNLOAD_NAMES[indexOfRunningTransfer];
downloadName = downloadName.replace(".onnx", "");
downloadName = downloadName.replace("_", " ");
progressDescriptionText.setText(getString(R.string.description_transfer, downloadName));
} else {
SharedPreferences sharedPreferences = global.getSharedPreferences("default", Context.MODE_PRIVATE);
long currentDownloadId = sharedPreferences.getLong("currentDownloadId", -1);
if (currentDownloadId >= 0) {
int indexOfRunningDownload = downloader.findDownloadUrlIndex(currentDownloadId);
if (indexOfRunningDownload >= 0) {
String downloadName = DOWNLOAD_NAMES[indexOfRunningDownload];
downloadName = downloadName.replace(".onnx", "");
downloadName = downloadName.replace("_", " ");
progressDescriptionText.setText(getString(R.string.description_download, downloadName));
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ private void showList() {
reloadButton.setVisibility(View.GONE);
progressBar.setVisibility(View.VISIBLE);

global.getLanguages(true, new Global.GetLocalesListListener() {
global.getLanguages(true, true, new Global.GetLocalesListListener() {
@Override
public void onSuccess(final ArrayList<CustomLocale> languages) {
global.getLanguage(false, new Global.GetLocaleListener() {
Expand All @@ -145,7 +145,7 @@ public void onSuccess(CustomLocale selectedLanguage) {
listViewGui.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
global.getLanguages(true, new Global.GetLocalesListListener() {
global.getLanguages(true, true, new Global.GetLocalesListListener() {
@Override
public void onSuccess(ArrayList<CustomLocale> result) {
if (result.contains((CustomLocale) listView.getItem(position))) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ public void onClick(DialogInterface dialogInterface, int i) {
break;
}
case ON_MISSING_GOOGLE_TTS:
activity.showMissingGoogleTTSDialog();
activity.showMissingGoogleTTSDialog(null);
break;

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public boolean onPreferenceChange(Preference preference, Object newValue) {
}

public void downloadLanguages() {
global.getLanguages(false, new Global.GetLocalesListListener() {
global.getLanguages(false, true, new Global.GetLocalesListListener() {
@Override
public void onSuccess(ArrayList<CustomLocale> result) {
fragment.removeDownload();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,14 @@ public ButtonSound(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

@Override
public void deactivate(int reason) {
super.deactivate(reason);
if(reason == DEACTIVATED_FOR_TTS_ERROR) {
setMute(true);
}
}

public boolean isMute() {
return isMute;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@
import android.content.res.ColorStateList;
import android.util.AttributeSet;
import androidx.appcompat.widget.AppCompatImageButton;

import java.net.PortUnreachableException;

import javax.annotation.Nullable;

public class DeactivableButton extends AppCompatImageButton {
Expand All @@ -28,12 +31,14 @@ public class DeactivableButton extends AppCompatImageButton {
public static final int DEACTIVATED_FOR_CREDIT_EXHAUSTED =2;
public static final int DEACTIVATED_FOR_MISSING_MIC_PERMISSION =3;
public static final int DEACTIVATED_FOR_MISSING_OR_WRONG_KEYFILE =4;
public static final int DEACTIVATED_FOR_TTS_ERROR=5;
protected int activationStatus=0;
private OnClickListener activatedClickListener;
private OnClickListener deactivatedClickListener;
private OnClickListener deactivatedForCreditExhaustedClickListener;
private OnClickListener deactivatedForMissingMicPermissionClickListener;
private OnClickListener deactivatedForMissingOrWrongKeyfileClickListener;
private OnClickListener deactivatedForTTSErrorClickListener;
public static ColorStateList deactivatedColor;
public static ColorStateList activatedColor;
protected ColorStateList color;
Expand Down Expand Up @@ -85,6 +90,13 @@ public void setOnClickListenerForDeactivatedForMissingOrWrongKeyfile(@Nullable O
}
}

public void setOnClickListenerForTTSError(@Nullable OnClickListener l){
deactivatedForTTSErrorClickListener = l;
if(activationStatus == DEACTIVATED_FOR_TTS_ERROR){
super.setOnClickListener(l);
}
}

public void deactivate(int reason){
activationStatus=reason;
switch (reason){
Expand All @@ -104,12 +116,18 @@ public void deactivate(int reason){
super.setOnClickListener(deactivatedForMissingOrWrongKeyfileClickListener);
break;
}
case DEACTIVATED_FOR_TTS_ERROR: {
super.setOnClickListener(deactivatedForTTSErrorClickListener);
break;
}
}
}

public void activate(boolean start){
activationStatus=ACTIVATED;
super.setOnClickListener(activatedClickListener);
if(activationStatus != DEACTIVATED_FOR_TTS_ERROR) {
activationStatus = ACTIVATED;
super.setOnClickListener(activatedClickListener);
}
}


Expand Down
Loading

0 comments on commit a0ddc23

Please sign in to comment.