Fix header labels for RTL languages such as Arabic

pull/276/head
Alinson S. Xavier 9 years ago
parent 55da0759d4
commit 5c8e522646

@ -50,8 +50,6 @@ public class HeaderView extends ScrollableChart
private RectF rect; private RectF rect;
private int maxDataOffset;
public HeaderView(Context context, AttributeSet attrs) public HeaderView(Context context, AttributeSet attrs)
{ {
super(context, attrs); super(context, attrs);
@ -76,7 +74,6 @@ public class HeaderView extends ScrollableChart
Resources res = context.getResources(); Resources res = context.getResources();
setScrollerBucketSize((int) res.getDimension(R.dimen.checkmarkWidth)); setScrollerBucketSize((int) res.getDimension(R.dimen.checkmarkWidth));
setDirection(shouldReverseCheckmarks() ? 1 : -1);
StyledResources sr = new StyledResources(context); StyledResources sr = new StyledResources(context);
paint = new TextPaint(); paint = new TextPaint();
@ -99,7 +96,7 @@ public class HeaderView extends ScrollableChart
@Override @Override
public void onCheckmarkOrderChanged() public void onCheckmarkOrderChanged()
{ {
setDirection(shouldReverseCheckmarks() ? 1 : -1); updateDirection();
postInvalidate(); postInvalidate();
} }
@ -112,11 +109,20 @@ public class HeaderView extends ScrollableChart
@Override @Override
protected void onAttachedToWindow() protected void onAttachedToWindow()
{ {
updateDirection();
super.onAttachedToWindow(); super.onAttachedToWindow();
if (prefs != null) prefs.addListener(this); if (prefs != null) prefs.addListener(this);
if (midnightTimer != null) midnightTimer.addListener(this); if (midnightTimer != null) midnightTimer.addListener(this);
} }
private void updateDirection()
{
int direction = -1;
if (shouldReverseCheckmarks()) direction *= -1;
if (InterfaceUtils.isLayoutRtl(this)) direction *= -1;
setDirection(direction);
}
@Override @Override
protected void onDetachedFromWindow() protected void onDetachedFromWindow()
{ {
@ -145,6 +151,7 @@ public class HeaderView extends ScrollableChart
float width = res.getDimension(R.dimen.checkmarkWidth); float width = res.getDimension(R.dimen.checkmarkWidth);
float height = res.getDimension(R.dimen.checkmarkHeight); float height = res.getDimension(R.dimen.checkmarkHeight);
boolean reverse = shouldReverseCheckmarks(); boolean reverse = shouldReverseCheckmarks();
boolean isRtl = InterfaceUtils.isLayoutRtl(this);
day.add(GregorianCalendar.DAY_OF_MONTH, -getDataOffset()); day.add(GregorianCalendar.DAY_OF_MONTH, -getDataOffset());
float em = paint.measureText("m"); float em = paint.measureText("m");
@ -153,9 +160,13 @@ public class HeaderView extends ScrollableChart
{ {
rect.set(0, 0, width, height); rect.set(0, 0, width, height);
rect.offset(canvas.getWidth(), 0); rect.offset(canvas.getWidth(), 0);
if(reverse) rect.offset(- (i + 1) * width, 0); if(reverse) rect.offset(- (i + 1) * width, 0);
else rect.offset((i - buttonCount) * width, 0); else rect.offset((i - buttonCount) * width, 0);
if (isRtl) rect.set(canvas.getWidth() - rect.right, rect.top,
canvas.getWidth() - rect.left, rect.bottom);
String text = DateUtils.formatHeaderDate(day).toUpperCase(); String text = DateUtils.formatHeaderDate(day).toUpperCase();
String[] lines = text.split("\n"); String[] lines = text.split("\n");

@ -22,7 +22,9 @@ package org.isoron.uhabits.utils;
import android.content.*; import android.content.*;
import android.content.res.*; import android.content.res.*;
import android.graphics.*; import android.graphics.*;
import android.support.v4.view.*;
import android.util.*; import android.util.*;
import android.view.*;
public abstract class InterfaceUtils public abstract class InterfaceUtils
{ {
@ -49,4 +51,10 @@ public abstract class InterfaceUtils
DisplayMetrics metrics = resources.getDisplayMetrics(); DisplayMetrics metrics = resources.getDisplayMetrics();
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, metrics); return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, metrics);
} }
public static boolean isLayoutRtl(View view)
{
return ViewCompat.getLayoutDirection(view) ==
ViewCompat.LAYOUT_DIRECTION_RTL;
}
} }

Loading…
Cancel
Save