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