mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 09:08:52 -06:00
Fix header labels for RTL languages such as Arabic
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user