• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.support.v7.widget;
18 
19 import static android.support.v7.widget.BaseLinearLayoutManagerTest.Config;
20 import static android.support.v7.widget.LinearLayoutManager.HORIZONTAL;
21 import static android.support.v7.widget.LinearLayoutManager.VERTICAL;
22 
23 import android.graphics.Rect;
24 import android.os.Build;
25 import android.support.test.filters.LargeTest;
26 import android.support.test.filters.SdkSuppress;
27 import android.support.v4.view.ViewCompat;
28 import android.view.Gravity;
29 
30 import org.junit.Test;
31 import org.junit.runner.RunWith;
32 import org.junit.runners.Parameterized;
33 
34 import java.util.ArrayList;
35 import java.util.Arrays;
36 import java.util.List;
37 
38 @RunWith(Parameterized.class)
39 @LargeTest
40 public class LinearLayoutManagerWrapContentTest extends BaseWrapContentTest {
41 
42     Config mConfig;
43 
LinearLayoutManagerWrapContentTest(Config config, WrapContentConfig wrapContentConfig)44     public LinearLayoutManagerWrapContentTest(Config config,
45             WrapContentConfig wrapContentConfig) {
46         super(wrapContentConfig);
47         mConfig = config;
48     }
49 
50     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.M)
51     @Test
testUnspecifiedWithHint()52     public void testUnspecifiedWithHint() throws Throwable {
53         unspecifiedWithHintTest(mConfig.mOrientation == StaggeredGridLayoutManager.HORIZONTAL);
54     }
55 
56     @Test
deletion()57     public void deletion() throws Throwable {
58         testScenerio(new Scenario(
59                 new Step() {
60                     @Override
61                     void onRun() throws Throwable {
62                         mTestAdapter.deleteAndNotify(3, 3);
63                     }
64                 },
65                 new Step() {
66                     @Override
67                     void onRun() throws Throwable {
68                         mTestAdapter.deleteAndNotify(3, 3);
69                     }
70                 },
71                 new Step() {
72                     @Override
73                     void onRun() throws Throwable {
74                         mTestAdapter.deleteAndNotify(1, 2);
75                     }
76                 }) {
77         });
78     }
79 
80     @Test
addition()81     public void addition() throws Throwable {
82         testScenerio(new Scenario(
83                 new Step() {
84                     @Override
85                     void onRun() throws Throwable {
86                         mTestAdapter.addAndNotify(1, 2);
87                     }
88                 }
89                 ,
90                 new Step() {
91                     @Override
92                     void onRun() throws Throwable {
93                         mTestAdapter.addAndNotify(0, 2);
94                     }
95                 },
96                 new Step() {
97                     @Override
98                     void onRun() throws Throwable {
99                         mTestAdapter.addAndNotify(6, 3);
100                     }
101                 }
102         ) {
103             @Override
104             public int getSeedAdapterSize() {
105                 return 2;
106             }
107         });
108     }
109 
110     @Parameterized.Parameters(name = "{0},{1}")
data()111     public static Iterable<Object[]> data() {
112         List<Object[]> params = new ArrayList<>();
113         List<Rect> paddings = Arrays.asList(
114                 new Rect(0, 0, 0, 0),
115                 new Rect(5, 0, 0, 0),
116                 new Rect(0, 6, 0, 0),
117                 new Rect(0, 0, 7, 0),
118                 new Rect(0, 0, 0, 8),
119                 new Rect(3, 5, 7, 11)
120         );
121         for (Rect padding : paddings) {
122             for (int orientation : new int[]{VERTICAL, HORIZONTAL}) {
123                 for (boolean reverseLayout : new boolean[]{false, true}) {
124                     for (boolean stackFromBottom : new boolean[]{false, true}) {
125                         params.add(
126                                 new Object[]{
127                                         new Config(orientation, reverseLayout, stackFromBottom),
128                                         new WrapContentConfig(false, false, new Rect(padding))
129                                 }
130                         );
131                         params.add(
132                                 new Object[]{
133                                         new Config(orientation, reverseLayout, stackFromBottom),
134                                         new WrapContentConfig(HORIZONTAL == orientation,
135                                                 VERTICAL == orientation, new Rect(padding))
136                                 }
137                         );
138                     }
139                 }
140             }
141         }
142         return params;
143     }
144 
145     @Override
createLayoutManager()146     RecyclerView.LayoutManager createLayoutManager() {
147         return createFromConfig();
148     }
149 
createFromConfig()150     private LinearLayoutManager createFromConfig() {
151         LinearLayoutManager llm = new LinearLayoutManager(getActivity(), mConfig.mOrientation,
152                 mConfig.mReverseLayout);
153         llm.setStackFromEnd(mConfig.mStackFromEnd);
154         return llm;
155     }
156 
157     @Override
getVerticalGravity(RecyclerView.LayoutManager layoutManager)158     protected int getVerticalGravity(RecyclerView.LayoutManager layoutManager) {
159         if (mConfig.mOrientation == HORIZONTAL) {
160             return Gravity.TOP;
161         }
162         if (mConfig.mReverseLayout ^ mConfig.mStackFromEnd) {
163             return Gravity.BOTTOM;
164         }
165         return Gravity.TOP;
166     }
167 
168     @Override
getHorizontalGravity(RecyclerView.LayoutManager layoutManager)169     protected int getHorizontalGravity(RecyclerView.LayoutManager layoutManager) {
170         boolean rtl = layoutManager.getLayoutDirection() == ViewCompat.LAYOUT_DIRECTION_RTL;
171         if (mConfig.mOrientation == VERTICAL) {
172             if (rtl) {
173                 return Gravity.RIGHT;
174             }
175             return Gravity.LEFT;
176         }
177         boolean end = mConfig.mReverseLayout ^ mConfig.mStackFromEnd;
178         if (rtl ^ end) {
179             return Gravity.RIGHT;
180         }
181         return Gravity.LEFT;
182     }
183 }
184