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

Commit f24335ec authored by Chet Haase's avatar Chet Haase Committed by Android (Google) Code Review
Browse files

Merge "Add targetSdk check around new LinearLayout weighted measure behavior" into pi-dev

parents aeed443b cb848882
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -907,6 +907,8 @@ public class Build {
         * <li>{@link android.app.Service#startForeground Service.startForeground} requires
         * that apps hold the permission
         * {@link android.Manifest.permission#FOREGROUND_SERVICE}.</li>
         * <li>{@link android.widget.LinearLayout} will always remeasure weighted children,
         * even if there is no excess space.</li>
         * </ul>
         */
        public static final int P = CUR_DEVELOPMENT; // STOPSHIP Replace with the real version.
+24 −2
Original line number Diff line number Diff line
@@ -217,6 +217,17 @@ public class LinearLayout extends ViewGroup {

    private int mLayoutDirection = View.LAYOUT_DIRECTION_UNDEFINED;

    /**
     * Signals that compatibility booleans have been initialized according to
     * target SDK versions.
     */
    private static boolean sCompatibilityDone = false;

    /**
     * Behavior change in P; always remeasure weighted children, regardless of excess space.
     */
    private static boolean sRemeasureWeightedChildren = true;

    public LinearLayout(Context context) {
        this(context, null);
    }
@@ -232,6 +243,15 @@ public class LinearLayout extends ViewGroup {
    public LinearLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);

        if (!sCompatibilityDone && context != null) {
            final int targetSdkVersion = context.getApplicationInfo().targetSdkVersion;

            // Older apps only remeasure non-zero children
            sRemeasureWeightedChildren = targetSdkVersion >= Build.VERSION_CODES.P;

            sCompatibilityDone = true;
        }

        final TypedArray a = context.obtainStyledAttributes(
                attrs, com.android.internal.R.styleable.LinearLayout, defStyleAttr, defStyleRes);

@@ -917,7 +937,8 @@ public class LinearLayout extends ViewGroup {
        // measurement on any children, we need to measure them now.
        int remainingExcess = heightSize - mTotalLength
                + (mAllowInconsistentMeasurement ? 0 : consumedExcessSpace);
        if (skippedMeasure || totalWeight > 0.0f) {
        if (skippedMeasure
                || ((sRemeasureWeightedChildren || remainingExcess != 0) && totalWeight > 0.0f)) {
            float remainingWeightSum = mWeightSum > 0.0f ? mWeightSum : totalWeight;

            mTotalLength = 0;
@@ -1300,7 +1321,8 @@ public class LinearLayout extends ViewGroup {
        // measurement on any children, we need to measure them now.
        int remainingExcess = widthSize - mTotalLength
                + (mAllowInconsistentMeasurement ? 0 : usedExcessSpace);
        if (skippedMeasure || totalWeight > 0.0f) {
        if (skippedMeasure
                || ((sRemeasureWeightedChildren || remainingExcess != 0) && totalWeight > 0.0f)) {
            float remainingWeightSum = mWeightSum > 0.0f ? mWeightSum : totalWeight;

            maxAscent[0] = maxAscent[1] = maxAscent[2] = maxAscent[3] = -1;