Align relative to text direction

pull/194/head
M66B 4 years ago
parent 6b4b0e280e
commit 97084bfc35

@ -876,6 +876,31 @@ public class Helper {
}
// https://issuetracker.google.com/issues/37054851
static boolean isRtl(String text) {
if (TextUtils.isEmpty(text))
return false;
int rtl = 0;
int ltr = 0;
for (int i = 0; i < text.length(); i++)
switch (Character.getDirectionality(text.charAt(i))) {
case java.lang.Character.DIRECTIONALITY_RIGHT_TO_LEFT:
case java.lang.Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC:
case java.lang.Character.DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING:
case java.lang.Character.DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE:
rtl++;
break;
case java.lang.Character.DIRECTIONALITY_LEFT_TO_RIGHT:
case java.lang.Character.DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING:
case java.lang.Character.DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE:
ltr++;
break;
}
return (rtl > ltr);
}
static DateFormat getTimeInstance(Context context) {
return Helper.getTimeInstance(context, SimpleDateFormat.MEDIUM);
}

@ -55,7 +55,6 @@ import android.text.style.URLSpan;
import android.text.style.UnderlineSpan;
import android.util.Base64;
import android.util.Patterns;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@ -1951,7 +1950,6 @@ public class HtmlHelper {
final int dp3 = Helper.dp2pixels(context, 3);
final int dp6 = Helper.dp2pixels(context, 6);
final int dp24 = Helper.dp2pixels(context, 24);
final boolean ltr = (TextUtils.getLayoutDirectionFromLocale(Locale.getDefault()) == View.LAYOUT_DIRECTION_LTR);
int message_zoom = prefs.getInt("message_zoom", 100);
float textSize = Helper.getTextSize(context, 0) * message_zoom / 100f;
@ -2185,17 +2183,18 @@ public class HtmlHelper {
case "text-align":
// https://developer.mozilla.org/en-US/docs/Web/CSS/text-align
Layout.Alignment alignment = null;
boolean rtl = Helper.isRtl(ssb.subSequence(start, ssb.length()).toString());
switch (value) {
case "left":
case "start":
alignment = (ltr ? Layout.Alignment.ALIGN_NORMAL : Layout.Alignment.ALIGN_OPPOSITE);
alignment = (rtl ? Layout.Alignment.ALIGN_OPPOSITE : Layout.Alignment.ALIGN_NORMAL);
break;
case "center":
alignment = Layout.Alignment.ALIGN_CENTER;
break;
case "right":
case "end":
alignment = (ltr ? Layout.Alignment.ALIGN_OPPOSITE : Layout.Alignment.ALIGN_NORMAL);
alignment = (rtl ? Layout.Alignment.ALIGN_NORMAL : Layout.Alignment.ALIGN_OPPOSITE);
break;
}
if (alignment != null)

Loading…
Cancel
Save