1999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar/* 2999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * Copyright (C) 2015 The Android Open Source Project 3999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * 4999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 5999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * you may not use this file except in compliance with the License. 6999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * You may obtain a copy of the License at 7999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * 8999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 9999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * 10999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * Unless required by applicable law or agreed to in writing, software 11999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 12999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * See the License for the specific language governing permissions and 14999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * limitations under the License. 15999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar */ 16999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar 17999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarpackage android.support.v7.widget; 18999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar 19999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport org.junit.After; 20999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport org.junit.Before; 21999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport org.junit.Test; 22999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport org.junit.runner.RunWith; 23999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport org.junit.runners.Parameterized; 24999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar 25999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport android.support.test.InstrumentationRegistry; 26999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport android.test.suitebuilder.annotation.MediumTest; 27999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport android.widget.FrameLayout; 28999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar 29999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport java.util.ArrayList; 30999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport java.util.List; 31999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar 32999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport static android.support.v7.widget.LinearLayoutManager.HORIZONTAL; 330a017072206f93474ccd2706e7983c2ff778b904Yigit Boyarimport static org.junit.Assert.*; 34999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar 35999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar@RunWith(Parameterized.class) 36999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarpublic class LinearLayoutManagerResizeTest extends BaseLinearLayoutManagerTest { 37999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar 38999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar final Config mConfig; 39999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar 40999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar public LinearLayoutManagerResizeTest(Config config) { 41999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar mConfig = config; 42999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar } 43999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar 44999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar @Parameterized.Parameters(name = "{0}") 45999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar public static List<Config> testResize() throws Throwable { 46999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar List<Config> configs = new ArrayList<>(); 47999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar for (Config config : addConfigVariation(createBaseVariations(), "mItemCount", 5 48999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar , Config.DEFAULT_ITEM_COUNT)) { 49999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar configs.add(config); 50999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar } 51999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar return configs; 52999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar } 53999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar 54999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar @MediumTest 55999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar @Test 56999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar public void resize() throws Throwable { 57999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar final Config config = (Config) mConfig.clone(); 58999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar final FrameLayout container = getRecyclerViewContainer(); 59999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar runTestOnUiThread(new Runnable() { 60999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar @Override 61999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar public void run() { 62999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar container.setPadding(0, 0, 0, 0); 63999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar } 64999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar }); 65999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar 66999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar setupByConfig(config, true); 67999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar int lastVisibleItemPosition = mLayoutManager.findLastVisibleItemPosition(); 68999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar int firstVisibleItemPosition = mLayoutManager.findFirstVisibleItemPosition(); 69999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar int lastCompletelyVisibleItemPosition = mLayoutManager 70999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar .findLastCompletelyVisibleItemPosition(); 71999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar int firstCompletelyVisibleItemPosition = mLayoutManager 72999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar .findFirstCompletelyVisibleItemPosition(); 73999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar mLayoutManager.expectLayouts(1); 74999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar // resize the recycler view to half 75999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar runTestOnUiThread(new Runnable() { 76999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar @Override 77999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar public void run() { 78999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar if (config.mOrientation == HORIZONTAL) { 79999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar container.setPadding(0, 0, container.getWidth() / 2, 0); 80999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar } else { 81999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar container.setPadding(0, 0, 0, container.getWidth() / 2); 82999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar } 83999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar } 84999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar }); 85999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar mLayoutManager.waitForLayout(1); 86999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar if (config.mStackFromEnd) { 87999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar assertEquals("[" + config + "]: last visible position should not change.", 88999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar lastVisibleItemPosition, mLayoutManager.findLastVisibleItemPosition()); 89999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar assertEquals("[" + config + "]: last completely visible position should not change", 90999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar lastCompletelyVisibleItemPosition, 91999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar mLayoutManager.findLastCompletelyVisibleItemPosition()); 92999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar } else { 93999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar assertEquals("[" + config + "]: first visible position should not change.", 94999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar firstVisibleItemPosition, mLayoutManager.findFirstVisibleItemPosition()); 95999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar assertEquals("[" + config + "]: last completely visible position should not change", 96999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar firstCompletelyVisibleItemPosition, 97999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar mLayoutManager.findFirstCompletelyVisibleItemPosition()); 98999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar } 99999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar } 100999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar} 101