From 94e2756ddcd996098c38c97fded476f7fe7aa2f2 Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Wed, 30 Nov 2016 05:14:10 +0000 Subject: [PATCH] Merge "Fix CoordinatorLayout IllegalArgumentException crash" into nyc-mr1-dev GitOrigin-RevId=76f4c18e25fdad211d81463dd9fb4586d7cc66a0 PiperOrigin-RevId: 140564755 --- .../design/widget/CoordinatorLayout.java | 6 ++ .../design/widget/CoordinatorLayoutTest.java | 58 +++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/src/android/support/design/widget/CoordinatorLayout.java b/src/android/support/design/widget/CoordinatorLayout.java index f916e5f7e..95669341c 100644 --- a/src/android/support/design/widget/CoordinatorLayout.java +++ b/src/android/support/design/widget/CoordinatorLayout.java @@ -1309,6 +1309,12 @@ public class CoordinatorLayout extends ViewGroup implements NestedScrollingParen } private void offsetChildByInset(final View child, final Rect inset, final int layoutDirection) { + if (!ViewCompat.isLaidOut(child)) { + // The view has not been laid out yet, + // so we can't obtain its bounds. + return; + } + final LayoutParams lp = (LayoutParams) child.getLayoutParams(); final int absDodgeInsetEdges = GravityCompat.getAbsoluteGravity(lp.dodgeInsetEdges, layoutDirection); diff --git a/tests/src/android/support/design/widget/CoordinatorLayoutTest.java b/tests/src/android/support/design/widget/CoordinatorLayoutTest.java index f6350c1d2..9fff6a24a 100644 --- a/tests/src/android/support/design/widget/CoordinatorLayoutTest.java +++ b/tests/src/android/support/design/widget/CoordinatorLayoutTest.java @@ -31,7 +31,9 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import android.app.Instrumentation; +import android.graphics.Rect; import android.support.design.testutils.CoordinatorLayoutUtils; +import android.support.design.widget.CoordinatorLayout.Behavior; import android.support.test.InstrumentationRegistry; import android.support.test.filters.SdkSuppress; import android.support.v4.view.ViewCompat; @@ -39,7 +41,9 @@ import android.support.v4.view.WindowInsetsCompat; import android.test.suitebuilder.annotation.MediumTest; import android.view.Gravity; import android.view.View; +import android.view.View.MeasureSpec; +import org.junit.Before; import org.junit.Test; import java.util.List; @@ -48,10 +52,17 @@ import java.util.concurrent.atomic.AtomicInteger; @MediumTest public class CoordinatorLayoutTest extends BaseInstrumentationTestCase { + private Instrumentation mInstrumentation; + public CoordinatorLayoutTest() { super(CoordinatorLayoutActivity.class); } + @Before + public void setup() { + mInstrumentation = InstrumentationRegistry.getInstrumentation(); + } + @Test @SdkSuppress(minSdkVersion = 21) public void testSetFitSystemWindows() { @@ -334,4 +345,51 @@ public class CoordinatorLayoutTest extends BaseInstrumentationTestCase