mirror of https://github.com/M66B/FairEmail.git
parent
7c733c39c6
commit
5ac6155699
@ -1,10 +0,0 @@
|
|||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:width="24dp"
|
|
||||||
android:height="24dp"
|
|
||||||
android:viewportWidth="24"
|
|
||||||
android:viewportHeight="24"
|
|
||||||
android:tint="?attr/colorControlNormal">
|
|
||||||
<path
|
|
||||||
android:fillColor="@android:color/white"
|
|
||||||
android:pathData="M12.87,15.07l-2.54,-2.51 0.03,-0.03c1.74,-1.94 2.98,-4.17 3.71,-6.53L17,6L17,4h-7L10,2L8,2v2L1,4v1.99h11.17C11.5,7.92 10.44,9.75 9,11.35 8.07,10.32 7.3,9.19 6.69,8h-2c0.73,1.63 1.73,3.17 2.98,4.56l-5.09,5.02L4,19l5,-5 3.11,3.11 0.76,-2.04zM18.5,10h-2L12,22h2l1.12,-3h4.75L21,22h2l-4.5,-12zM15.88,17l1.62,-4.33L19.12,17h-3.24z"/>
|
|
||||||
</vector>
|
|
@ -1,28 +0,0 @@
|
|||||||
package eu.faircode.email;
|
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
|
||||||
import android.app.Dialog;
|
|
||||||
import android.os.Bundle;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
|
|
||||||
public class FragmentDialogTranslate extends FragmentDialogBase {
|
|
||||||
@NonNull
|
|
||||||
@Override
|
|
||||||
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
|
|
||||||
return new AlertDialog.Builder(getContext())
|
|
||||||
.setTitle(R.string.title_translate)
|
|
||||||
.create();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void Translate(String text, String targetLanguage, ITranslate intf) {
|
|
||||||
// Stub
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ITranslate {
|
|
||||||
void onTranslated(String language, String text);
|
|
||||||
|
|
||||||
void onError(Throwable ex);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,139 +0,0 @@
|
|||||||
package eu.faircode.email;
|
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
|
||||||
import android.app.Dialog;
|
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.os.Bundle;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
|
|
||||||
import com.google.android.gms.tasks.OnFailureListener;
|
|
||||||
import com.google.android.gms.tasks.OnSuccessListener;
|
|
||||||
import com.google.mlkit.common.model.DownloadConditions;
|
|
||||||
import com.google.mlkit.nl.languageid.LanguageIdentification;
|
|
||||||
import com.google.mlkit.nl.languageid.LanguageIdentificationOptions;
|
|
||||||
import com.google.mlkit.nl.languageid.LanguageIdentifier;
|
|
||||||
import com.google.mlkit.nl.translate.TranslateLanguage;
|
|
||||||
import com.google.mlkit.nl.translate.Translation;
|
|
||||||
import com.google.mlkit.nl.translate.Translator;
|
|
||||||
import com.google.mlkit.nl.translate.TranslatorOptions;
|
|
||||||
|
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.TreeMap;
|
|
||||||
|
|
||||||
import static android.app.Activity.RESULT_OK;
|
|
||||||
|
|
||||||
public class FragmentDialogTranslate extends FragmentDialogBase {
|
|
||||||
@NonNull
|
|
||||||
@Override
|
|
||||||
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
|
|
||||||
final String text = getArguments().getString("text");
|
|
||||||
|
|
||||||
Map<String, String> map = new TreeMap<>();
|
|
||||||
for (String lc : TranslateLanguage.getAllLanguages())
|
|
||||||
map.put(new Locale(lc).getDisplayLanguage(), lc);
|
|
||||||
|
|
||||||
String[] items = map.keySet().toArray(new String[0]);
|
|
||||||
|
|
||||||
return new AlertDialog.Builder(getContext())
|
|
||||||
.setTitle(R.string.title_translate)
|
|
||||||
.setItems(items, new DialogInterface.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
String targetLanguage = map.get(items[which]);
|
|
||||||
|
|
||||||
Translate(text, targetLanguage, new ITranslate() {
|
|
||||||
@Override
|
|
||||||
public void onTranslated(String language, String text) {
|
|
||||||
getArguments().putString("translated", text);
|
|
||||||
sendResult(RESULT_OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onError(Throwable ex) {
|
|
||||||
Log.unexpectedError(getParentFragmentManager(), ex);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.create();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDismiss(@NonNull DialogInterface dialog) {
|
|
||||||
}
|
|
||||||
|
|
||||||
static void Translate(String text, String targetLanguage, ITranslate intf) {
|
|
||||||
LanguageIdentifier languageIdentifier = LanguageIdentification.getClient(
|
|
||||||
new LanguageIdentificationOptions.Builder()
|
|
||||||
.setConfidenceThreshold(0.34f)
|
|
||||||
.build());
|
|
||||||
languageIdentifier.identifyLanguage(text)
|
|
||||||
.addOnSuccessListener(
|
|
||||||
new OnSuccessListener<String>() {
|
|
||||||
@Override
|
|
||||||
public void onSuccess(@Nullable String language) {
|
|
||||||
Log.i("Translate source=" + language);
|
|
||||||
final String sourceLanguage = (language.equals("und") ? TranslateLanguage.ENGLISH : language);
|
|
||||||
|
|
||||||
if (sourceLanguage.equals(targetLanguage)) {
|
|
||||||
intf.onTranslated(sourceLanguage, text);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
TranslatorOptions options = new TranslatorOptions.Builder()
|
|
||||||
.setSourceLanguage(sourceLanguage)
|
|
||||||
.setTargetLanguage(targetLanguage)
|
|
||||||
.build();
|
|
||||||
Translator translator = Translation.getClient(options);
|
|
||||||
DownloadConditions conditions = new DownloadConditions.Builder()
|
|
||||||
.requireWifi()
|
|
||||||
.build();
|
|
||||||
translator.downloadModelIfNeeded(conditions)
|
|
||||||
.addOnSuccessListener(
|
|
||||||
new OnSuccessListener<Void>() {
|
|
||||||
@Override
|
|
||||||
public void onSuccess(Void v) {
|
|
||||||
translator.translate(text)
|
|
||||||
.addOnSuccessListener(
|
|
||||||
new OnSuccessListener<String>() {
|
|
||||||
@Override
|
|
||||||
public void onSuccess(@NonNull String translatedText) {
|
|
||||||
intf.onTranslated(sourceLanguage, translatedText);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.addOnFailureListener(
|
|
||||||
new OnFailureListener() {
|
|
||||||
@Override
|
|
||||||
public void onFailure(@NonNull Exception ex) {
|
|
||||||
intf.onError(ex);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.addOnFailureListener(
|
|
||||||
new OnFailureListener() {
|
|
||||||
@Override
|
|
||||||
public void onFailure(@NonNull Exception ex) {
|
|
||||||
intf.onError(ex);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.addOnFailureListener(
|
|
||||||
new OnFailureListener() {
|
|
||||||
@Override
|
|
||||||
public void onFailure(@NonNull Exception ex) {
|
|
||||||
intf.onError(ex);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ITranslate {
|
|
||||||
void onTranslated(String language, String text);
|
|
||||||
|
|
||||||
void onError(Throwable ex);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in new issue