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

Commit f32e0fe6 authored by Fabrice Di Meglio's avatar Fabrice Di Meglio Committed by Android (Google) Code Review
Browse files

Merge "RTL Ordering of visual elements in LinearLayout"

parents 850ae9ac 1e4cfbeb
Loading
Loading
Loading
Loading
+51 −38
Original line number Diff line number Diff line
@@ -1331,7 +1331,7 @@ public class LinearLayout extends ViewGroup {
    void layoutVertical() {
        final int paddingLeft = mPaddingLeft;

        int childTop = mPaddingTop;
        int childTop;
        int childLeft;
        
        // Where right end of child should go
@@ -1346,19 +1346,21 @@ public class LinearLayout extends ViewGroup {
        final int majorGravity = mGravity & Gravity.VERTICAL_GRAVITY_MASK;
        final int minorGravity = mGravity & Gravity.HORIZONTAL_GRAVITY_MASK;

        if (majorGravity != Gravity.TOP) {
        switch (majorGravity) {
           case Gravity.BOTTOM:
                   // mTotalLength contains the padding already, we add the top
                   // padding to compensate
                   childTop = mBottom - mTop + mPaddingTop - mTotalLength;
               // mTotalLength contains the padding already
               childTop = mPaddingTop + mBottom - mTop - mTotalLength;
               break;

               // mTotalLength contains the padding already
           case Gravity.CENTER_VERTICAL:
                   childTop += ((mBottom - mTop)  - mTotalLength) / 2;
               childTop = mPaddingTop + (mBottom - mTop - mTotalLength) / 2;
               break;
           }

           case Gravity.TOP:
           default:
               childTop = mPaddingTop;
               break;
        }

        for (int i = 0; i < count; i++) {
@@ -1378,10 +1380,6 @@ public class LinearLayout extends ViewGroup {
                }

                switch (gravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
                    case Gravity.LEFT:
                        childLeft = paddingLeft + lp.leftMargin;
                        break;

                    case Gravity.CENTER_HORIZONTAL:
                        childLeft = paddingLeft + ((childSpace - childWidth) / 2)
                                + lp.leftMargin - lp.rightMargin;
@@ -1390,8 +1388,10 @@ public class LinearLayout extends ViewGroup {
                    case Gravity.RIGHT:
                        childLeft = childRight - childWidth - lp.rightMargin;
                        break;

                    case Gravity.LEFT:
                    default:
                        childLeft = paddingLeft;
                        childLeft = paddingLeft + lp.leftMargin;
                        break;
                }

@@ -1418,10 +1418,11 @@ public class LinearLayout extends ViewGroup {
     * @see #onLayout(boolean, int, int, int, int)
     */
    void layoutHorizontal() {
        final boolean isLayoutRtl = isLayoutRtl();
        final int paddingTop = mPaddingTop;

        int childTop;
        int childLeft = mPaddingLeft;
        int childLeft;
        
        // Where bottom of child should go
        final int height = mBottom - mTop;
@@ -1440,25 +1441,37 @@ public class LinearLayout extends ViewGroup {
        final int[] maxAscent = mMaxAscent;
        final int[] maxDescent = mMaxDescent;

        if (majorGravity != Gravity.LEFT) {
        switch (majorGravity) {
            case Gravity.RIGHT:
                    // mTotalLength contains the padding already, we add the left
                    // padding to compensate
                    childLeft = mRight - mLeft + mPaddingLeft - mTotalLength;
                // mTotalLength contains the padding already
                childLeft = mPaddingLeft + mRight - mLeft - mTotalLength;
                break;

            case Gravity.CENTER_HORIZONTAL:
                    childLeft += ((mRight - mLeft) - mTotalLength) / 2;
                // mTotalLength contains the padding already
                childLeft = mPaddingLeft + (mRight - mLeft - mTotalLength) / 2;
                break;

            case Gravity.LEFT:
            default:
                childLeft = mPaddingLeft;
                break;
        }

        int start = 0;
        int dir = 1;
        //In case of RTL, start drawing from the last child.
        if (isLayoutRtl) {
            start = count - 1;
            dir = -1;
        }

        for (int i = 0; i < count; i++) {
            final View child = getVirtualChildAt(i);
            int childIndex = start + dir * i;
            final View child = getVirtualChildAt(childIndex);

            if (child == null) {
                childLeft += measureNullChild(i);
                childLeft += measureNullChild(childIndex);
            } else if (child.getVisibility() != GONE) {
                final int childWidth = child.getMeasuredWidth();
                final int childHeight = child.getMeasuredHeight();
@@ -1512,7 +1525,7 @@ public class LinearLayout extends ViewGroup {
                        break;
                }

                if (hasDividerBeforeChildAt(i)) {
                if (hasDividerBeforeChildAt(childIndex)) {
                    childLeft += mDividerWidth;
                }

@@ -1522,7 +1535,7 @@ public class LinearLayout extends ViewGroup {
                childLeft += childWidth + lp.rightMargin +
                        getNextLocationOffset(child);

                i += getChildrenSkipCount(child, i);
                i += getChildrenSkipCount(child, childIndex);
            }
        }
    }
+32 −7
Original line number Diff line number Diff line
@@ -14,18 +14,14 @@
     limitations under the License.
-->

<!-- Declare the contents of this Android application.  The namespace
     attribute brings in the Android platform namespace, and the package
     supplies a unique name for the application.  When writing your
     own application, the package name must be changed from "com.example.*"
     to come from a domain that you own or have control over. -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.bidi"
    android:versionCode="1"
    android:versionName="1.0">

    <application android:label="BiDiTests">
        <activity android:name="BiDiTestActivity"

        <activity android:name=".BiDiTestActivity"
            android:windowSoftInputMode="stateAlwaysHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
@@ -33,5 +29,34 @@
            </intent-filter>
        </activity>

        <activity android:name=".BiDiTestBasicActivity"
                android:windowSoftInputMode="stateAlwaysHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>

        <activity android:name=".BiDiTestCanvasActivity"
                  android:windowSoftInputMode="stateAlwaysHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>

        <activity android:name=".BiDiTestLinearLayoutLtrActivity"
                  android:windowSoftInputMode="stateAlwaysHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>

        <activity android:name=".BiDiTestLinearLayoutRtlActivity"
                  android:windowSoftInputMode="stateAlwaysHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>

    </application>

</manifest>
 No newline at end of file
+2 −14
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@
    android:layout_height="match_parent">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

@@ -39,7 +39,7 @@
                  android:text="@string/textview_text"
        />

        <EditText android:id="@+id/textview"
        <EditText android:id="@+id/edittext"
                  android:layout_height="wrap_content"
                  android:layout_width="match_parent"
                  android:textSize="32dip"
@@ -47,16 +47,4 @@

    </LinearLayout>

    <SeekBar android:id="@+id/seekbar"
               android:layout_height="wrap_content"
               android:layout_width="match_parent"
               />

    <view class="com.android.bidi.BiDiTestView"
        android:id="@+id/main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FF0000"
    />

</LinearLayout>
 No newline at end of file
+34 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2011 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <SeekBar android:id="@+id/seekbar"
               android:layout_height="wrap_content"
               android:layout_width="match_parent"
               />

    <view class="com.android.bidi.BiDiTestView"
        android:id="@+id/testview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FF0000"
    />

</LinearLayout>
 No newline at end of file
+186 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2011 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layouttest"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:horizontalDirection="ltr">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:horizontalDirection="inherit">

       <Button android:layout_height="wrap_content"
               android:layout_width="wrap_content"
               android:text="@string/button1_text"
               android:textSize="32dip"
        />

        <TextView android:id="@+id/textview"
                  android:layout_height="wrap_content"
                  android:layout_width="wrap_content"
                  android:textSize="32dip"
                  android:text="@string/textview_text"
        />

        <Button android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="@string/button2_text"
                android:textSize="32dip"
         />

    </LinearLayout>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:horizontalDirection="ltr">

       <Button android:layout_height="wrap_content"
               android:layout_width="wrap_content"
               android:text="@string/button1_text"
               android:textSize="32dip"
        />

        <TextView android:id="@+id/textview"
                  android:layout_height="wrap_content"
                  android:layout_width="wrap_content"
                  android:textSize="32dip"
                  android:text="@string/textview_text"
        />

        <Button android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="@string/button2_text"
                android:textSize="32dip"
         />

    </LinearLayout>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:horizontalDirection="rtl">

       <Button android:layout_height="wrap_content"
               android:layout_width="wrap_content"
               android:text="@string/button1_text"
               android:textSize="32dip"
        />

        <TextView android:id="@+id/textview"
                  android:layout_height="wrap_content"
                  android:layout_width="wrap_content"
                  android:textSize="32dip"
                  android:text="@string/textview_text"
        />

        <Button android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="@string/button2_text"
                android:textSize="32dip"
         />

    </LinearLayout>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:horizontalDirection="inherit">

       <Button android:layout_height="wrap_content"
               android:layout_width="wrap_content"
               android:text="@string/button1_text"
               android:textSize="32dip"
        />

        <TextView android:id="@+id/textview"
                  android:layout_height="wrap_content"
                  android:layout_width="wrap_content"
                  android:textSize="32dip"
                  android:text="@string/textview_text"
        />

        <Button android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="@string/button2_text"
                android:textSize="32dip"
         />

    </LinearLayout>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:horizontalDirection="ltr">

       <Button android:layout_height="wrap_content"
               android:layout_width="wrap_content"
               android:text="@string/button1_text"
               android:textSize="32dip"
        />

        <TextView android:id="@+id/textview"
                  android:layout_height="wrap_content"
                  android:layout_width="wrap_content"
                  android:textSize="32dip"
                  android:text="@string/textview_text"
        />

        <Button android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="@string/button2_text"
                android:textSize="32dip"
         />

    </LinearLayout>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:horizontalDirection="rtl">

       <Button android:layout_height="wrap_content"
               android:layout_width="wrap_content"
               android:text="@string/button1_text"
               android:textSize="32dip"
        />

        <TextView android:id="@+id/textview"
                  android:layout_height="wrap_content"
                  android:layout_width="wrap_content"
                  android:textSize="32dip"
                  android:text="@string/textview_text"
        />

        <Button android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="@string/button2_text"
                android:textSize="32dip"
         />

    </LinearLayout>

</LinearLayout>
 No newline at end of file
Loading