summaryrefslogtreecommitdiffstats
path: root/app/src/main
diff options
context:
space:
mode:
authorThomas <tschneider.ac@gmail.com>2022-12-13 18:01:14 +0100
committerThomas <tschneider.ac@gmail.com>2022-12-13 18:01:14 +0100
commit0772f47b13f6b144a76a8d0b9b3f54f78feb5bff (patch)
tree841e173202e5328624632c6315aff349373385cb /app/src/main
parent269b83607c2c19dab9801af1385eb6f355928c63 (diff)
Release 3.11.0
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/assets/release_notes/notes.json5
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java59
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java66
3 files changed, 93 insertions, 37 deletions
diff --git a/app/src/main/assets/release_notes/notes.json b/app/src/main/assets/release_notes/notes.json
index 019033347..f3818d4c8 100644
--- a/app/src/main/assets/release_notes/notes.json
+++ b/app/src/main/assets/release_notes/notes.json
@@ -1,5 +1,10 @@
[
{
+ "version": "3.11.0",
+ "code": "446",
+ "note": "Added:\n- Display all messages in threads from remote instances (when possible)\n- Allow to unmute/unfollow/unpin a tag from tag timelines\n- Display most used accounts in header menu for an easy switch\n- Automatically add the tag when composing from a tag timeline\n- Add a translate button at the bottom of messages (default: disabled)\n- Add account role in profiles\n- Translate morse\n\nChanged:\n- Disable animations after a refresh\n\nFixed:\n- Contact not working when composing\n- Status bar for black theme\n- Message duplicated in conversations when edited\n- Color issue on Android 5\n- Several crashes"
+ },
+ {
"version": "3.10.2",
"code": "445",
"note": "Added:\n- Allow to unmute/unfollow/unpin a tag from tag timelines\n- Automatically add the tag when composing from a tag timeline\n- Add a translate button at the bottom of messages (default: disabled)\n- Add account role in profiles\n\nFixed:\n- Contact not working when composing\n- Status bar for black theme\n- Message duplicated in conversations when edited\n- Color issue on Android 5"
diff --git a/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java b/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java
index a4dd8a07f..9fdeb6207 100644
--- a/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java
+++ b/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java
@@ -80,8 +80,9 @@ import java.lang.ref.WeakReference;
import java.text.Normalizer;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Date;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
@@ -124,11 +125,52 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
public static boolean autocomplete = false;
public static String[] ALPHA = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r",
"s", "t", "u", "v", "w", "x", "y", "z", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "!", ",", "?",
- ".", "'"};
+ ".", "'", "!", "/", "(", ")", "&", ":", ";", "=", "+", "-", "_",
+ "\"", "$", "@", "¿", "¡"
+ };
public static String[] MORSE = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..",
"--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", ".----",
"..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", "-----", "-.-.--", "--..--",
- "..--..", ".-.-.-", ".----.",};
+ "..--..", ".-.-.-", ".----.", "-.-.--", "-..-.", "-.--.", "-.--.-", ".-...", "---...", "-.-.-.", "-...-", ".-.-.", "-....-", "..--.-",
+ ".-..-.", "...-..-", ".--.-.", "..-.-", "--...-"
+ };
+
+ public static String[] MORSE2 = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..",
+ "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", ".----",
+ "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", "-----", "-.-.--", "--..--",
+ "..--..", ".-.-.-", ".----.", "-.-.--", "-..-.", "-.--.", "-.--.-", ".-...", "---...", "-.-.-.", "-...-", ".-.-.", "-....-", "..--.-",
+ ".-..-.", "...-..-", ".--.-.", "..-.-", "--...-"
+ };
+
+ public static int countMorseChar(String content) {
+ int count_char = 0;
+ for (String morseCode : MORSE2) {
+ if (content.contains(morseCode) && !morseCode.equals(".") && !morseCode.equals("..") && !morseCode.equals("...") && !morseCode.equals("-") && !morseCode.equals("--")) {
+ count_char++;
+ }
+ }
+ return count_char;
+ }
+
+ public static String morseToText(String morseContent) {
+ LinkedHashMap<String, String> ALPHA_TO_MORSE = new LinkedHashMap<>();
+ for (int i = 0; i < ALPHA.length && i < MORSE.length; i++) {
+ ALPHA_TO_MORSE.put(MORSE[i], ALPHA[i]);
+ }
+ List<String> MORSELIST = Arrays.asList(MORSE2);
+ MORSELIST.sort((s1, s2) -> s2.length() - s1.length());
+ LinkedHashMap<String, String> MORSE_TO_ALPHA = new LinkedHashMap<>();
+ for (String s : MORSELIST) {
+ MORSE_TO_ALPHA.put(s, ALPHA_TO_MORSE.get(s));
+ }
+ for (String morseCode : MORSELIST) {
+ if (MORSE_TO_ALPHA.containsKey(morseCode)) {
+ morseContent = morseContent.replaceAll(Pattern.quote(morseCode), MORSE_TO_ALPHA.get(morseCode));
+ }
+ }
+ return morseContent;
+ }
+
private final List<Status> statusList;
private final int TYPE_NORMAL = 0;
private final BaseAccount account;
@@ -540,7 +582,7 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
newContent[0] = Normalizer.normalize(newContent[0], Normalizer.Form.NFD);
newContent[0] = newContent[0].replaceAll("[^\\p{ASCII}]", "");
- HashMap<String, String> ALPHA_TO_MORSE = new HashMap<>();
+ LinkedHashMap<String, String> ALPHA_TO_MORSE = new LinkedHashMap<>();
for (int i = 0; i < ALPHA.length && i < MORSE.length; i++) {
ALPHA_TO_MORSE.put(ALPHA[i], MORSE[i]);
}
@@ -552,7 +594,6 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
String morse = ALPHA_TO_MORSE.get(word.substring(i, i + 1).toLowerCase());
builder.append(morse).append(" ");
}
-
builder.append(" ");
}
newContent[0] = "";
@@ -560,7 +601,7 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
newContent[0] += mention + " ";
}
newContent[0] += builder.toString();
-
+ newContent[0] = newContent[0].replaceAll("null", "");
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = () -> {
@@ -592,7 +633,7 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
return;
}
- String patternh = "^(.|\\s)*(:fedilab_hugs:)$";
+ String patternh = "^(.|\\s)*(:fedilab_hugs:)";
final Pattern hPattern = Pattern.compile(patternh);
Matcher mh = hPattern.matcher((s.toString().substring(currentCursorPosition[0] - searchLength[0], currentCursorPosition[0])));
@@ -601,7 +642,7 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
return;
}
- String patternM = "^(.|\\s)*(:fedilab_morse:)$";
+ String patternM = "^(.|\\s)*(:fedilab_morse:)";
final Pattern mPattern = Pattern.compile(patternM);
Matcher mm = mPattern.matcher((s.toString().substring(currentCursorPosition[0] - searchLength[0], currentCursorPosition[0])));
if (mm.matches()) {
@@ -1328,7 +1369,7 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
});
holder.binding.content.setOnFocusChangeListener((view, focused) -> {
if (focused) {
- currentCursorPosition = position;
+ currentCursorPosition = holder.getLayoutPosition();
}
});
if (statusDraft.cursorPosition <= holder.binding.content.length()) {
diff --git a/app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java b/app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java
index 6e3e0d9c3..41b29f4b3 100644
--- a/app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java
+++ b/app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java
@@ -1901,42 +1901,52 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
private static void translate(Context context, Status statusToDeal,
StatusViewHolder holder,
RecyclerView.Adapter<RecyclerView.ViewHolder> adapter) {
- 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;
- 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();
- }
-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
statusToTranslate = Html.fromHtml(statusToDeal.content, Html.FROM_HTML_MODE_LEGACY).toString();
else
statusToTranslate = Html.fromHtml(statusToDeal.content).toString();
- myTransL.translate(statusToTranslate, translate, params, new Results() {
- @Override
- public void onSuccess(Translate translate) {
- if (translate.getTranslatedContent() != null) {
- statusToDeal.translationShown = true;
- statusToDeal.translationContent = translate.getTranslatedContent();
- 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) {
+ 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) {
+ statusToDeal.translationShown = true;
+ statusToDeal.translationContent = translate.getTranslatedContent();
+ 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;
+ statusToDeal.translationContent = ComposeAdapter.morseToText(statusToTranslate);
+ adapter.notifyItemChanged(holder.getBindingAdapterPosition());
+ }
}
private static void loadAndAddAttachment(Context context, LayoutMediaBinding layoutMediaBinding,