Loading app/src/main/java/app/fedilab/android/activities/MediaActivity.java +17 −77 Original line number Diff line number Diff line Loading @@ -21,14 +21,12 @@ import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.graphics.Point; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.text.Html; import android.view.Display; import android.view.Menu; import android.view.MenuItem; Loading @@ -44,15 +42,8 @@ import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentStatePagerAdapter; import androidx.preference.PreferenceManager; import androidx.viewpager.widget.ViewPager; import com.github.stom79.mytransl.MyTransL; import com.github.stom79.mytransl.client.HttpsConnectionException; import com.github.stom79.mytransl.client.Results; import com.github.stom79.mytransl.translate.Params; import com.github.stom79.mytransl.translate.Translate; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; Loading @@ -63,6 +54,7 @@ import app.fedilab.android.client.entities.api.Status; import app.fedilab.android.databinding.ActivityMediaPagerBinding; import app.fedilab.android.helper.Helper; import app.fedilab.android.helper.MediaHelper; import app.fedilab.android.helper.TranslateHelper; import app.fedilab.android.interfaces.OnDownloadInterface; import app.fedilab.android.ui.fragment.media.FragmentMedia; import es.dmoral.toasty.Toasty; Loading Loading @@ -157,41 +149,15 @@ public class MediaActivity extends BaseTransparentActivity implements OnDownload binding.mediaDescription.setText(description); binding.translate.setOnClickListener(v -> { String descriptionToTranslate = attachments.get(mediaPosition - 1).description; MyTransL.translatorEngine et = MyTransL.translatorEngine.LIBRETRANSLATE; final MyTransL myTransL = MyTransL.getInstance(et); myTransL.setObfuscation(true); Params params = new Params(); params.setSplit_sentences(false); params.setFormat(Params.fType.TEXT); params.setSource_lang("auto"); myTransL.setLibretranslateDomain("translate.fedilab.app"); String statusToTranslate; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) statusToTranslate = Html.fromHtml(descriptionToTranslate, Html.FROM_HTML_MODE_LEGACY).toString(); else statusToTranslate = Html.fromHtml(descriptionToTranslate).toString(); SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(MediaActivity.this); String translate = sharedpreferences.getString(getString(R.string.SET_LIVE_TRANSLATE), MyTransL.getLocale()); if (translate != null && translate.equalsIgnoreCase("default")) { translate = MyTransL.getLocale(); } myTransL.translate(statusToTranslate, translate, params, new Results() { @Override public void onSuccess(Translate translate) { if (translate.getTranslatedContent() != null) { attachments.get(mediaPosition - 1).translation = translate.getTranslatedContent(); binding.mediaDescriptionTranslated.setText(translate.getTranslatedContent()); TranslateHelper.translate(MediaActivity.this, descriptionToTranslate, translated -> { if (translated != null) { attachments.get(mediaPosition - 1).translation = translated; binding.mediaDescriptionTranslated.setText(translated); binding.mediaDescriptionTranslated.setVisibility(View.VISIBLE); binding.mediaDescription.setVisibility(View.GONE); } else { Toasty.error(MediaActivity.this, getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show(); } } @Override public void onFail(HttpsConnectionException httpsConnectionException) { } }); }); if (attachments.get(mediaPosition - 1).translation != null) { Loading Loading @@ -222,41 +188,15 @@ public class MediaActivity extends BaseTransparentActivity implements OnDownload } binding.translate.setOnClickListener(v -> { String descriptionToTranslate = attachments.get(position).description; MyTransL.translatorEngine et = MyTransL.translatorEngine.LIBRETRANSLATE; final MyTransL myTransL = MyTransL.getInstance(et); myTransL.setObfuscation(true); Params params = new Params(); params.setSplit_sentences(false); params.setFormat(Params.fType.TEXT); params.setSource_lang("auto"); myTransL.setLibretranslateDomain("translate.fedilab.app"); String statusToTranslate; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) statusToTranslate = Html.fromHtml(descriptionToTranslate, Html.FROM_HTML_MODE_LEGACY).toString(); else statusToTranslate = Html.fromHtml(descriptionToTranslate).toString(); SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(MediaActivity.this); String translate = sharedpreferences.getString(getString(R.string.SET_LIVE_TRANSLATE), MyTransL.getLocale()); if (translate != null && translate.equalsIgnoreCase("default")) { translate = MyTransL.getLocale(); } myTransL.translate(statusToTranslate, translate, params, new Results() { @Override public void onSuccess(Translate translate) { if (translate.getTranslatedContent() != null) { attachments.get(position).translation = translate.getTranslatedContent(); binding.mediaDescriptionTranslated.setText(translate.getTranslatedContent()); TranslateHelper.translate(MediaActivity.this, descriptionToTranslate, translated -> { if (translated != null) { attachments.get(position).translation = translated; binding.mediaDescriptionTranslated.setText(translated); binding.mediaDescriptionTranslated.setVisibility(View.VISIBLE); binding.mediaDescription.setVisibility(View.GONE); } else { Toasty.error(MediaActivity.this, getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show(); } } @Override public void onFail(HttpsConnectionException httpsConnectionException) { } }); }); if (!fullscreen) { Loading app/src/main/java/app/fedilab/android/helper/Helper.java +5 −1 Original line number Diff line number Diff line Loading @@ -124,14 +124,17 @@ import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.Random; import java.util.Set; import java.util.TimeZone; import java.util.UUID; import java.util.regex.Matcher; Loading Loading @@ -1236,7 +1239,8 @@ public class Helper { counter++; Date now = new Date(); attachment.filename = formatter.format(now) + "." + extension; if (attachment.mimeType.startsWith("image")) { Set<String> imageType = new HashSet<>(Arrays.asList("image/png", "image/jpeg", "image/jpg")); if (imageType.contains(attachment.mimeType)) { final File certCacheDir = new File(context.getCacheDir(), TEMP_MEDIA_DIRECTORY); boolean isCertCacheDirExists = certCacheDir.exists(); if (!isCertCacheDirExists) { Loading app/src/main/java/app/fedilab/android/helper/TranslateHelper.java 0 → 100644 +91 −0 Original line number Diff line number Diff line package app.fedilab.android.helper; /* Copyright 2022 Thomas Schneider * * This file is a part of Fedilab * * This program 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. * * Fedilab 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 Fedilab; if not, * see <http://www.gnu.org/licenses>. */ import android.content.Context; import android.content.SharedPreferences; import android.os.Build; import android.text.Html; import android.widget.Toast; import androidx.preference.PreferenceManager; import com.github.stom79.mytransl.MyTransL; import com.github.stom79.mytransl.client.HttpsConnectionException; import com.github.stom79.mytransl.client.Results; import com.github.stom79.mytransl.translate.Params; import app.fedilab.android.R; import es.dmoral.toasty.Toasty; public class TranslateHelper { public static void translate(Context context, String toTranslate, Translate callback) { String statusToTranslate; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) statusToTranslate = Html.fromHtml(toTranslate, Html.FROM_HTML_MODE_LEGACY).toString(); else statusToTranslate = Html.fromHtml(toTranslate).toString(); SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context); String translator = sharedpreferences.getString(context.getString(R.string.SET_TRANSLATOR), "FEDILAB"); MyTransL.translatorEngine et; if (translator.compareToIgnoreCase("FEDILAB") == 0) { et = MyTransL.translatorEngine.LIBRETRANSLATE; } else { et = MyTransL.translatorEngine.DEEPL; } final MyTransL myTransL = MyTransL.getInstance(et); myTransL.setObfuscation(true); Params params = new Params(); params.setSplit_sentences(false); params.setFormat(Params.fType.TEXT); params.setSource_lang("auto"); if (translator.compareToIgnoreCase("FEDILAB") == 0) { myTransL.setLibretranslateDomain("translate.fedilab.app"); } else { String translatorVersion = sharedpreferences.getString(context.getString(R.string.SET_TRANSLATOR_VERSION), "PRO"); params.setPro(translatorVersion.equals("PRO")); String apikey = sharedpreferences.getString(context.getString(R.string.SET_TRANSLATOR_API_KEY), null); myTransL.setDeeplAPIKey(apikey.trim()); } String translate = sharedpreferences.getString(context.getString(R.string.SET_LIVE_TRANSLATE), MyTransL.getLocale()); if (translate.equalsIgnoreCase("default")) { translate = MyTransL.getLocale(); } myTransL.translate(statusToTranslate, translate, params, new Results() { @Override public void onSuccess(com.github.stom79.mytransl.translate.Translate translate) { if (translate.getTranslatedContent() != null) { callback.onTranslate(translate.getTranslatedContent()); } else { callback.onTranslate(""); Toasty.error(context, context.getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show(); } } @Override public void onFail(HttpsConnectionException httpsConnectionException) { callback.onTranslate(""); Toasty.error(context, context.getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show(); } }); } public interface Translate { void onTranslate(String translated); } } app/src/main/java/app/fedilab/android/ui/drawer/ReleaseNoteAdapter.java +8 −38 Original line number Diff line number Diff line Loading @@ -16,28 +16,21 @@ package app.fedilab.android.ui.drawer; import android.content.Context; import android.content.SharedPreferences; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.preference.PreferenceManager; import androidx.recyclerview.widget.RecyclerView; import com.github.stom79.mytransl.MyTransL; import com.github.stom79.mytransl.client.HttpsConnectionException; import com.github.stom79.mytransl.client.Results; import com.github.stom79.mytransl.translate.Params; import com.github.stom79.mytransl.translate.Translate; import java.util.List; import java.util.Locale; import app.fedilab.android.R; import app.fedilab.android.client.entities.app.ReleaseNote; import app.fedilab.android.databinding.DrawerReleaseNoteBinding; import app.fedilab.android.helper.TranslateHelper; import es.dmoral.toasty.Toasty; Loading Loading @@ -81,37 +74,14 @@ public class ReleaseNoteAdapter extends RecyclerView.Adapter<ReleaseNoteAdapter. holder.binding.containerTrans.setVisibility(View.GONE); holder.binding.translate.setVisibility(View.VISIBLE); } holder.binding.translate.setOnClickListener(v -> { MyTransL.translatorEngine et = MyTransL.translatorEngine.LIBRETRANSLATE; final MyTransL myTransL = MyTransL.getInstance(et); myTransL.setObfuscation(true); Params params = new Params(); params.setSplit_sentences(false); params.setFormat(Params.fType.TEXT); params.setSource_lang("auto"); myTransL.setLibretranslateDomain("translate.fedilab.app"); SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context); String translate = sharedpreferences.getString(context.getString(R.string.SET_LIVE_TRANSLATE), MyTransL.getLocale()); if (translate != null && translate.equalsIgnoreCase("default")) { translate = MyTransL.getLocale(); } myTransL.translate(note.note, translate, params, new Results() { @Override public void onSuccess(Translate translate) { if (translate.getTranslatedContent() != null) { note.noteTranslated = translate.getTranslatedContent(); holder.binding.translate.setOnClickListener(v -> TranslateHelper.translate(context, note.note, translated -> { if (translated != null) { note.noteTranslated = translated; notifyItemChanged(holder.getBindingAdapterPosition()); } else { Toasty.error(context, context.getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show(); } } @Override public void onFail(HttpsConnectionException httpsConnectionException) { Toasty.error(context, context.getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show(); } }); }); })); } Loading app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java +9 −36 Original line number Diff line number Diff line Loading @@ -87,10 +87,6 @@ import com.bumptech.glide.RequestBuilder; import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.bumptech.glide.request.RequestOptions; import com.github.stom79.mytransl.MyTransL; import com.github.stom79.mytransl.client.HttpsConnectionException; import com.github.stom79.mytransl.client.Results; import com.github.stom79.mytransl.translate.Params; import com.github.stom79.mytransl.translate.Translate; import com.vanniktech.emoji.EmojiManager; import com.vanniktech.emoji.EmojiPopup; import com.vanniktech.emoji.one.EmojiOneProvider; Loading Loading @@ -145,6 +141,7 @@ import app.fedilab.android.helper.MediaHelper; import app.fedilab.android.helper.SpannableHelper; import app.fedilab.android.helper.ThemeHelper; import app.fedilab.android.helper.TimelineHelper; import app.fedilab.android.helper.TranslateHelper; import app.fedilab.android.ui.fragment.timeline.FragmentMastodonContext; import app.fedilab.android.viewmodel.mastodon.AccountsVM; import app.fedilab.android.viewmodel.mastodon.SearchVM; Loading Loading @@ -1982,6 +1979,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> } private static void translate(Context context, Status statusToDeal, StatusViewHolder holder, RecyclerView.Adapter<RecyclerView.ViewHolder> adapter) { Loading @@ -1990,41 +1988,16 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> statusToTranslate = Html.fromHtml(statusToDeal.content, Html.FROM_HTML_MODE_LEGACY).toString(); else statusToTranslate = Html.fromHtml(statusToDeal.content).toString(); int countMorseChar = ComposeAdapter.countMorseChar(statusToTranslate); if (countMorseChar < 4) { MyTransL.translatorEngine et = MyTransL.translatorEngine.LIBRETRANSLATE; final MyTransL myTransL = MyTransL.getInstance(et); myTransL.setObfuscation(true); Params params = new Params(); params.setSplit_sentences(false); params.setFormat(Params.fType.TEXT); params.setSource_lang("auto"); myTransL.setLibretranslateDomain("translate.fedilab.app"); SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context); String translate = sharedpreferences.getString(context.getString(R.string.SET_LIVE_TRANSLATE), MyTransL.getLocale()); if (translate != null && translate.equalsIgnoreCase("default")) { translate = MyTransL.getLocale(); } myTransL.translate(statusToTranslate, translate, params, new Results() { @Override public void onSuccess(Translate translate) { if (translate.getTranslatedContent() != null) { TranslateHelper.translate(context, statusToDeal.content, translated -> { if (translated != null) { statusToDeal.translationShown = true; statusToDeal.translationContent = translate.getTranslatedContent(); statusToDeal.translationContent = translated; adapter.notifyItemChanged(holder.getBindingAdapterPosition()); } else { Toasty.error(context, context.getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show(); } } @Override public void onFail(HttpsConnectionException httpsConnectionException) { } }); } else { statusToDeal.translationShown = true; Loading Loading
app/src/main/java/app/fedilab/android/activities/MediaActivity.java +17 −77 Original line number Diff line number Diff line Loading @@ -21,14 +21,12 @@ import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.graphics.Point; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.text.Html; import android.view.Display; import android.view.Menu; import android.view.MenuItem; Loading @@ -44,15 +42,8 @@ import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentStatePagerAdapter; import androidx.preference.PreferenceManager; import androidx.viewpager.widget.ViewPager; import com.github.stom79.mytransl.MyTransL; import com.github.stom79.mytransl.client.HttpsConnectionException; import com.github.stom79.mytransl.client.Results; import com.github.stom79.mytransl.translate.Params; import com.github.stom79.mytransl.translate.Translate; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; Loading @@ -63,6 +54,7 @@ import app.fedilab.android.client.entities.api.Status; import app.fedilab.android.databinding.ActivityMediaPagerBinding; import app.fedilab.android.helper.Helper; import app.fedilab.android.helper.MediaHelper; import app.fedilab.android.helper.TranslateHelper; import app.fedilab.android.interfaces.OnDownloadInterface; import app.fedilab.android.ui.fragment.media.FragmentMedia; import es.dmoral.toasty.Toasty; Loading Loading @@ -157,41 +149,15 @@ public class MediaActivity extends BaseTransparentActivity implements OnDownload binding.mediaDescription.setText(description); binding.translate.setOnClickListener(v -> { String descriptionToTranslate = attachments.get(mediaPosition - 1).description; MyTransL.translatorEngine et = MyTransL.translatorEngine.LIBRETRANSLATE; final MyTransL myTransL = MyTransL.getInstance(et); myTransL.setObfuscation(true); Params params = new Params(); params.setSplit_sentences(false); params.setFormat(Params.fType.TEXT); params.setSource_lang("auto"); myTransL.setLibretranslateDomain("translate.fedilab.app"); String statusToTranslate; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) statusToTranslate = Html.fromHtml(descriptionToTranslate, Html.FROM_HTML_MODE_LEGACY).toString(); else statusToTranslate = Html.fromHtml(descriptionToTranslate).toString(); SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(MediaActivity.this); String translate = sharedpreferences.getString(getString(R.string.SET_LIVE_TRANSLATE), MyTransL.getLocale()); if (translate != null && translate.equalsIgnoreCase("default")) { translate = MyTransL.getLocale(); } myTransL.translate(statusToTranslate, translate, params, new Results() { @Override public void onSuccess(Translate translate) { if (translate.getTranslatedContent() != null) { attachments.get(mediaPosition - 1).translation = translate.getTranslatedContent(); binding.mediaDescriptionTranslated.setText(translate.getTranslatedContent()); TranslateHelper.translate(MediaActivity.this, descriptionToTranslate, translated -> { if (translated != null) { attachments.get(mediaPosition - 1).translation = translated; binding.mediaDescriptionTranslated.setText(translated); binding.mediaDescriptionTranslated.setVisibility(View.VISIBLE); binding.mediaDescription.setVisibility(View.GONE); } else { Toasty.error(MediaActivity.this, getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show(); } } @Override public void onFail(HttpsConnectionException httpsConnectionException) { } }); }); if (attachments.get(mediaPosition - 1).translation != null) { Loading Loading @@ -222,41 +188,15 @@ public class MediaActivity extends BaseTransparentActivity implements OnDownload } binding.translate.setOnClickListener(v -> { String descriptionToTranslate = attachments.get(position).description; MyTransL.translatorEngine et = MyTransL.translatorEngine.LIBRETRANSLATE; final MyTransL myTransL = MyTransL.getInstance(et); myTransL.setObfuscation(true); Params params = new Params(); params.setSplit_sentences(false); params.setFormat(Params.fType.TEXT); params.setSource_lang("auto"); myTransL.setLibretranslateDomain("translate.fedilab.app"); String statusToTranslate; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) statusToTranslate = Html.fromHtml(descriptionToTranslate, Html.FROM_HTML_MODE_LEGACY).toString(); else statusToTranslate = Html.fromHtml(descriptionToTranslate).toString(); SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(MediaActivity.this); String translate = sharedpreferences.getString(getString(R.string.SET_LIVE_TRANSLATE), MyTransL.getLocale()); if (translate != null && translate.equalsIgnoreCase("default")) { translate = MyTransL.getLocale(); } myTransL.translate(statusToTranslate, translate, params, new Results() { @Override public void onSuccess(Translate translate) { if (translate.getTranslatedContent() != null) { attachments.get(position).translation = translate.getTranslatedContent(); binding.mediaDescriptionTranslated.setText(translate.getTranslatedContent()); TranslateHelper.translate(MediaActivity.this, descriptionToTranslate, translated -> { if (translated != null) { attachments.get(position).translation = translated; binding.mediaDescriptionTranslated.setText(translated); binding.mediaDescriptionTranslated.setVisibility(View.VISIBLE); binding.mediaDescription.setVisibility(View.GONE); } else { Toasty.error(MediaActivity.this, getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show(); } } @Override public void onFail(HttpsConnectionException httpsConnectionException) { } }); }); if (!fullscreen) { Loading
app/src/main/java/app/fedilab/android/helper/Helper.java +5 −1 Original line number Diff line number Diff line Loading @@ -124,14 +124,17 @@ import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.Random; import java.util.Set; import java.util.TimeZone; import java.util.UUID; import java.util.regex.Matcher; Loading Loading @@ -1236,7 +1239,8 @@ public class Helper { counter++; Date now = new Date(); attachment.filename = formatter.format(now) + "." + extension; if (attachment.mimeType.startsWith("image")) { Set<String> imageType = new HashSet<>(Arrays.asList("image/png", "image/jpeg", "image/jpg")); if (imageType.contains(attachment.mimeType)) { final File certCacheDir = new File(context.getCacheDir(), TEMP_MEDIA_DIRECTORY); boolean isCertCacheDirExists = certCacheDir.exists(); if (!isCertCacheDirExists) { Loading
app/src/main/java/app/fedilab/android/helper/TranslateHelper.java 0 → 100644 +91 −0 Original line number Diff line number Diff line package app.fedilab.android.helper; /* Copyright 2022 Thomas Schneider * * This file is a part of Fedilab * * This program 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. * * Fedilab 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 Fedilab; if not, * see <http://www.gnu.org/licenses>. */ import android.content.Context; import android.content.SharedPreferences; import android.os.Build; import android.text.Html; import android.widget.Toast; import androidx.preference.PreferenceManager; import com.github.stom79.mytransl.MyTransL; import com.github.stom79.mytransl.client.HttpsConnectionException; import com.github.stom79.mytransl.client.Results; import com.github.stom79.mytransl.translate.Params; import app.fedilab.android.R; import es.dmoral.toasty.Toasty; public class TranslateHelper { public static void translate(Context context, String toTranslate, Translate callback) { String statusToTranslate; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) statusToTranslate = Html.fromHtml(toTranslate, Html.FROM_HTML_MODE_LEGACY).toString(); else statusToTranslate = Html.fromHtml(toTranslate).toString(); SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context); String translator = sharedpreferences.getString(context.getString(R.string.SET_TRANSLATOR), "FEDILAB"); MyTransL.translatorEngine et; if (translator.compareToIgnoreCase("FEDILAB") == 0) { et = MyTransL.translatorEngine.LIBRETRANSLATE; } else { et = MyTransL.translatorEngine.DEEPL; } final MyTransL myTransL = MyTransL.getInstance(et); myTransL.setObfuscation(true); Params params = new Params(); params.setSplit_sentences(false); params.setFormat(Params.fType.TEXT); params.setSource_lang("auto"); if (translator.compareToIgnoreCase("FEDILAB") == 0) { myTransL.setLibretranslateDomain("translate.fedilab.app"); } else { String translatorVersion = sharedpreferences.getString(context.getString(R.string.SET_TRANSLATOR_VERSION), "PRO"); params.setPro(translatorVersion.equals("PRO")); String apikey = sharedpreferences.getString(context.getString(R.string.SET_TRANSLATOR_API_KEY), null); myTransL.setDeeplAPIKey(apikey.trim()); } String translate = sharedpreferences.getString(context.getString(R.string.SET_LIVE_TRANSLATE), MyTransL.getLocale()); if (translate.equalsIgnoreCase("default")) { translate = MyTransL.getLocale(); } myTransL.translate(statusToTranslate, translate, params, new Results() { @Override public void onSuccess(com.github.stom79.mytransl.translate.Translate translate) { if (translate.getTranslatedContent() != null) { callback.onTranslate(translate.getTranslatedContent()); } else { callback.onTranslate(""); Toasty.error(context, context.getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show(); } } @Override public void onFail(HttpsConnectionException httpsConnectionException) { callback.onTranslate(""); Toasty.error(context, context.getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show(); } }); } public interface Translate { void onTranslate(String translated); } }
app/src/main/java/app/fedilab/android/ui/drawer/ReleaseNoteAdapter.java +8 −38 Original line number Diff line number Diff line Loading @@ -16,28 +16,21 @@ package app.fedilab.android.ui.drawer; import android.content.Context; import android.content.SharedPreferences; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.preference.PreferenceManager; import androidx.recyclerview.widget.RecyclerView; import com.github.stom79.mytransl.MyTransL; import com.github.stom79.mytransl.client.HttpsConnectionException; import com.github.stom79.mytransl.client.Results; import com.github.stom79.mytransl.translate.Params; import com.github.stom79.mytransl.translate.Translate; import java.util.List; import java.util.Locale; import app.fedilab.android.R; import app.fedilab.android.client.entities.app.ReleaseNote; import app.fedilab.android.databinding.DrawerReleaseNoteBinding; import app.fedilab.android.helper.TranslateHelper; import es.dmoral.toasty.Toasty; Loading Loading @@ -81,37 +74,14 @@ public class ReleaseNoteAdapter extends RecyclerView.Adapter<ReleaseNoteAdapter. holder.binding.containerTrans.setVisibility(View.GONE); holder.binding.translate.setVisibility(View.VISIBLE); } holder.binding.translate.setOnClickListener(v -> { MyTransL.translatorEngine et = MyTransL.translatorEngine.LIBRETRANSLATE; final MyTransL myTransL = MyTransL.getInstance(et); myTransL.setObfuscation(true); Params params = new Params(); params.setSplit_sentences(false); params.setFormat(Params.fType.TEXT); params.setSource_lang("auto"); myTransL.setLibretranslateDomain("translate.fedilab.app"); SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context); String translate = sharedpreferences.getString(context.getString(R.string.SET_LIVE_TRANSLATE), MyTransL.getLocale()); if (translate != null && translate.equalsIgnoreCase("default")) { translate = MyTransL.getLocale(); } myTransL.translate(note.note, translate, params, new Results() { @Override public void onSuccess(Translate translate) { if (translate.getTranslatedContent() != null) { note.noteTranslated = translate.getTranslatedContent(); holder.binding.translate.setOnClickListener(v -> TranslateHelper.translate(context, note.note, translated -> { if (translated != null) { note.noteTranslated = translated; notifyItemChanged(holder.getBindingAdapterPosition()); } else { Toasty.error(context, context.getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show(); } } @Override public void onFail(HttpsConnectionException httpsConnectionException) { Toasty.error(context, context.getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show(); } }); }); })); } Loading
app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java +9 −36 Original line number Diff line number Diff line Loading @@ -87,10 +87,6 @@ import com.bumptech.glide.RequestBuilder; import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.bumptech.glide.request.RequestOptions; import com.github.stom79.mytransl.MyTransL; import com.github.stom79.mytransl.client.HttpsConnectionException; import com.github.stom79.mytransl.client.Results; import com.github.stom79.mytransl.translate.Params; import com.github.stom79.mytransl.translate.Translate; import com.vanniktech.emoji.EmojiManager; import com.vanniktech.emoji.EmojiPopup; import com.vanniktech.emoji.one.EmojiOneProvider; Loading Loading @@ -145,6 +141,7 @@ import app.fedilab.android.helper.MediaHelper; import app.fedilab.android.helper.SpannableHelper; import app.fedilab.android.helper.ThemeHelper; import app.fedilab.android.helper.TimelineHelper; import app.fedilab.android.helper.TranslateHelper; import app.fedilab.android.ui.fragment.timeline.FragmentMastodonContext; import app.fedilab.android.viewmodel.mastodon.AccountsVM; import app.fedilab.android.viewmodel.mastodon.SearchVM; Loading Loading @@ -1982,6 +1979,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> } private static void translate(Context context, Status statusToDeal, StatusViewHolder holder, RecyclerView.Adapter<RecyclerView.ViewHolder> adapter) { Loading @@ -1990,41 +1988,16 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> statusToTranslate = Html.fromHtml(statusToDeal.content, Html.FROM_HTML_MODE_LEGACY).toString(); else statusToTranslate = Html.fromHtml(statusToDeal.content).toString(); int countMorseChar = ComposeAdapter.countMorseChar(statusToTranslate); if (countMorseChar < 4) { MyTransL.translatorEngine et = MyTransL.translatorEngine.LIBRETRANSLATE; final MyTransL myTransL = MyTransL.getInstance(et); myTransL.setObfuscation(true); Params params = new Params(); params.setSplit_sentences(false); params.setFormat(Params.fType.TEXT); params.setSource_lang("auto"); myTransL.setLibretranslateDomain("translate.fedilab.app"); SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context); String translate = sharedpreferences.getString(context.getString(R.string.SET_LIVE_TRANSLATE), MyTransL.getLocale()); if (translate != null && translate.equalsIgnoreCase("default")) { translate = MyTransL.getLocale(); } myTransL.translate(statusToTranslate, translate, params, new Results() { @Override public void onSuccess(Translate translate) { if (translate.getTranslatedContent() != null) { TranslateHelper.translate(context, statusToDeal.content, translated -> { if (translated != null) { statusToDeal.translationShown = true; statusToDeal.translationContent = translate.getTranslatedContent(); statusToDeal.translationContent = translated; adapter.notifyItemChanged(holder.getBindingAdapterPosition()); } else { Toasty.error(context, context.getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show(); } } @Override public void onFail(HttpsConnectionException httpsConnectionException) { } }); } else { statusToDeal.translationShown = true; Loading