Bug 1337440 - [RTL] Get drawing offset relatively when rtl and horizontal, r=sebastian
MozReview-Commit-ID: JZAnNJwxCyI
--- a/mobile/android/base/java/org/mozilla/gecko/home/activitystream/topsites/CirclePageIndicator.java
+++ b/mobile/android/base/java/org/mozilla/gecko/home/activitystream/topsites/CirclePageIndicator.java
@@ -23,16 +23,17 @@ import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.drawable.Drawable;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.v4.view.MotionEventCompat;
import android.support.v4.view.ViewConfigurationCompat;
import android.support.v4.view.ViewPager;
+import android.support.v7.widget.ViewUtils;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import org.mozilla.gecko.R;
import org.mozilla.gecko.util.FloatUtils;
@@ -209,16 +210,24 @@ public class CirclePageIndicator
mSnap = snap;
invalidate();
}
public boolean isSnap() {
return mSnap;
}
+ private boolean isRtl() {
+ return ViewUtils.isLayoutRtl(this);
+ }
+
+ private float getRadiusRelativly() {
+ return getRadius() * (isRtl() ? -1 : 1);
+ }
+
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mViewPager == null) {
return;
}
final int count = mViewPager.getAdapter().getCount();
@@ -226,33 +235,35 @@ public class CirclePageIndicator
return;
}
if (mCurrentPage >= count) {
setCurrentItem(count - 1);
return;
}
- int longSize;
- int longPaddingBefore;
- int longPaddingAfter;
- int shortPaddingBefore;
+ final int longSize;
+ final int longPaddingBefore;
+ final int longPaddingAfter;
+ final int shortPaddingBefore;
+ final float threeRadius;
if (mOrientation == HORIZONTAL) {
longSize = getWidth();
longPaddingBefore = getPaddingLeft();
longPaddingAfter = getPaddingRight();
shortPaddingBefore = getPaddingTop();
+ threeRadius = getRadiusRelativly() * SEPARATION_FACTOR;
} else {
longSize = getHeight();
longPaddingBefore = getPaddingTop();
longPaddingAfter = getPaddingBottom();
shortPaddingBefore = getPaddingLeft();
+ threeRadius = mRadius * SEPARATION_FACTOR;
}
- final float threeRadius = mRadius * SEPARATION_FACTOR;
final float shortOffset = shortPaddingBefore + mRadius;
float longOffset = longPaddingBefore + mRadius;
if (mCentered) {
longOffset += ((longSize - longPaddingBefore - longPaddingAfter) / 2.0f) - ((count * threeRadius) / 2.0f);
}
float dX;
float dY;