Bug 1337440 - [RTL] Get drawing offset relatively when rtl and horizontal, r=sebastian draft
authormaliu <max@mxli.us>
Wed, 22 Mar 2017 14:55:31 +0800
changeset 503373 1e52197a58fa5287fa1b034c2a24abe0cf704f9a
parent 503306 7513b3f42058e9bcf9950d4acf4647d4ad2240f0
child 550409 8244d704a1a0879818c0fc40dd61bdce6d4c3e14
push id50559
push userbmo:max@mxli.us
push dateThu, 23 Mar 2017 05:14:41 +0000
reviewerssebastian
bugs1337440
milestone55.0a1
Bug 1337440 - [RTL] Get drawing offset relatively when rtl and horizontal, r=sebastian MozReview-Commit-ID: JZAnNJwxCyI
mobile/android/base/java/org/mozilla/gecko/home/activitystream/topsites/CirclePageIndicator.java
--- 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;