Refactoring

pull/199/head
M66B 4 years ago
parent fbd708275f
commit 3304345871

@ -21,7 +21,6 @@ package eu.faircode.email;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.util.Pair;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
@ -54,14 +53,15 @@ public class DeepL {
// -d auth_key=42c191db-21ba-9b96-2464-47a9a5e81b4a:fx \ // -d auth_key=42c191db-21ba-9b96-2464-47a9a5e81b4a:fx \
// -d type=target // -d type=target
public static List<Pair<String, String>> getTargetLanguages(Context context) { public static List<Language> getTargetLanguages(Context context) {
try (InputStream is = context.getAssets().open("deepl.json")) { try (InputStream is = context.getAssets().open("deepl.json")) {
String json = Helper.readStream(is); String json = Helper.readStream(is);
JSONArray jarray = new JSONArray(json); JSONArray jarray = new JSONArray(json);
String pkg = context.getPackageName();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
List<Pair<String, String>> languages = new ArrayList<>(); List<Language> languages = new ArrayList<>();
Map<String, Integer> frequencies = new HashMap<>(); Map<String, Integer> frequencies = new HashMap<>();
for (int i = 0; i < jarray.length(); i++) { for (int i = 0; i < jarray.length(); i++) {
JSONObject jlanguage = jarray.getJSONObject(i); JSONObject jlanguage = jarray.getJSONObject(i);
@ -76,20 +76,23 @@ public class DeepL {
if (BuildConfig.DEBUG && frequency > 0) if (BuildConfig.DEBUG && frequency > 0)
name += " ★"; name += " ★";
languages.add(new Pair<>(name, target)); String resname = "language_" + target.toLowerCase().replace('-', '_');
int resid = context.getResources().getIdentifier(resname, "drawable", pkg);
languages.add(new Language(name, target, resid == 0 ? null : resid));
frequencies.put(target, frequency); frequencies.put(target, frequency);
} }
Collator collator = Collator.getInstance(Locale.getDefault()); Collator collator = Collator.getInstance(Locale.getDefault());
collator.setStrength(Collator.SECONDARY); // Case insensitive, process accents etc collator.setStrength(Collator.SECONDARY); // Case insensitive, process accents etc
Collections.sort(languages, new Comparator<Pair<String, String>>() { Collections.sort(languages, new Comparator<Language>() {
@Override @Override
public int compare(Pair<String, String> l1, Pair<String, String> l2) { public int compare(Language l1, Language l2) {
int freq1 = frequencies.get(l1.second); int freq1 = frequencies.get(l1.target);
int freq2 = frequencies.get(l2.second); int freq2 = frequencies.get(l2.target);
if (freq1 == freq2) if (freq1 == freq2)
return collator.compare(l1.first, l2.first); return collator.compare(l1.name, l2.name);
else else
return -Integer.compare(freq1, freq2); return -Integer.compare(freq1, freq2);
} }
@ -190,4 +193,16 @@ public class DeepL {
String domain = prefs.getString("deepl_domain", "api-free.deepl.com"); String domain = prefs.getString("deepl_domain", "api-free.deepl.com");
return "https://" + domain + "/v2/"; return "https://" + domain + "/v2/";
} }
public static class Language {
public String name;
public String target;
public Integer icon;
private Language(String name, String target, Integer icon) {
this.name = name;
this.target = target;
this.icon = icon;
}
}
} }

@ -704,21 +704,18 @@ public class FragmentCompose extends FragmentBase {
if (getParagraph() == null) if (getParagraph() == null)
return; return;
List<DeepL.Language> languages = DeepL.getTargetLanguages(getContext());
if (languages == null)
return;
PopupMenuLifecycle popupMenu = new PopupMenuLifecycle(getContext(), getViewLifecycleOwner(), v); PopupMenuLifecycle popupMenu = new PopupMenuLifecycle(getContext(), getViewLifecycleOwner(), v);
List<Pair<String, String>> languages = DeepL.getTargetLanguages(getContext());
if (languages != null) {
String pkg = getContext().getPackageName();
for (int i = 0; i < languages.size(); i++) { for (int i = 0; i < languages.size(); i++) {
Pair<String, String> lang = languages.get(i); DeepL.Language lang = languages.get(i);
MenuItem item = popupMenu.getMenu().add(R.id.group_translate, i + 1, i + 1, lang.first) MenuItem item = popupMenu.getMenu().add(R.id.group_translate, i + 1, i + 1, lang.name)
.setIntent(new Intent().putExtra("target", lang.second)); .setIntent(new Intent().putExtra("target", lang.target));
if (lang.icon != null)
String resname = "language_" + lang.second.toLowerCase().replace('-', '_'); item.setIcon(lang.icon);
int resid = getResources().getIdentifier(resname, "drawable", pkg);
if (resid > 0)
item.setIcon(resid);
}
} }
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@ -1478,19 +1475,15 @@ public class FragmentCompose extends FragmentBase {
} }
}); });
List<Pair<String, String>> languages = DeepL.getTargetLanguages(getContext()); List<DeepL.Language> languages = DeepL.getTargetLanguages(getContext());
if (languages != null) { if (languages != null) {
String pkg = getContext().getPackageName();
for (int i = 0; i < languages.size(); i++) {
Pair<String, String> lang = languages.get(i);
SubMenu smenu = menu.findItem(R.id.menu_translate).getSubMenu(); SubMenu smenu = menu.findItem(R.id.menu_translate).getSubMenu();
MenuItem item = smenu.add(R.id.group_translate, i + 1, i + 1, lang.first) for (int i = 0; i < languages.size(); i++) {
.setIntent(new Intent().putExtra("target", lang.second)); DeepL.Language lang = languages.get(i);
MenuItem item = smenu.add(R.id.group_translate, i + 1, i + 1, lang.name)
String resname = "language_" + lang.second.toLowerCase().replace('-', '_'); .setIntent(new Intent().putExtra("target", lang.target));
int resid = getResources().getIdentifier(resname, "drawable", pkg); if (lang.icon != null)
if (resid > 0) item.setIcon(lang.icon);
item.setIcon(resid);
} }
} }

Loading…
Cancel
Save