13a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren/*
23a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren * Copyright (C) 2012 The Android Open Source Project
33a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren *
43a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren * Licensed under the Apache License, Version 2.0 (the "License");
53a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren * you may not use this file except in compliance with the License.
63a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren * You may obtain a copy of the License at
73a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren *
83a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren *      http://www.apache.org/licenses/LICENSE-2.0
93a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren *
103a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren * Unless required by applicable law or agreed to in writing, software
113a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren * distributed under the License is distributed on an "AS IS" BASIS,
123a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren * See the License for the specific language governing permissions and
143a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren * limitations under the License.
153a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren */
163a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
173a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wrenpackage com.android.internal.widget;
183a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
193a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wrenimport com.android.frameworks.coretests.R;
203a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
213a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wrenimport android.content.Context;
22d84e5937468f6ebf2313ccd5ae54d5405f5e9cdeChris Wrenimport android.graphics.Color;
233a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wrenimport android.graphics.drawable.ColorDrawable;
243a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wrenimport android.test.AndroidTestCase;
253a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wrenimport android.test.suitebuilder.annotation.SmallTest;
263a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wrenimport android.view.LayoutInflater;
273a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wrenimport android.view.View;
283a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
293a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wrenimport com.android.internal.widget.SizeAdaptiveLayout;
303a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
313a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
323a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wrenpublic class SizeAdaptiveLayoutTest extends AndroidTestCase {
333a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
343a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    private LayoutInflater mInflater;
353a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    private int mOneU;
363a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    private int mFourU;
373a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    private SizeAdaptiveLayout mSizeAdaptiveLayout;
383a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    private View mSmallView;
393a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    private View mMediumView;
403a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    private View mLargeView;
413a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
423a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @Override
433a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    protected void setUp() throws Exception {
443a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        super.setUp();
453a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
463a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        // inflate the layout
473a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        final Context context = getContext();
483a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        mInflater = LayoutInflater.from(context);
493a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        mOneU = 64;
503a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        mFourU = 4 * mOneU;
513a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
523a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
533a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    private void inflate(int resource){
543a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        mSizeAdaptiveLayout = (SizeAdaptiveLayout) mInflater.inflate(resource, null);
553a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        mSizeAdaptiveLayout.onAttachedToWindow();
563a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
573a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        mSmallView = mSizeAdaptiveLayout.findViewById(R.id.one_u);
583a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        mMediumView = mSizeAdaptiveLayout.findViewById(R.id.two_u);
593a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        mLargeView = mSizeAdaptiveLayout.findViewById(R.id.four_u);
603a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
613a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
623a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    /**
633a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren     * The name 'test preconditions' is a convention to signal that if this
643a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren     * test doesn't pass, the test case was not set up properly and it might
653a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren     * explain any and all failures in other tests.  This is not guaranteed
663a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren     * to run before other tests, as junit uses reflection to find the tests.
673a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren     */
683a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
693a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testPreconditions() {
703a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertNotNull(mInflater);
713a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
723a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive);
733a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertNotNull(mSizeAdaptiveLayout);
743a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertNotNull(mSmallView);
753a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertNotNull(mLargeView);
763a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
773a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
783a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
793a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testOpenLarge() {
803a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive);
813a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams lp =
823a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mLargeView.getLayoutParams();
833a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int height = (int) lp.minHeight + 10;
843a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
853a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        measureAndLayout(height);
863a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
873a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("4U should be visible",
883a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.VISIBLE,
893a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mLargeView.getVisibility());
903a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("1U should be gone",
913a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.GONE,
923a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mSmallView.getVisibility());
933a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
943a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
953a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
963a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testOpenSmall() {
973a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive);
983a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams lp =
993a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mSmallView.getLayoutParams();
1003a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int height = (int) lp.minHeight;
1013a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
1023a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        measureAndLayout(height);
1033a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
1043a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("1U should be visible",
1053a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.VISIBLE,
1063a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mSmallView.getVisibility());
1073a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("4U should be gone",
1083a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.GONE,
1093a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mLargeView.getVisibility());
1103a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
1113a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
1123a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
1133a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testOpenTooSmall() {
1143a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive);
1153a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams lp =
1163a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mSmallView.getLayoutParams();
1173a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int height = (int) lp.minHeight - 10;
1183a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
1193a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        measureAndLayout(height);
1203a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
1213a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("1U should be visible",
1223a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.VISIBLE,
1233a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mSmallView.getVisibility());
1243a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("4U should be gone",
1253a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.GONE,
1263a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mLargeView.getVisibility());
1273a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
1283a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
1293a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
1303a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testOpenTooBig() {
1313a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive);
1323a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams lp =
1333a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mLargeView.getLayoutParams();
1343a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        lp.maxHeight = 500;
1353a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        mLargeView.setLayoutParams(lp);
1363a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int height = (int) (lp.minHeight + 10);
1373a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
1383a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        measureAndLayout(height);
1393a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
1403a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("4U should be visible",
1413a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.VISIBLE,
1423a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mLargeView.getVisibility());
1433a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("1U should be gone",
1443a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.GONE,
1453a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mSmallView.getVisibility());
1463a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
1473a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
1483a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
1493a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testOpenWrapContent() {
1503a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive_text);
1513a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams lp =
1523a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mLargeView.getLayoutParams();
1533a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int height = (int) lp.minHeight + 10;
1543a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
1553a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        // manually measure it, and lay it out
1563a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int measureSpec = View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.AT_MOST);
1573a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        mSizeAdaptiveLayout.measure(500, measureSpec);
1583a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertTrue("should not be forced to 4U",
1593a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mSizeAdaptiveLayout.getMeasuredHeight() < mFourU);
1603a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
1613a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
1623a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
1633a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testOpenOneUOnlySmall() {
1643a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive_singleton);
1653a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertNull("largeView should be NULL in the singleton layout", mLargeView);
1663a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
1673a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams lp =
1683a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mSmallView.getLayoutParams();
1693a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int height = (int) lp.minHeight - 10;
1703a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
1713a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        measureAndLayout(height);
1723a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
1733a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("1U should be visible",
1743a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.VISIBLE,
1753a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mSmallView.getVisibility());
1763a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
1773a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
1783a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
1793a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testOpenOneUOnlyLarge() {
1803a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive_singleton);
1813a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertNull("largeView should be NULL in the singleton layout", mLargeView);
1823a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
1833a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams lp =
1843a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mSmallView.getLayoutParams();
1853a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int height = (int) lp.maxHeight + 10;
1863a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
1873a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        measureAndLayout(height);
1883a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
1893a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("1U should be visible",
1903a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.VISIBLE,
1913a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mSmallView.getVisibility());
1923a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
1933a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
1943a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
1953a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testOpenOneUOnlyJustRight() {
1963a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive_singleton);
1973a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertNull("largeView should be NULL in the singleton layout", mLargeView);
1983a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
1993a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams lp =
2003a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mSmallView.getLayoutParams();
2013a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int height = (int) lp.minHeight;
2023a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2033a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        measureAndLayout(height);
2043a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2053a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("1U should be visible",
2063a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.VISIBLE,
2073a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mSmallView.getVisibility());
2083a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
2093a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2103a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
2113a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testOpenFourUOnlySmall() {
2123a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive_large_only);
2133a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertNull("smallView should be NULL in the singleton layout", mSmallView);
2143a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2153a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams lp =
2163a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mLargeView.getLayoutParams();
2173a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int height = (int) lp.minHeight - 10;
2183a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2193a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        measureAndLayout(height);
2203a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2213a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("4U should be visible",
2223a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.VISIBLE,
2233a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mLargeView.getVisibility());
2243a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
2253a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2263a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
2273a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testOpenFourUOnlyLarge() {
2283a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive_large_only);
2293a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertNull("smallView should be NULL in the singleton layout", mSmallView);
2303a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2313a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams lp =
2323a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mLargeView.getLayoutParams();
2333a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int height = (int) lp.maxHeight + 10;
2343a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2353a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        measureAndLayout(height);
2363a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2373a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("4U should be visible",
2383a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.VISIBLE,
2393a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mLargeView.getVisibility());
2403a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
2413a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2423a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
2433a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testOpenFourUOnlyJustRight() {
2443a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive_large_only);
2453a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertNull("smallView should be NULL in the singleton layout", mSmallView);
2463a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2473a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams lp =
2483a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mLargeView.getLayoutParams();
2493a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int height = (int) lp.minHeight;
2503a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2513a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        measureAndLayout(height);
2523a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2533a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("4U should be visible",
2543a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.VISIBLE,
2553a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mLargeView.getVisibility());
2563a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
2573a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2583a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
2593a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testOpenIntoAGap() {
2603a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive_gappy);
2613a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2623a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams smallParams =
2633a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mSmallView.getLayoutParams();
2643a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams largeParams =
2653a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mLargeView.getLayoutParams();
2663a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertTrue("gappy layout should have a gap",
2673a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                smallParams.maxHeight + 10 < largeParams.minHeight);
2683a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int height = (int) smallParams.maxHeight + 10;
2693a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2703a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        measureAndLayout(height);
2713a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2723a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertTrue("one and only one view should be visible",
2733a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mLargeView.getVisibility() != mSmallView.getVisibility());
2743a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        // behavior is undefined in this case.
2753a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
2763a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2773a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
2783a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testOpenIntoAnOverlap() {
2793a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive_overlapping);
2803a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2813a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams smallParams =
2823a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mSmallView.getLayoutParams();
2833a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams largeParams =
2843a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mLargeView.getLayoutParams();
2853a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("overlapping layout should overlap",
2863a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                smallParams.minHeight,
2873a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                largeParams.minHeight);
2883a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int height = (int) smallParams.maxHeight;
2893a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2903a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        measureAndLayout(height);
2913a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2923a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertTrue("one and only one view should be visible",
2933a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mLargeView.getVisibility() != mSmallView.getVisibility());
2943a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("1U should get priority in an overlap because it is first",
2953a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.VISIBLE,
2963a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mSmallView.getVisibility());
2973a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
2983a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
2993a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
3003a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testOpenThreeWayViewSmall() {
3013a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive_three_way);
3023a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertNotNull("mMediumView should not be NULL in the three view layout", mMediumView);
3033a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
3043a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams lp =
3053a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mSmallView.getLayoutParams();
3063a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int height = (int) lp.minHeight;
3073a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
3083a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        measureAndLayout(height);
3093a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
3103a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("1U should be visible",
3113a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.VISIBLE,
3123a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mSmallView.getVisibility());
3133a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("2U should be gone",
3143a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.GONE,
3153a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mMediumView.getVisibility());
3163a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("4U should be gone",
3173a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.GONE,
3183a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mLargeView.getVisibility());
3193a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
3203a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
3213a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
3223a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testOpenThreeWayViewMedium() {
3233a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive_three_way);
3243a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertNotNull("mMediumView should not be NULL in the three view layout", mMediumView);
3253a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
3263a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams lp =
3273a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mMediumView.getLayoutParams();
3283a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int height = (int) lp.minHeight;
3293a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
3303a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        measureAndLayout(height);
3313a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
3323a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("1U should be gone",
3333a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.GONE,
3343a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mSmallView.getVisibility());
3353a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("2U should be visible",
3363a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.VISIBLE,
3373a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mMediumView.getVisibility());
3383a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("4U should be gone",
3393a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.GONE,
3403a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mLargeView.getVisibility());
3413a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
3423a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
3433a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
3443a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testOpenThreeWayViewLarge() {
3453a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive_three_way);
3463a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertNotNull("mMediumView should not be NULL in the three view layout", mMediumView);
3473a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
3483a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams lp =
3493a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mLargeView.getLayoutParams();
3503a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int height = (int) lp.minHeight;
3513a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
3523a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        measureAndLayout(height);
3533a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
3543a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("1U should be gone",
3553a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.GONE,
3563a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mSmallView.getVisibility());
3573a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("2U should be gone",
3583a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.GONE,
3593a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mMediumView.getVisibility());
3603a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("4U should be visible",
3613a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.VISIBLE,
3623a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mLargeView.getVisibility());
3633a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
3643a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
3653a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
3663a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testResizeWithoutAnimation() {
3673a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive);
3683a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
3693a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams largeParams =
3703a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mLargeView.getLayoutParams();
3713a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int startHeight = (int) largeParams.minHeight + 10;
3723a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int endHeight = (int) largeParams.minHeight + 10;
3733a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
3743a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        measureAndLayout(startHeight);
3753a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
3763a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("4U should be visible",
3773a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.VISIBLE,
3783a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mLargeView.getVisibility());
3793a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertFalse("There should be no animation on initial rendering.",
3803a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                    mSizeAdaptiveLayout.getTransitionAnimation().isRunning());
3813a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
3823a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        measureAndLayout(endHeight);
3833a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
3843a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("4U should still be visible",
3853a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.VISIBLE,
3863a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mLargeView.getVisibility());
3873a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertFalse("There should be no animation on scale within a view.",
3883a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                    mSizeAdaptiveLayout.getTransitionAnimation().isRunning());
3893a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
3903a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
3913a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
3923a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testResizeWithAnimation() {
3933a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive);
3943a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
3953a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams smallParams =
3963a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mSmallView.getLayoutParams();
3973a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        SizeAdaptiveLayout.LayoutParams largeParams =
3983a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren          (SizeAdaptiveLayout.LayoutParams) mLargeView.getLayoutParams();
3993a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int startHeight = (int) largeParams.minHeight + 10;
4003a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int endHeight = (int) smallParams.maxHeight;
4013a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
4023a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        measureAndLayout(startHeight);
4033a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
4043a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("4U should be visible",
4053a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.VISIBLE,
4063a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mLargeView.getVisibility());
4073a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertFalse("There should be no animation on initial rendering.",
4083a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                    mSizeAdaptiveLayout.getTransitionAnimation().isRunning());
4093a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
4103a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        measureAndLayout(endHeight);
4113a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
4123a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("1U should now be visible",
4133a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                View.VISIBLE,
4143a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                mSmallView.getVisibility());
4153a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertTrue("There should be an animation on scale between views.",
4163a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                   mSizeAdaptiveLayout.getTransitionAnimation().isRunning());
4173a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
4183a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
4193a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
4203a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testModestyPanelChangesColorWhite() {
4213a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive_color);
4223a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        View panel = mSizeAdaptiveLayout.getModestyPanel();
4233a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertTrue("ModestyPanel should have a ColorDrawable background",
4243a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                   panel.getBackground() instanceof ColorDrawable);
4253a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        ColorDrawable panelColor = (ColorDrawable) panel.getBackground();
4263a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        ColorDrawable salColor = (ColorDrawable) mSizeAdaptiveLayout.getBackground();
4273a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertEquals("ModestyPanel color should match the SizeAdaptiveLayout",
4283a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                     panelColor.getColor(), salColor.getColor());
4293a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
4303a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
4313a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    @SmallTest
432d84e5937468f6ebf2313ccd5ae54d5405f5e9cdeChris Wren    public void testModestyPanelTracksStateListColor() {
433d84e5937468f6ebf2313ccd5ae54d5405f5e9cdeChris Wren        inflate(R.layout.size_adaptive_color_statelist);
434d84e5937468f6ebf2313ccd5ae54d5405f5e9cdeChris Wren        View panel = mSizeAdaptiveLayout.getModestyPanel();
435d84e5937468f6ebf2313ccd5ae54d5405f5e9cdeChris Wren        assertEquals("ModestyPanel should have a ColorDrawable background" ,
436d84e5937468f6ebf2313ccd5ae54d5405f5e9cdeChris Wren                     panel.getBackground().getClass(), ColorDrawable.class);
437d84e5937468f6ebf2313ccd5ae54d5405f5e9cdeChris Wren        ColorDrawable panelColor = (ColorDrawable) panel.getBackground();
438d84e5937468f6ebf2313ccd5ae54d5405f5e9cdeChris Wren        assertEquals("ModestyPanel color should match the SizeAdaptiveLayout",
439d84e5937468f6ebf2313ccd5ae54d5405f5e9cdeChris Wren                     panelColor.getColor(), Color.RED);
440d84e5937468f6ebf2313ccd5ae54d5405f5e9cdeChris Wren    }
441d84e5937468f6ebf2313ccd5ae54d5405f5e9cdeChris Wren
442d84e5937468f6ebf2313ccd5ae54d5405f5e9cdeChris Wren    @SmallTest
4433a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    public void testModestyPanelHasDefault() {
4443a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        inflate(R.layout.size_adaptive);
4453a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        View panel = mSizeAdaptiveLayout.getModestyPanel();
4463a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertNull("SizeAdaptiveLayout should have no background for this test",
4473a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                     mSizeAdaptiveLayout.getBackground());
4483a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        assertTrue("ModestyPanel should have a ColorDrawable background",
4493a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren                   panel.getBackground() instanceof ColorDrawable);
4503a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
4513a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren
45254dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren    @SmallTest
45354dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren    public void testOpenSmallEvenWhenLargeIsActuallySmall() {
45454dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren        inflate(R.layout.size_adaptive_lies);
45554dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren        SizeAdaptiveLayout.LayoutParams lp =
45654dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren          (SizeAdaptiveLayout.LayoutParams) mSmallView.getLayoutParams();
45754dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren        int height = (int) lp.minHeight;
45854dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren
45954dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren        measureAndLayout(height);
46054dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren
46154dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren        assertEquals("1U should be visible",
46254dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren                View.VISIBLE,
46354dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren                mSmallView.getVisibility());
46454dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren        assertTrue("1U should also have been measured",
46554dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren                   mSmallView.getMeasuredHeight() > 0);
46654dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren    }
46754dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren
46854dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren    @SmallTest
46954dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren    public void testOpenLargeEvenWhenLargeIsActuallySmall() {
47054dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren        inflate(R.layout.size_adaptive_lies);
47154dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren        SizeAdaptiveLayout.LayoutParams lp =
47254dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren          (SizeAdaptiveLayout.LayoutParams) mLargeView.getLayoutParams();
47354dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren        int height = (int) lp.minHeight;
47454dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren
47554dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren        measureAndLayout(height);
47654dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren
47754dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren        assertEquals("4U should be visible",
47854dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren                View.VISIBLE,
47954dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren                mLargeView.getVisibility());
48054dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren        assertTrue("4U should also have been measured",
48154dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren                   mLargeView.getMeasuredHeight() > 0);
48254dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren    }
48354dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren
4843a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    private void measureAndLayout(int height) {
4853a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        // manually measure it, and lay it out
4863a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        int measureSpec = View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.AT_MOST);
4873a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren        mSizeAdaptiveLayout.measure(500, measureSpec);
48854dfa5d90e49037eba05f5278076b45428b2bd11Chris Wren        mSizeAdaptiveLayout.layout(0, 0, 500, mSizeAdaptiveLayout.getMeasuredHeight());
4893a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren    }
4903a59d6e26dbec61ede7d6f87d966698e27c91d78Chris Wren}
491