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

Commit a1d72e15 authored by Fabrice Di Meglio's avatar Fabrice Di Meglio Committed by Android Git Automerger
Browse files

am 6ffbe600: Merge "Fix bug #7325609 FragmentBreadCrumbs should be RTL-aware" into jb-mr1-dev

* commit '6ffbe600':
  Fix bug #7325609 FragmentBreadCrumbs should be RTL-aware
parents f4607172 6ffbe600
Loading
Loading
Loading
Loading
+56 −8
Original line number Original line Diff line number Diff line
@@ -19,7 +19,9 @@ package android.app;
import android.animation.LayoutTransition;
import android.animation.LayoutTransition;
import android.app.FragmentManager.BackStackEntry;
import android.app.FragmentManager.BackStackEntry;
import android.content.Context;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup;
@@ -52,6 +54,10 @@ public class FragmentBreadCrumbs extends ViewGroup


    private OnBreadCrumbClickListener mOnBreadCrumbClickListener;
    private OnBreadCrumbClickListener mOnBreadCrumbClickListener;


    private int mGravity;

    private static final int DEFAULT_GRAVITY = Gravity.START | Gravity.CENTER_VERTICAL;

    /**
    /**
     * Interface to intercept clicks on the bread crumbs.
     * Interface to intercept clicks on the bread crumbs.
     */
     */
@@ -80,6 +86,14 @@ public class FragmentBreadCrumbs extends ViewGroup


    public FragmentBreadCrumbs(Context context, AttributeSet attrs, int defStyle) {
    public FragmentBreadCrumbs(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        super(context, attrs, defStyle);

        TypedArray a = context.obtainStyledAttributes(attrs,
                com.android.internal.R.styleable.FragmentBreadCrumbs, defStyle, 0);

        mGravity = a.getInt(com.android.internal.R.styleable.FragmentBreadCrumbs_gravity,
                DEFAULT_GRAVITY);

        a.recycle();
    }
    }


    /**
    /**
@@ -159,16 +173,50 @@ public class FragmentBreadCrumbs extends ViewGroup


    @Override
    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        // Eventually we should implement our own layout of the views,
        // Eventually we should implement our own layout of the views, rather than relying on
        // rather than relying on a linear layout.
        // a single linear layout.
        final int childCount = getChildCount();
        final int childCount = getChildCount();
        for (int i = 0; i < childCount; i++) {
        if (childCount == 0) {
            final View child = getChildAt(i);
            return;
        }

        final View child = getChildAt(0);


            int childRight = mPaddingLeft + child.getMeasuredWidth() - mPaddingRight;
        final int childTop = mPaddingTop;
            int childBottom = mPaddingTop + child.getMeasuredHeight() - mPaddingBottom;
        final int childBottom = mPaddingTop + child.getMeasuredHeight() - mPaddingBottom;
            child.layout(mPaddingLeft, mPaddingTop, childRight, childBottom);

        int childLeft;
        int childRight;

        final int layoutDirection = getLayoutDirection();
        final int horizontalGravity = mGravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK;
        switch (Gravity.getAbsoluteGravity(horizontalGravity, layoutDirection)) {
            case Gravity.RIGHT:
                childRight = mRight - mLeft - mPaddingRight;
                childLeft = childRight - child.getMeasuredWidth();
                break;

            case Gravity.CENTER_HORIZONTAL:
                childLeft = mPaddingLeft + (mRight - mLeft - child.getMeasuredWidth()) / 2;
                childRight = childLeft + child.getMeasuredWidth();
                break;

            case Gravity.LEFT:
            default:
                childLeft = mPaddingLeft;
                childRight = childLeft + child.getMeasuredWidth();
                break;
        }
        }

        if (childLeft < mPaddingLeft) {
            childLeft = mPaddingLeft;
        }

        if (childRight > mRight - mLeft - mPaddingRight) {
            childRight = mRight - mLeft - mPaddingRight;
        }

        child.layout(childLeft, childTop, childRight, childBottom);
    }
    }


    @Override
    @Override
+6 −0
Original line number Original line Diff line number Diff line
@@ -5781,4 +5781,10 @@
        <attr name="leftToRight" format="boolean" />
        <attr name="leftToRight" format="boolean" />
    </declare-styleable>
    </declare-styleable>


    <!-- Attributes that can be used with <code>&lt;FragmentBreadCrumbs&gt;</code>
    tags. -->
    <declare-styleable name="FragmentBreadCrumbs">
        <attr name="gravity" />
    </declare-styleable>

</resources>
</resources>