diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index fea06e7b36..c3a785a987 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -59,6 +59,7 @@ import android.net.NetworkRequest; import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.os.LocaleList; import android.os.OperationCanceledException; import android.provider.ContactsContract; import android.provider.MediaStore; @@ -252,6 +253,7 @@ public class FragmentCompose extends FragmentBase { private TextView tvReference; private ImageButton ibCloseRefHint; private ImageButton ibWriteAboveBelow; + private TextView tvLanguage; private ImageButton ibReferenceEdit; private ImageButton ibReferenceImages; private View vwAnchor; @@ -369,6 +371,7 @@ public class FragmentCompose extends FragmentBase { tvReference = view.findViewById(R.id.tvReference); ibCloseRefHint = view.findViewById(R.id.ibCloseRefHint); ibWriteAboveBelow = view.findViewById(R.id.ibWriteAboveBelow); + tvLanguage = view.findViewById(R.id.tvLanguage); ibReferenceEdit = view.findViewById(R.id.ibReferenceEdit); ibReferenceImages = view.findViewById(R.id.ibReferenceImages); vwAnchor = view.findViewById(R.id.vwAnchor); @@ -947,6 +950,7 @@ public class FragmentCompose extends FragmentBase { grpSignature.setVisibility(View.GONE); grpReferenceHint.setVisibility(View.GONE); ibWriteAboveBelow.setVisibility(View.GONE); + tvLanguage.setVisibility(View.GONE); ibReferenceEdit.setVisibility(View.GONE); ibReferenceImages.setVisibility(View.GONE); tvReference.setVisibility(View.GONE); @@ -6236,6 +6240,9 @@ public class FragmentCompose extends FragmentBase { // Strip newline of reply header if (spannedRef.length() > 0 && spannedRef.charAt(0) == '\n') spannedRef = (Spanned) spannedRef.subSequence(1, spannedRef.length()); + + Locale ref_lang = TextHelper.detectLanguage(context, spannedRef.toString()); + args.putSerializable("ref_lang", ref_lang); } args.putBoolean("ref_has_images", spannedRef != null && @@ -6262,6 +6269,25 @@ public class FragmentCompose extends FragmentBase { boolean ref_has_images = args.getBoolean("ref_has_images"); + Locale ref_lang = (Locale) args.getSerializable("ref_lang"); + if (ref_lang != null) { + String dl = ref_lang.getDisplayLanguage(); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { + Locale l = Locale.getDefault(); + if (Objects.equals(dl, l.getDisplayLanguage())) + ref_lang = null; + } else { + LocaleList ll = getResources().getConfiguration().getLocales(); + for (int i = 0; i < ll.size(); i++) { + Locale l = ll.get(i); + if (Objects.equals(dl, l.getDisplayLanguage())) { + ref_lang = null; + break; + } + } + } + } + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); boolean ref_hint = prefs.getBoolean("compose_reference", true); boolean write_below = prefs.getBoolean("write_below", false); @@ -6273,6 +6299,8 @@ public class FragmentCompose extends FragmentBase { ibWriteAboveBelow.setVisibility(text[1] == null || draft.wasforwardedfrom != null || BuildConfig.PLAY_STORE_RELEASE ? View.GONE : View.VISIBLE); + tvLanguage.setText(ref_lang == null ? null : ref_lang.getDisplayLanguage()); + tvLanguage.setVisibility(ref_lang == null ? View.GONE : View.VISIBLE); ibReferenceEdit.setVisibility(text[1] == null ? View.GONE : View.VISIBLE); ibReferenceImages.setVisibility(ref_has_images && !show_images ? View.VISIBLE : View.GONE); diff --git a/app/src/main/res/layout/fragment_compose.xml b/app/src/main/res/layout/fragment_compose.xml index 0f4a8e0f83..a21e3c5fc6 100644 --- a/app/src/main/res/layout/fragment_compose.xml +++ b/app/src/main/res/layout/fragment_compose.xml @@ -436,6 +436,19 @@ app:layout_constraintTop_toBottomOf="@id/tvReferenceHint" app:srcCompat="@drawable/abovebelow" /> + +