Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5ffc79f authored by Fabrice Di Meglio's avatar Fabrice Di Meglio
Browse files

Improve RTL code for RelativeLayout

- instead of passing the screen size as a constant for computing the
layout size in RTL mode, we just use a real constant. Any value would
work actually, as soon as the value would not be null.

Change-Id: If9f5b38afa88938db36a795bfc8a403ad660726b
parent c7ede61f
Loading
Loading
Loading
Loading
+5 −13
Original line number Diff line number Diff line
@@ -37,7 +37,6 @@ import android.view.Gravity;
import android.view.View;
import android.view.ViewDebug;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.RemoteViews.RemoteView;
@@ -221,13 +220,13 @@ public class RelativeLayout extends ViewGroup {
    // Some apps came to rely on them. :(
    private boolean mAllowBrokenMeasureSpecs = false;

    private int mDisplayWidth;
    // A default width used for RTL measure pass
    private static int DEFAULT_WIDTH = Integer.MAX_VALUE / 2;

    public RelativeLayout(Context context) {
        super(context);
        mAllowBrokenMeasureSpecs = context.getApplicationInfo().targetSdkVersion <=
                Build.VERSION_CODES.JELLY_BEAN_MR1;
        getDisplayWidth();
    }

    public RelativeLayout(Context context, AttributeSet attrs) {
@@ -235,7 +234,6 @@ public class RelativeLayout extends ViewGroup {
        initFromAttributes(context, attrs);
        mAllowBrokenMeasureSpecs = context.getApplicationInfo().targetSdkVersion <=
                Build.VERSION_CODES.JELLY_BEAN_MR1;
        getDisplayWidth();
    }

    public RelativeLayout(Context context, AttributeSet attrs, int defStyle) {
@@ -243,7 +241,6 @@ public class RelativeLayout extends ViewGroup {
        initFromAttributes(context, attrs);
        mAllowBrokenMeasureSpecs = context.getApplicationInfo().targetSdkVersion <=
                Build.VERSION_CODES.JELLY_BEAN_MR1;
        getDisplayWidth();
    }

    private void initFromAttributes(Context context, AttributeSet attrs) {
@@ -253,11 +250,6 @@ public class RelativeLayout extends ViewGroup {
        a.recycle();
    }

    private void getDisplayWidth() {
        WindowManager wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE);
        mDisplayWidth = wm.getDefaultDisplay().getWidth();
    }

    @Override
    public boolean shouldDelayChildPressedState() {
        return false;
@@ -451,12 +443,12 @@ public class RelativeLayout extends ViewGroup {

        // We need to know our size for doing the correct computation of children positioning in RTL
        // mode but there is no practical way to get it instead of running the code below.
        // So, instead of running the code twice, we just set the width to the "display width"
        // So, instead of running the code twice, we just set the width to a "default display width"
        // before the computation and then, as a last pass, we will update their real position with
        // an offset equals to "displayWidth - width".
        // an offset equals to "DEFAULT_WIDTH - width".
        final int layoutDirection = getLayoutDirection();
        if (isLayoutRtl() && myWidth == -1) {
            myWidth = mDisplayWidth;
            myWidth = DEFAULT_WIDTH;
        }

        View[] views = mSortedHorizontalChildren;