1a23c768a1a61495852074869b244064cf535b4c1Dake Gu/*
2a23c768a1a61495852074869b244064cf535b4c1Dake Gu * Copyright (C) 2017 The Android Open Source Project
3a23c768a1a61495852074869b244064cf535b4c1Dake Gu *
4a23c768a1a61495852074869b244064cf535b4c1Dake Gu * Licensed under the Apache License, Version 2.0 (the "License");
5a23c768a1a61495852074869b244064cf535b4c1Dake Gu * you may not use this file except in compliance with the License.
6a23c768a1a61495852074869b244064cf535b4c1Dake Gu * You may obtain a copy of the License at
7a23c768a1a61495852074869b244064cf535b4c1Dake Gu *
8a23c768a1a61495852074869b244064cf535b4c1Dake Gu *      http://www.apache.org/licenses/LICENSE-2.0
9a23c768a1a61495852074869b244064cf535b4c1Dake Gu *
10a23c768a1a61495852074869b244064cf535b4c1Dake Gu * Unless required by applicable law or agreed to in writing, software
11a23c768a1a61495852074869b244064cf535b4c1Dake Gu * distributed under the License is distributed on an "AS IS" BASIS,
12a23c768a1a61495852074869b244064cf535b4c1Dake Gu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a23c768a1a61495852074869b244064cf535b4c1Dake Gu * See the License for the specific language governing permissions and
14a23c768a1a61495852074869b244064cf535b4c1Dake Gu * limitations under the License.
15a23c768a1a61495852074869b244064cf535b4c1Dake Gu */
16a23c768a1a61495852074869b244064cf535b4c1Dake Gu
17ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.leanback.widget;
18a23c768a1a61495852074869b244064cf535b4c1Dake Gu
19fa39e2bca1b284ad7c931d9194287770b7b507faAurimas Liutikasimport static org.junit.Assert.assertEquals;
20fa39e2bca1b284ad7c931d9194287770b7b507faAurimas Liutikasimport static org.junit.Assert.assertFalse;
21fa39e2bca1b284ad7c931d9194287770b7b507faAurimas Liutikasimport static org.junit.Assert.assertTrue;
22a23c768a1a61495852074869b244064cf535b4c1Dake Gu
23a23c768a1a61495852074869b244064cf535b4c1Dake Guimport android.content.Context;
24a23c768a1a61495852074869b244064cf535b4c1Dake Guimport android.graphics.Color;
25a23c768a1a61495852074869b244064cf535b4c1Dake Guimport android.graphics.drawable.ColorDrawable;
26a23c768a1a61495852074869b244064cf535b4c1Dake Guimport android.graphics.drawable.Drawable;
27a23c768a1a61495852074869b244064cf535b4c1Dake Guimport android.os.Build;
28a23c768a1a61495852074869b244064cf535b4c1Dake Guimport android.support.test.InstrumentationRegistry;
29a23c768a1a61495852074869b244064cf535b4c1Dake Guimport android.support.test.filters.SmallTest;
30a23c768a1a61495852074869b244064cf535b4c1Dake Guimport android.support.test.runner.AndroidJUnit4;
31a23c768a1a61495852074869b244064cf535b4c1Dake Guimport android.view.View;
32a23c768a1a61495852074869b244064cf535b4c1Dake Guimport android.view.ViewGroup;
33a23c768a1a61495852074869b244064cf535b4c1Dake Guimport android.widget.FrameLayout;
34a23c768a1a61495852074869b244064cf535b4c1Dake Gu
358619e0ef7062b6a714f22af993e4b440fae7ef08Aurimas Liutikasimport androidx.core.view.ViewCompat;
368619e0ef7062b6a714f22af993e4b440fae7ef08Aurimas Liutikasimport androidx.leanback.R;
378619e0ef7062b6a714f22af993e4b440fae7ef08Aurimas Liutikas
38a23c768a1a61495852074869b244064cf535b4c1Dake Guimport org.junit.Test;
39a23c768a1a61495852074869b244064cf535b4c1Dake Guimport org.junit.runner.RunWith;
40a23c768a1a61495852074869b244064cf535b4c1Dake Gu
41a23c768a1a61495852074869b244064cf535b4c1Dake Gu@RunWith(AndroidJUnit4.class)
42a23c768a1a61495852074869b244064cf535b4c1Dake Gu@SmallTest
43a23c768a1a61495852074869b244064cf535b4c1Dake Gupublic class ListRowPresenterTest {
44a23c768a1a61495852074869b244064cf535b4c1Dake Gu
456a3e5a1ea0f4791413a81bf1667f358f1eda1affDake Gu    static final float DELTA = 1f;
46a23c768a1a61495852074869b244064cf535b4c1Dake Gu    // default overlay color when setSelectLevel(0.5f)
47a23c768a1a61495852074869b244064cf535b4c1Dake Gu    static final int HALF_OVERLAY_COLOR = 0x4C000000;
48a23c768a1a61495852074869b244064cf535b4c1Dake Gu    static int sFocusedZ;
49a23c768a1a61495852074869b244064cf535b4c1Dake Gu
50a23c768a1a61495852074869b244064cf535b4c1Dake Gu    static class DummyPresenter extends Presenter {
51d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu        int mWidth;
52d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu        int mHeight;
53d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu
54d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu        DummyPresenter() {
55d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu            this(100, 100);
56d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu        }
57d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu
58d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu        DummyPresenter(int width, int height) {
59d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu            mWidth = width;
60d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu            mHeight = height;
61d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu        }
62d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu
63a23c768a1a61495852074869b244064cf535b4c1Dake Gu        @Override
64a23c768a1a61495852074869b244064cf535b4c1Dake Gu        public ViewHolder onCreateViewHolder(ViewGroup parent) {
65a23c768a1a61495852074869b244064cf535b4c1Dake Gu            View view = new View(parent.getContext());
66a23c768a1a61495852074869b244064cf535b4c1Dake Gu            view.setFocusable(true);
67a23c768a1a61495852074869b244064cf535b4c1Dake Gu            view.setId(R.id.lb_action_button);
68d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu            view.setLayoutParams(new ViewGroup.LayoutParams(mWidth, mHeight));
69a23c768a1a61495852074869b244064cf535b4c1Dake Gu            return new Presenter.ViewHolder(view);
70a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
71a23c768a1a61495852074869b244064cf535b4c1Dake Gu
72a23c768a1a61495852074869b244064cf535b4c1Dake Gu        @Override
73a23c768a1a61495852074869b244064cf535b4c1Dake Gu        public void onBindViewHolder(ViewHolder viewHolder, Object item) {
74a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
75a23c768a1a61495852074869b244064cf535b4c1Dake Gu
76a23c768a1a61495852074869b244064cf535b4c1Dake Gu        @Override
77a23c768a1a61495852074869b244064cf535b4c1Dake Gu        public void onUnbindViewHolder(ViewHolder viewHolder) {
78a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
79a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
80a23c768a1a61495852074869b244064cf535b4c1Dake Gu
81a23c768a1a61495852074869b244064cf535b4c1Dake Gu    Context mContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
82a23c768a1a61495852074869b244064cf535b4c1Dake Gu    ListRowPresenter mListRowPresenter;
83a23c768a1a61495852074869b244064cf535b4c1Dake Gu    ListRow mRow;
84a23c768a1a61495852074869b244064cf535b4c1Dake Gu    ListRowPresenter.ViewHolder mListVh;
85a23c768a1a61495852074869b244064cf535b4c1Dake Gu
86a23c768a1a61495852074869b244064cf535b4c1Dake Gu    void setup(ListRowPresenter listRowPresenter, ObjectAdapter adapter) {
87a23c768a1a61495852074869b244064cf535b4c1Dake Gu        sFocusedZ = mContext.getResources().getDimensionPixelSize(
88a23c768a1a61495852074869b244064cf535b4c1Dake Gu                R.dimen.lb_material_shadow_focused_z);
89a23c768a1a61495852074869b244064cf535b4c1Dake Gu        assertTrue(sFocusedZ > 0);
90a23c768a1a61495852074869b244064cf535b4c1Dake Gu        mListRowPresenter = listRowPresenter;
91a23c768a1a61495852074869b244064cf535b4c1Dake Gu        mRow = new ListRow(adapter);
92a23c768a1a61495852074869b244064cf535b4c1Dake Gu        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
93a23c768a1a61495852074869b244064cf535b4c1Dake Gu            @Override
94a23c768a1a61495852074869b244064cf535b4c1Dake Gu            public void run() {
95a23c768a1a61495852074869b244064cf535b4c1Dake Gu                final ViewGroup parent = new FrameLayout(mContext);
96a23c768a1a61495852074869b244064cf535b4c1Dake Gu                Presenter.ViewHolder containerVh = mListRowPresenter.onCreateViewHolder(parent);
97a23c768a1a61495852074869b244064cf535b4c1Dake Gu                parent.addView(containerVh.view, 1000, 1000);
98a23c768a1a61495852074869b244064cf535b4c1Dake Gu                mListVh = (ListRowPresenter.ViewHolder) mListRowPresenter.getRowViewHolder(
99a23c768a1a61495852074869b244064cf535b4c1Dake Gu                        containerVh);
100a23c768a1a61495852074869b244064cf535b4c1Dake Gu                mListRowPresenter.onBindViewHolder(mListVh, mRow);
101a23c768a1a61495852074869b244064cf535b4c1Dake Gu                runRecyclerViewLayout();
102a23c768a1a61495852074869b244064cf535b4c1Dake Gu            }
103a23c768a1a61495852074869b244064cf535b4c1Dake Gu        });
104a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
105a23c768a1a61495852074869b244064cf535b4c1Dake Gu
106a23c768a1a61495852074869b244064cf535b4c1Dake Gu    void runRecyclerViewLayout() {
107a23c768a1a61495852074869b244064cf535b4c1Dake Gu        mListVh.view.measure(View.MeasureSpec.makeMeasureSpec(1000, View.MeasureSpec.EXACTLY),
108a23c768a1a61495852074869b244064cf535b4c1Dake Gu                View.MeasureSpec.makeMeasureSpec(1000, View.MeasureSpec.EXACTLY));
109a23c768a1a61495852074869b244064cf535b4c1Dake Gu        mListVh.view.layout(0, 0, 1000, 1000);
110a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
111a23c768a1a61495852074869b244064cf535b4c1Dake Gu
112a23c768a1a61495852074869b244064cf535b4c1Dake Gu    static void assertChildrenHaveAlpha(ViewGroup group, int numChildren, float alpha) {
113a23c768a1a61495852074869b244064cf535b4c1Dake Gu        assertEquals(numChildren, group.getChildCount());
114a23c768a1a61495852074869b244064cf535b4c1Dake Gu        for (int i = 0; i < numChildren; i++) {
115fa39e2bca1b284ad7c931d9194287770b7b507faAurimas Liutikas            assertEquals(alpha, group.getChildAt(i).getAlpha(), 0.01f);
116a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
117a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
118a23c768a1a61495852074869b244064cf535b4c1Dake Gu
119a23c768a1a61495852074869b244064cf535b4c1Dake Gu    static Drawable getForeground(View view) {
120a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (Build.VERSION.SDK_INT >= 23) {
121a23c768a1a61495852074869b244064cf535b4c1Dake Gu            return view.getForeground();
122a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
123a23c768a1a61495852074869b244064cf535b4c1Dake Gu        return null;
124a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
125a23c768a1a61495852074869b244064cf535b4c1Dake Gu
126a23c768a1a61495852074869b244064cf535b4c1Dake Gu    static void assertChildrenHaveColorOverlay(ViewGroup group, int numChildren, int overlayColor,
127a23c768a1a61495852074869b244064cf535b4c1Dake Gu            boolean keepChildForeground) {
128a23c768a1a61495852074869b244064cf535b4c1Dake Gu        assertEquals(numChildren, group.getChildCount());
129a23c768a1a61495852074869b244064cf535b4c1Dake Gu        for (int i = 0; i < numChildren; i++) {
130a23c768a1a61495852074869b244064cf535b4c1Dake Gu            View view = group.getChildAt(i);
131a23c768a1a61495852074869b244064cf535b4c1Dake Gu            if (keepChildForeground) {
132a23c768a1a61495852074869b244064cf535b4c1Dake Gu                assertTrue("When keepChildForeground, always create a"
133a23c768a1a61495852074869b244064cf535b4c1Dake Gu                        + " ShadowOverlayContainer", view instanceof ShadowOverlayContainer);
134a23c768a1a61495852074869b244064cf535b4c1Dake Gu                assertEquals(overlayColor, ((ShadowOverlayContainer) view).mOverlayColor);
135a23c768a1a61495852074869b244064cf535b4c1Dake Gu            } else {
136a23c768a1a61495852074869b244064cf535b4c1Dake Gu                if (view instanceof ShadowOverlayContainer) {
137a23c768a1a61495852074869b244064cf535b4c1Dake Gu                    assertEquals(overlayColor, ((ShadowOverlayContainer) view).mOverlayColor);
138a23c768a1a61495852074869b244064cf535b4c1Dake Gu                } else {
139a23c768a1a61495852074869b244064cf535b4c1Dake Gu                    Drawable foreground = getForeground(view);
140a23c768a1a61495852074869b244064cf535b4c1Dake Gu                    assertEquals(overlayColor,
141a23c768a1a61495852074869b244064cf535b4c1Dake Gu                            foreground instanceof ColorDrawable
142a23c768a1a61495852074869b244064cf535b4c1Dake Gu                                    ? ((ColorDrawable) foreground).getColor() : Color.TRANSPARENT);
143a23c768a1a61495852074869b244064cf535b4c1Dake Gu                }
144a23c768a1a61495852074869b244064cf535b4c1Dake Gu            }
145a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
146a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
147a23c768a1a61495852074869b244064cf535b4c1Dake Gu
148d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu    @Test
149d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu    public void measureWithScrapViewHeight() {
150d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu        final ArrayObjectAdapter arrayAdapter = new ArrayObjectAdapter(
151d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu                new DummyPresenter(100, 213));
152d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu        arrayAdapter.add("abc");
153d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu        mListRowPresenter = new ListRowPresenter();
154d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu        mRow = new ListRow(arrayAdapter);
155d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
156d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu            @Override
157d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu            public void run() {
158d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu                final ViewGroup parent = new FrameLayout(mContext);
159d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu                Presenter.ViewHolder containerVh = mListRowPresenter.onCreateViewHolder(parent);
160d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu                parent.addView(containerVh.view, 1000, ViewGroup.LayoutParams.WRAP_CONTENT);
161d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu                mListVh = (ListRowPresenter.ViewHolder) mListRowPresenter.getRowViewHolder(
162d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu                        containerVh);
163d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu                mListRowPresenter.onBindViewHolder(mListVh, mRow);
164d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu                mListVh.view.measure(
165d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu                        View.MeasureSpec.makeMeasureSpec(1000, View.MeasureSpec.AT_MOST),
166d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu                        View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
167d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu            }
168d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu        });
169d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu        // measure hight should equals item height plus top and bottom paddings
170d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu        assertEquals(213 + mListVh.view.getPaddingTop() + mListVh.view.getPaddingBottom(),
171d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu                mListVh.view.getMeasuredHeight());
172d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu    }
173d3d2ade096dafb0a8e504c27d2d4661c75ae7682Dake Gu
174a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void defaultListRowOverlayColor(ListRowPresenter listRowPresenter) {
175a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final ArrayObjectAdapter arrayAdapter = new ArrayObjectAdapter(new DummyPresenter());
176a23c768a1a61495852074869b244064cf535b4c1Dake Gu        arrayAdapter.add("abc");
177a23c768a1a61495852074869b244064cf535b4c1Dake Gu        setup(listRowPresenter, arrayAdapter);
178a23c768a1a61495852074869b244064cf535b4c1Dake Gu        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
179a23c768a1a61495852074869b244064cf535b4c1Dake Gu            @Override
180a23c768a1a61495852074869b244064cf535b4c1Dake Gu            public void run() {
181a23c768a1a61495852074869b244064cf535b4c1Dake Gu                mListVh.getGridView().setItemAnimator(null);
182a23c768a1a61495852074869b244064cf535b4c1Dake Gu                mListRowPresenter.setSelectLevel(mListVh, 0.5f);
183a23c768a1a61495852074869b244064cf535b4c1Dake Gu            }
184a23c768a1a61495852074869b244064cf535b4c1Dake Gu        });
185a23c768a1a61495852074869b244064cf535b4c1Dake Gu        boolean keepChildForeground = listRowPresenter.isKeepChildForeground();
186a23c768a1a61495852074869b244064cf535b4c1Dake Gu        assertChildrenHaveColorOverlay(mListVh.getGridView(), 1, HALF_OVERLAY_COLOR,
187a23c768a1a61495852074869b244064cf535b4c1Dake Gu                keepChildForeground);
188a23c768a1a61495852074869b244064cf535b4c1Dake Gu        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
189a23c768a1a61495852074869b244064cf535b4c1Dake Gu            @Override
190a23c768a1a61495852074869b244064cf535b4c1Dake Gu            public void run() {
191a23c768a1a61495852074869b244064cf535b4c1Dake Gu                arrayAdapter.add("def");
192a23c768a1a61495852074869b244064cf535b4c1Dake Gu                runRecyclerViewLayout();
193a23c768a1a61495852074869b244064cf535b4c1Dake Gu            }
194a23c768a1a61495852074869b244064cf535b4c1Dake Gu        });
195a23c768a1a61495852074869b244064cf535b4c1Dake Gu        assertChildrenHaveColorOverlay(mListVh.getGridView(), 2, HALF_OVERLAY_COLOR,
196a23c768a1a61495852074869b244064cf535b4c1Dake Gu                keepChildForeground);
197a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
198a23c768a1a61495852074869b244064cf535b4c1Dake Gu
199a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
200a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void defaultListRowOverlayColor() {
201a23c768a1a61495852074869b244064cf535b4c1Dake Gu        defaultListRowOverlayColor(new ListRowPresenter());
202a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
203a23c768a1a61495852074869b244064cf535b4c1Dake Gu
204a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
205a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void defaultListRowOverlayColorCombinations() {
206a23c768a1a61495852074869b244064cf535b4c1Dake Gu        for (boolean keepChildForeground: new boolean[] {false, true}) {
207a23c768a1a61495852074869b244064cf535b4c1Dake Gu            for (boolean isUzingZorder : new boolean[]{false, true}) {
208a23c768a1a61495852074869b244064cf535b4c1Dake Gu                for (boolean isUsingDefaultShadow : new boolean[]{false, true}) {
209a23c768a1a61495852074869b244064cf535b4c1Dake Gu                    for (boolean enableRoundedCorner : new boolean[]{false, true}) {
210a23c768a1a61495852074869b244064cf535b4c1Dake Gu                        for (boolean shadowEnabled : new boolean[]{false, true}) {
211a23c768a1a61495852074869b244064cf535b4c1Dake Gu                            final boolean paramIsUsingZorder = isUzingZorder;
212a23c768a1a61495852074869b244064cf535b4c1Dake Gu                            final boolean paramIsUsingDefaultShadow = isUsingDefaultShadow;
213a23c768a1a61495852074869b244064cf535b4c1Dake Gu                            ListRowPresenter presenter = new ListRowPresenter() {
214a23c768a1a61495852074869b244064cf535b4c1Dake Gu                                @Override
215a23c768a1a61495852074869b244064cf535b4c1Dake Gu                                public boolean isUsingZOrder(Context context) {
216a23c768a1a61495852074869b244064cf535b4c1Dake Gu                                    return paramIsUsingZorder;
217a23c768a1a61495852074869b244064cf535b4c1Dake Gu                                }
218a23c768a1a61495852074869b244064cf535b4c1Dake Gu
219a23c768a1a61495852074869b244064cf535b4c1Dake Gu                                @Override
220a23c768a1a61495852074869b244064cf535b4c1Dake Gu                                public boolean isUsingDefaultShadow() {
221a23c768a1a61495852074869b244064cf535b4c1Dake Gu                                    return paramIsUsingDefaultShadow;
222a23c768a1a61495852074869b244064cf535b4c1Dake Gu                                }
223a23c768a1a61495852074869b244064cf535b4c1Dake Gu                            };
224a23c768a1a61495852074869b244064cf535b4c1Dake Gu                            presenter.setKeepChildForeground(keepChildForeground);
225a23c768a1a61495852074869b244064cf535b4c1Dake Gu                            presenter.setShadowEnabled(shadowEnabled);
226a23c768a1a61495852074869b244064cf535b4c1Dake Gu                            presenter.enableChildRoundedCorners(enableRoundedCorner);
227a23c768a1a61495852074869b244064cf535b4c1Dake Gu                            defaultListRowOverlayColor(presenter);
228a23c768a1a61495852074869b244064cf535b4c1Dake Gu                        }
229a23c768a1a61495852074869b244064cf535b4c1Dake Gu                    }
230a23c768a1a61495852074869b244064cf535b4c1Dake Gu                }
231a23c768a1a61495852074869b244064cf535b4c1Dake Gu            }
232a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
233a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
234a23c768a1a61495852074869b244064cf535b4c1Dake Gu
235a23c768a1a61495852074869b244064cf535b4c1Dake Gu    static class CustomSelectEffectRowPresenter extends ListRowPresenter {
236a23c768a1a61495852074869b244064cf535b4c1Dake Gu        @Override
237a23c768a1a61495852074869b244064cf535b4c1Dake Gu        public boolean isUsingDefaultListSelectEffect() {
238a23c768a1a61495852074869b244064cf535b4c1Dake Gu            return false;
239a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
240a23c768a1a61495852074869b244064cf535b4c1Dake Gu
241a23c768a1a61495852074869b244064cf535b4c1Dake Gu        @Override
242a23c768a1a61495852074869b244064cf535b4c1Dake Gu        protected void applySelectLevelToChild(ViewHolder rowViewHolder, View childView) {
243a23c768a1a61495852074869b244064cf535b4c1Dake Gu            childView.setAlpha(rowViewHolder.getSelectLevel());
244a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
245a23c768a1a61495852074869b244064cf535b4c1Dake Gu    };
246a23c768a1a61495852074869b244064cf535b4c1Dake Gu
247a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void customListRowSelectEffect(ListRowPresenter presenter) {
248a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final ArrayObjectAdapter arrayAdapter = new ArrayObjectAdapter(new DummyPresenter());
249a23c768a1a61495852074869b244064cf535b4c1Dake Gu        arrayAdapter.add("abc");
250a23c768a1a61495852074869b244064cf535b4c1Dake Gu        setup(presenter, arrayAdapter);
251a23c768a1a61495852074869b244064cf535b4c1Dake Gu        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
252a23c768a1a61495852074869b244064cf535b4c1Dake Gu            @Override
253a23c768a1a61495852074869b244064cf535b4c1Dake Gu            public void run() {
254a23c768a1a61495852074869b244064cf535b4c1Dake Gu                mListVh.getGridView().setItemAnimator(null);
255a23c768a1a61495852074869b244064cf535b4c1Dake Gu                mListRowPresenter.setSelectLevel(mListVh, 0.5f);
256a23c768a1a61495852074869b244064cf535b4c1Dake Gu            }
257a23c768a1a61495852074869b244064cf535b4c1Dake Gu        });
258a23c768a1a61495852074869b244064cf535b4c1Dake Gu        assertChildrenHaveAlpha(mListVh.getGridView(), 1, 0.5f);
259a23c768a1a61495852074869b244064cf535b4c1Dake Gu        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
260a23c768a1a61495852074869b244064cf535b4c1Dake Gu            @Override
261a23c768a1a61495852074869b244064cf535b4c1Dake Gu            public void run() {
262a23c768a1a61495852074869b244064cf535b4c1Dake Gu                arrayAdapter.add("def");
263a23c768a1a61495852074869b244064cf535b4c1Dake Gu                runRecyclerViewLayout();
264a23c768a1a61495852074869b244064cf535b4c1Dake Gu            }
265a23c768a1a61495852074869b244064cf535b4c1Dake Gu        });
266a23c768a1a61495852074869b244064cf535b4c1Dake Gu        assertChildrenHaveAlpha(mListVh.getGridView(), 2, 0.5f);
267a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
268a23c768a1a61495852074869b244064cf535b4c1Dake Gu
269a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
270a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void customListRowSelectEffect() {
271a23c768a1a61495852074869b244064cf535b4c1Dake Gu        customListRowSelectEffect(new CustomSelectEffectRowPresenter());
272a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
273a23c768a1a61495852074869b244064cf535b4c1Dake Gu
274a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
275a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void customListRowSelectEffectCombinations() {
276a23c768a1a61495852074869b244064cf535b4c1Dake Gu        for (boolean keepChildForeground: new boolean[] {false, true}) {
277a23c768a1a61495852074869b244064cf535b4c1Dake Gu            for (boolean isUzingZorder: new boolean[] {false, true}) {
278a23c768a1a61495852074869b244064cf535b4c1Dake Gu                for (boolean isUsingDefaultShadow: new boolean[] {false, true}) {
279a23c768a1a61495852074869b244064cf535b4c1Dake Gu                    for (boolean enableRoundedCorner : new boolean[]{false, true}) {
280a23c768a1a61495852074869b244064cf535b4c1Dake Gu                        for (boolean shadowEnabled : new boolean[]{false, true}) {
281a23c768a1a61495852074869b244064cf535b4c1Dake Gu                            final boolean paramIsUsingZorder = isUzingZorder;
282a23c768a1a61495852074869b244064cf535b4c1Dake Gu                            final boolean paramIsUsingDefaultShadow = isUsingDefaultShadow;
283a23c768a1a61495852074869b244064cf535b4c1Dake Gu                            ListRowPresenter presenter = new CustomSelectEffectRowPresenter() {
284a23c768a1a61495852074869b244064cf535b4c1Dake Gu                                @Override
285a23c768a1a61495852074869b244064cf535b4c1Dake Gu                                public boolean isUsingZOrder(Context context) {
286a23c768a1a61495852074869b244064cf535b4c1Dake Gu                                    return paramIsUsingZorder;
287a23c768a1a61495852074869b244064cf535b4c1Dake Gu                                }
288a23c768a1a61495852074869b244064cf535b4c1Dake Gu
289a23c768a1a61495852074869b244064cf535b4c1Dake Gu                                @Override
290a23c768a1a61495852074869b244064cf535b4c1Dake Gu                                public boolean isUsingDefaultShadow() {
291a23c768a1a61495852074869b244064cf535b4c1Dake Gu                                    return paramIsUsingDefaultShadow;
292a23c768a1a61495852074869b244064cf535b4c1Dake Gu                                }
293a23c768a1a61495852074869b244064cf535b4c1Dake Gu                            };
294a23c768a1a61495852074869b244064cf535b4c1Dake Gu                            presenter.setKeepChildForeground(keepChildForeground);
295a23c768a1a61495852074869b244064cf535b4c1Dake Gu                            presenter.setShadowEnabled(shadowEnabled);
296a23c768a1a61495852074869b244064cf535b4c1Dake Gu                            presenter.enableChildRoundedCorners(enableRoundedCorner);
297a23c768a1a61495852074869b244064cf535b4c1Dake Gu                            customListRowSelectEffect(presenter);
298a23c768a1a61495852074869b244064cf535b4c1Dake Gu                        }
299a23c768a1a61495852074869b244064cf535b4c1Dake Gu                    }
300a23c768a1a61495852074869b244064cf535b4c1Dake Gu                }
301a23c768a1a61495852074869b244064cf535b4c1Dake Gu            }
302a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
303a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
304a23c768a1a61495852074869b244064cf535b4c1Dake Gu
305a23c768a1a61495852074869b244064cf535b4c1Dake Gu    static class ShadowOverlayResult {
306a23c768a1a61495852074869b244064cf535b4c1Dake Gu        boolean mShadowOverlayContainer;
307a23c768a1a61495852074869b244064cf535b4c1Dake Gu        int mShadowOverlayContainerOverlayColor;
308a23c768a1a61495852074869b244064cf535b4c1Dake Gu        float mShadowOverlayContainerOverlayZ;
309a23c768a1a61495852074869b244064cf535b4c1Dake Gu        boolean mShadowOverlayContainerOpticalBounds;
31001a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu        boolean mShadowOverlayContainerClipToOutline;
311a23c768a1a61495852074869b244064cf535b4c1Dake Gu        int mViewOverlayColor;
312a23c768a1a61495852074869b244064cf535b4c1Dake Gu        float mViewZ;
313a23c768a1a61495852074869b244064cf535b4c1Dake Gu        boolean mViewOpticalBounds;
31401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu        boolean mViewClipToOutline;
315a23c768a1a61495852074869b244064cf535b4c1Dake Gu        void expect(boolean shadowOverlayContainer, int shadowOverlayContainerOverlayColor,
316a23c768a1a61495852074869b244064cf535b4c1Dake Gu                float shadowOverlayContainerOverlayZ, boolean shadowOverlayContainerOpticalBounds,
31701a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                boolean shadowOverlayContainerClipToOutline,
31801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                int viewOverlayColor, float viewZ, boolean viewOpticalBounds,
31901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                boolean viewClipToOutline) {
320a23c768a1a61495852074869b244064cf535b4c1Dake Gu            assertEquals(this.mShadowOverlayContainer, shadowOverlayContainer);
321a23c768a1a61495852074869b244064cf535b4c1Dake Gu            assertEquals(this.mShadowOverlayContainerOverlayColor,
322a23c768a1a61495852074869b244064cf535b4c1Dake Gu                    shadowOverlayContainerOverlayColor);
3236a3e5a1ea0f4791413a81bf1667f358f1eda1affDake Gu            assertEquals(this.mShadowOverlayContainerOverlayZ, shadowOverlayContainerOverlayZ,
3246a3e5a1ea0f4791413a81bf1667f358f1eda1affDake Gu                    DELTA);
325a23c768a1a61495852074869b244064cf535b4c1Dake Gu            assertEquals(this.mShadowOverlayContainerOpticalBounds,
326a23c768a1a61495852074869b244064cf535b4c1Dake Gu                    shadowOverlayContainerOpticalBounds);
32701a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            assertEquals(this.mShadowOverlayContainerClipToOutline,
32801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    shadowOverlayContainerClipToOutline);
329a23c768a1a61495852074869b244064cf535b4c1Dake Gu            assertEquals(this.mViewOverlayColor, viewOverlayColor);
3306a3e5a1ea0f4791413a81bf1667f358f1eda1affDake Gu            assertEquals(this.mViewZ, viewZ, DELTA);
331a23c768a1a61495852074869b244064cf535b4c1Dake Gu            assertEquals(this.mViewOpticalBounds, viewOpticalBounds);
33201a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            assertEquals(this.mViewClipToOutline, viewClipToOutline);
333a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
334a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
335a23c768a1a61495852074869b244064cf535b4c1Dake Gu
336a23c768a1a61495852074869b244064cf535b4c1Dake Gu    ShadowOverlayResult setupDefaultPresenterWithSingleElement(final boolean isUsingZorder,
337a23c768a1a61495852074869b244064cf535b4c1Dake Gu            final boolean isUsingDefaultShadow,
338a23c768a1a61495852074869b244064cf535b4c1Dake Gu            final boolean enableRoundedCorner,
339a23c768a1a61495852074869b244064cf535b4c1Dake Gu            final boolean shadowEnabled,
340a23c768a1a61495852074869b244064cf535b4c1Dake Gu            final boolean keepChildForeground) {
341a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ArrayObjectAdapter adapter = new ArrayObjectAdapter(new DummyPresenter());
342a23c768a1a61495852074869b244064cf535b4c1Dake Gu        adapter.add("abc");
343a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ListRowPresenter listRowPresenter = new ListRowPresenter() {
344a23c768a1a61495852074869b244064cf535b4c1Dake Gu            @Override
345a23c768a1a61495852074869b244064cf535b4c1Dake Gu            public boolean isUsingZOrder(Context context) {
346a23c768a1a61495852074869b244064cf535b4c1Dake Gu                return isUsingZorder;
347a23c768a1a61495852074869b244064cf535b4c1Dake Gu            }
348a23c768a1a61495852074869b244064cf535b4c1Dake Gu
349a23c768a1a61495852074869b244064cf535b4c1Dake Gu            @Override
350a23c768a1a61495852074869b244064cf535b4c1Dake Gu            public boolean isUsingDefaultShadow() {
351a23c768a1a61495852074869b244064cf535b4c1Dake Gu                return isUsingDefaultShadow;
352a23c768a1a61495852074869b244064cf535b4c1Dake Gu            }
353534be4efda1eec8ed48f9e70a4ea4482975bbb58Dake Gu
354534be4efda1eec8ed48f9e70a4ea4482975bbb58Dake Gu            @Override
3559ba32514a3e522d4a2602a2bb97eb530d8447d35Dake Gu            public boolean isUsingOutlineClipping(Context context) {
356534be4efda1eec8ed48f9e70a4ea4482975bbb58Dake Gu                // force to use ViewOutline for rounded corner test
357534be4efda1eec8ed48f9e70a4ea4482975bbb58Dake Gu                return true;
358534be4efda1eec8ed48f9e70a4ea4482975bbb58Dake Gu            }
359a23c768a1a61495852074869b244064cf535b4c1Dake Gu        };
360a23c768a1a61495852074869b244064cf535b4c1Dake Gu        listRowPresenter.setShadowEnabled(shadowEnabled);
361a23c768a1a61495852074869b244064cf535b4c1Dake Gu        listRowPresenter.enableChildRoundedCorners(enableRoundedCorner);
362a23c768a1a61495852074869b244064cf535b4c1Dake Gu        listRowPresenter.setKeepChildForeground(keepChildForeground);
363a23c768a1a61495852074869b244064cf535b4c1Dake Gu        setup(listRowPresenter, adapter);
364a23c768a1a61495852074869b244064cf535b4c1Dake Gu        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
365a23c768a1a61495852074869b244064cf535b4c1Dake Gu            @Override
366a23c768a1a61495852074869b244064cf535b4c1Dake Gu            public void run() {
367a23c768a1a61495852074869b244064cf535b4c1Dake Gu                mListVh.getGridView().setItemAnimator(null);
368a23c768a1a61495852074869b244064cf535b4c1Dake Gu                mListRowPresenter.setSelectLevel(mListVh, 0.5f);
369a23c768a1a61495852074869b244064cf535b4c1Dake Gu                View child = mListVh.getGridView().getChildAt(0);
370a23c768a1a61495852074869b244064cf535b4c1Dake Gu                FocusHighlightHelper.FocusAnimator animator = (FocusHighlightHelper.FocusAnimator)
371a23c768a1a61495852074869b244064cf535b4c1Dake Gu                        child.getTag(R.id.lb_focus_animator);
372a23c768a1a61495852074869b244064cf535b4c1Dake Gu                animator.animateFocus(true, true);
373a23c768a1a61495852074869b244064cf535b4c1Dake Gu            }
374a23c768a1a61495852074869b244064cf535b4c1Dake Gu        });
375a23c768a1a61495852074869b244064cf535b4c1Dake Gu        return collectResult();
376a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
377a23c768a1a61495852074869b244064cf535b4c1Dake Gu
378a23c768a1a61495852074869b244064cf535b4c1Dake Gu    ShadowOverlayResult collectResult() {
379a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = new ShadowOverlayResult();
380a23c768a1a61495852074869b244064cf535b4c1Dake Gu        View view = mListVh.getGridView().getChildAt(0);
381a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (view instanceof ShadowOverlayContainer) {
382a23c768a1a61495852074869b244064cf535b4c1Dake Gu            result.mShadowOverlayContainer = true;
383a23c768a1a61495852074869b244064cf535b4c1Dake Gu            result.mShadowOverlayContainerOverlayColor = ((ShadowOverlayContainer) view)
384a23c768a1a61495852074869b244064cf535b4c1Dake Gu                    .mOverlayColor;
385a23c768a1a61495852074869b244064cf535b4c1Dake Gu            result.mShadowOverlayContainerOverlayZ = ViewCompat.getZ(view);
386a23c768a1a61495852074869b244064cf535b4c1Dake Gu            result.mShadowOverlayContainerOpticalBounds = view.getWidth() > 100;
38701a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.mShadowOverlayContainerClipToOutline = Build.VERSION.SDK_INT >= 21
38801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    ? view.getClipToOutline() : false;
389a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
390a23c768a1a61495852074869b244064cf535b4c1Dake Gu            result.mShadowOverlayContainer = false;
391a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
392a23c768a1a61495852074869b244064cf535b4c1Dake Gu        view = view.findViewById(R.id.lb_action_button);
393a23c768a1a61495852074869b244064cf535b4c1Dake Gu        Drawable d = getForeground(view);
394a23c768a1a61495852074869b244064cf535b4c1Dake Gu        result.mViewOverlayColor = d instanceof ColorDrawable ? ((ColorDrawable) d).getColor()
395a23c768a1a61495852074869b244064cf535b4c1Dake Gu                : Color.TRANSPARENT;
396a23c768a1a61495852074869b244064cf535b4c1Dake Gu        result.mViewZ = ViewCompat.getZ(view);
397a23c768a1a61495852074869b244064cf535b4c1Dake Gu        result.mViewOpticalBounds = view.getWidth() > 100;
39801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu        result.mViewClipToOutline = Build.VERSION.SDK_INT >= 21 ? view.getClipToOutline() : false;
399a23c768a1a61495852074869b244064cf535b4c1Dake Gu        return result;
400a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
401a23c768a1a61495852074869b244064cf535b4c1Dake Gu
402a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
403a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest01() {
404a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = false;
405a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = false;
406a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = false;
407a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = false;
408a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = false;
409a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
410a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
411a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
412a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
413a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
41401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
41501a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
416a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
417a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
41801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
41901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
420a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
421a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
42201a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(false, 0, 0, false, false,
42301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    HALF_OVERLAY_COLOR, 0, false, false);
424a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
425a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
426a23c768a1a61495852074869b244064cf535b4c1Dake Gu
427a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
428a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest02() {
429a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = false;
430a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = false;
431a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = false;
432a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = false;
433a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = true;
434a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
435a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
436a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
437a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
438a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
43901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
44001a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
441a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
442a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
44301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
44401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
445a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
446a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
44701a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
44801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
449a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
450a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
451a23c768a1a61495852074869b244064cf535b4c1Dake Gu
452a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
453a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest03() {
454a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = false;
455a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = false;
456a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = false;
457a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = true;
458a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = false;
459a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
460a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
461a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
462a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
463a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
46401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
46501a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
466a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
467a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
46801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
46901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
470a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
471a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
47201a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(false, 0, 0, false, false,
47301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    HALF_OVERLAY_COLOR, 0, false, false);
474a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
475a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
476a23c768a1a61495852074869b244064cf535b4c1Dake Gu
477a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
478a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest04() {
479a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = false;
480a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = false;
481a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = false;
482a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = true;
483a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = true;
484a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
485a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
486a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
487a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
488a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
48901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
49001a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
491a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
492a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
49301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
49401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
495a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
496a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
49701a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
49801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
499a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
500a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
501a23c768a1a61495852074869b244064cf535b4c1Dake Gu
502a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
503a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest05() {
504a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = false;
505a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = false;
506a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = true;
507a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = false;
508a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = false;
509a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
510a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
511a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
512a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
513a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
51401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
51501a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
516a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
517a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
5180521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, true,
5190521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
520a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
521a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
52201a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(false, 0, 0, false, false,
52301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    HALF_OVERLAY_COLOR, 0, false, true);
524a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
525a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
526a23c768a1a61495852074869b244064cf535b4c1Dake Gu
527a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
528a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest06() {
529a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = false;
530a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = false;
531a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = true;
532a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = false;
533a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = true;
534a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
535a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
536a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
537a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
538a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
53901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
54001a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
541a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
542a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
5430521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, true,
5440521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
545a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
546a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
5470521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, true,
5480521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
549a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
550a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
551a23c768a1a61495852074869b244064cf535b4c1Dake Gu
552a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
553a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest07() {
554a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = false;
555a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = false;
556a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = true;
557a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = true;
558a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = false;
559a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
560a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
561a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
562a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
563a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
56401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
56501a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
566a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
567a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
5680521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, true,
5690521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
570a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
571a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
57201a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(false, 0, 0, false, false,
57301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    HALF_OVERLAY_COLOR, 0, false, true);
574a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
575a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
576a23c768a1a61495852074869b244064cf535b4c1Dake Gu
577a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
578a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest08() {
579a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = false;
580a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = false;
581a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = true;
582a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = true;
583a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = true;
584a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
585a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
586a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
587a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
588a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
58901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
59001a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
591a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
592a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
5930521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, true,
5940521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
595a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
596a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
5970521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, true,
5980521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
599a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
600a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
601a23c768a1a61495852074869b244064cf535b4c1Dake Gu
602a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
603a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest09() {
604a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = false;
605a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = true;
606a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = false;
607a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = false;
608a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = false;
609a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
610a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
611a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
612a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
613a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
61401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
61501a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
616a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
617a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
61801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
61901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
620a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
621a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
62201a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(false, 0, 0, false, false,
62301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    HALF_OVERLAY_COLOR, 0, false, false);
624a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
625a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
626a23c768a1a61495852074869b244064cf535b4c1Dake Gu
627a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
628a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest10() {
629a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = false;
630a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = true;
631a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = false;
632a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = false;
633a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = true;
634a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
635a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
636a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
637a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
638a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
63901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
64001a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
641a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
642a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
64301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
64401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
645a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
646a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
64701a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
64801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
649a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
650a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
651a23c768a1a61495852074869b244064cf535b4c1Dake Gu
652a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
653a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest11() {
654a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = false;
655a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = true;
656a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = false;
657a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = true;
658a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = false;
659a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
660a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
661a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
662a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
663a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
66401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
66501a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
666a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
667a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
66801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, true, false,
66901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
670a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
671a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
67201a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, true, false,
67301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
674a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
675a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
676a23c768a1a61495852074869b244064cf535b4c1Dake Gu
677a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
678a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest12() {
679a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = false;
680a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = true;
681a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = false;
682a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = true;
683a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = true;
684a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
685a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
686a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
687a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
688a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
68901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
69001a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
691a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
692a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
69301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, true, false,
69401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
695a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
696a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
69701a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, true, false,
69801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
699a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
700a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
701a23c768a1a61495852074869b244064cf535b4c1Dake Gu
702a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
703a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest13() {
704a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = false;
705a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = true;
706a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = true;
707a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = false;
708a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = false;
709a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
710a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
711a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
712a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
713a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
71401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
71501a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
716a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
717a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
7180521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, true,
7190521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
720a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
721a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
72201a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(false, 0, 0, false, false,
72301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    HALF_OVERLAY_COLOR, 0, false, true);
724a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
725a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
726a23c768a1a61495852074869b244064cf535b4c1Dake Gu
727a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
728a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest14() {
729a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = false;
730a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = true;
731a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = true;
732a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = false;
733a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = true;
734a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
735a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
736a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
737a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
738a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
73901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
74001a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
741a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
742a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
7430521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, true,
7440521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
745a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
746a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
7470521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, true,
7480521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
749a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
750a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
751a23c768a1a61495852074869b244064cf535b4c1Dake Gu
752a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
753a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest15() {
754a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = false;
755a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = true;
756a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = true;
757a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = true;
758a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = false;
759a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
760a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
761a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
762a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
763a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
76401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
76501a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
766a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
767a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
7680521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, true, true,
7690521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
770a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
771a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
7720521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, true, true,
7730521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
774a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
775a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
776a23c768a1a61495852074869b244064cf535b4c1Dake Gu
777a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
778a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest16() {
779a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = false;
780a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = true;
781a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = true;
782a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = true;
783a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = true;
784a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
785a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
786a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
787a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
788a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
78901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
79001a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
791a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
792a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
7930521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, true, true,
7940521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
795a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
796a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
7970521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, true, true,
7980521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
799a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
800a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
801a23c768a1a61495852074869b244064cf535b4c1Dake Gu
802a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
803a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest17() {
804a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = true;
805a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = false;
806a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = false;
807a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = false;
808a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = false;
809a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
810a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
811a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
812a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
813a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
81401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
81501a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
816a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
817a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
81801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
81901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
820a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
821a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
82201a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(false, 0, 0, false, false,
82301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    HALF_OVERLAY_COLOR, 0, false, false);
824a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
825a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
826a23c768a1a61495852074869b244064cf535b4c1Dake Gu
827a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
828a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest18() {
829a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = true;
830a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = false;
831a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = false;
832a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = false;
833a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = true;
834a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
835a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
836a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
837a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
838a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
83901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
84001a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
841a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
842a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
84301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
84401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
845a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
846a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
84701a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
84801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
849a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
850a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
851a23c768a1a61495852074869b244064cf535b4c1Dake Gu
852a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
853a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest19() {
854a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = true;
855a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = false;
856a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = false;
857a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = true;
858a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = false;
859a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
860a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
861a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
862a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
863a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
86401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
86501a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
866a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
867a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
86801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
86901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
870a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
871a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
87201a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(false, 0, 0, false, false,
87301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    HALF_OVERLAY_COLOR, 0, false, false);
874a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
875a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
876a23c768a1a61495852074869b244064cf535b4c1Dake Gu
877a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
878a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest20() {
879a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = true;
880a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = false;
881a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = false;
882a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = true;
883a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = true;
884a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
885a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
886a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
887a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
888a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
88901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
89001a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
891a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
892a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
89301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
89401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
895a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
896a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
89701a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
89801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
899a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
900a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
901a23c768a1a61495852074869b244064cf535b4c1Dake Gu
902a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
903a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest21() {
904a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = true;
905a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = false;
906a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = true;
907a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = false;
908a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = false;
909a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
910a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
911a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
912a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
913a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
91401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
91501a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
916a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
917a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
9180521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, true,
9190521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
920a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
921a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
92201a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(false, 0, 0, false, false,
92301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    HALF_OVERLAY_COLOR, 0, false, true);
924a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
925a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
926a23c768a1a61495852074869b244064cf535b4c1Dake Gu
927a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
928a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest22() {
929a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = true;
930a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = false;
931a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = true;
932a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = false;
933a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = true;
934a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
935a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
936a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
937a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
938a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
93901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
94001a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
941a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
942a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
9430521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, true,
9440521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
945a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
946a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
9470521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, true,
9480521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
949a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
950a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
951a23c768a1a61495852074869b244064cf535b4c1Dake Gu
952a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
953a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest23() {
954a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = true;
955a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = false;
956a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = true;
957a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = true;
958a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = false;
959a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
960a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
961a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
962a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
963a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
96401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
96501a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
966a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
967a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
9680521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, true,
9690521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
970a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
971a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
97201a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(false, 0, 0, false, false,
97301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    HALF_OVERLAY_COLOR, 0, false, true);
974a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
975a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
976a23c768a1a61495852074869b244064cf535b4c1Dake Gu
977a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
978a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest24() {
979a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = true;
980a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = false;
981a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = true;
982a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = true;
983a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = true;
984a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
985a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
986a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
987a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
988a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
98901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
99001a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
991a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
992a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
9930521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, true,
9940521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
995a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
996a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
9970521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, true,
9980521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
999a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
1000a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
1001a23c768a1a61495852074869b244064cf535b4c1Dake Gu
1002a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
1003a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest25() {
1004a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = true;
1005a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = true;
1006a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = false;
1007a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = false;
1008a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = false;
1009a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
1010a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
1011a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
1012a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
1013a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
101401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
101501a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
1016a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
1017a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
101801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
101901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
1020a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
1021a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
102201a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(false, 0, 0, false, false,
102301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    HALF_OVERLAY_COLOR, 0, false, false);
1024a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
1025a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
1026a23c768a1a61495852074869b244064cf535b4c1Dake Gu
1027a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
1028a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest26() {
1029a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = true;
1030a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = true;
1031a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = false;
1032a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = false;
1033a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = true;
1034a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
1035a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
1036a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
1037a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
1038a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
103901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
104001a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
1041a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
1042a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
104301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
104401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
1045a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
1046a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
104701a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
104801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
1049a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
1050a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
1051a23c768a1a61495852074869b244064cf535b4c1Dake Gu
1052a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
1053a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest27() {
1054a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = true;
1055a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = true;
1056a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = false;
1057a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = true;
1058a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = false;
1059a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
1060a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
1061a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
1062a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
1063a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
106401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
106501a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
1066a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
1067a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
106801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, sFocusedZ, false, false,
106901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
1070a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
1071a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
107201a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(false, 0, 0, false, false,
107301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    HALF_OVERLAY_COLOR, sFocusedZ, false, false);
1074a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
1075a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
1076a23c768a1a61495852074869b244064cf535b4c1Dake Gu
1077a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
1078a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest28() {
1079a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = true;
1080a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = true;
1081a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = false;
1082a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = true;
1083a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = true;
1084a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
1085a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
1086a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
1087a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
1088a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
108901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
109001a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
1091a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
1092a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
109301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, sFocusedZ, false, false,
109401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
1095a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
1096a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
109701a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, sFocusedZ, false, false,
109801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
1099a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
1100a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
1101a23c768a1a61495852074869b244064cf535b4c1Dake Gu
1102a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
1103a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest29() {
1104a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = true;
1105a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = true;
1106a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = true;
1107a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = false;
1108a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = false;
1109a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
1110a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
1111a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
1112a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
1113a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
111401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
111501a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
1116a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
1117a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
11180521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, true,
11190521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
1120a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
1121a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
112201a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(false, 0, 0, false, false,
112301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    HALF_OVERLAY_COLOR, 0, false, true);
1124a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
1125a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
1126a23c768a1a61495852074869b244064cf535b4c1Dake Gu
1127a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
1128a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest30() {
1129a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = true;
1130a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = true;
1131a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = true;
1132a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = false;
1133a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = true;
1134a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
1135a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
1136a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
1137a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
1138a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
113901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
114001a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
1141a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
1142a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
11430521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, true,
11440521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
1145a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
1146a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
11470521fad0d52093efa336d562928327a7260b70daDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, true,
11480521fad0d52093efa336d562928327a7260b70daDake Gu                    0, 0, false, false);
1149a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
1150a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
1151a23c768a1a61495852074869b244064cf535b4c1Dake Gu
1152a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
1153a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest31() {
1154a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = true;
1155a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = true;
1156a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = true;
1157a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = true;
1158a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = false;
1159a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
1160a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
1161a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
1162a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
1163a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
116401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
116501a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
1166a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
1167a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
116801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, sFocusedZ, false, true,
116901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
1170a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
1171a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
117201a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(false, 0, 0, false, false,
117301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    HALF_OVERLAY_COLOR, sFocusedZ, false, true);
1174a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
1175a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
1176a23c768a1a61495852074869b244064cf535b4c1Dake Gu
1177a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
1178a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTest32() {
1179a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingZorder = true;
1180a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean isUsingDefaultShadow = true;
1181a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean enableRoundedCorner = true;
1182a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean shadowEnabled = true;
1183a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final boolean keepChildForeground = true;
1184a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ShadowOverlayResult result = setupDefaultPresenterWithSingleElement(isUsingZorder,
1185a23c768a1a61495852074869b244064cf535b4c1Dake Gu                isUsingDefaultShadow, enableRoundedCorner, shadowEnabled, keepChildForeground);
1186a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
1187a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
1188a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // nothing supported
118901a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, 0, false, false,
119001a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
1191a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else if (version < 23) {
1192a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports static/dynamic shadow, supports rounded corner
119301a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, sFocusedZ, false, true,
119401a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
1195a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
1196a23c768a1a61495852074869b244064cf535b4c1Dake Gu            // supports foreground
119701a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu            result.expect(true, HALF_OVERLAY_COLOR, sFocusedZ, false, true,
119801a567100c9b8120d590e9e9f4cc6395ab0159feDake Gu                    0, 0, false, false);
1199a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
1200a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
1201a23c768a1a61495852074869b244064cf535b4c1Dake Gu
1202a23c768a1a61495852074869b244064cf535b4c1Dake Gu    @Test
1203a23c768a1a61495852074869b244064cf535b4c1Dake Gu    public void shadowOverlayContainerTestDefaultSettings() {
1204a23c768a1a61495852074869b244064cf535b4c1Dake Gu        ListRowPresenter presenter = new ListRowPresenter();
1205a23c768a1a61495852074869b244064cf535b4c1Dake Gu        final int version = Build.VERSION.SDK_INT;
1206a23c768a1a61495852074869b244064cf535b4c1Dake Gu        if (version < 21) {
1207a23c768a1a61495852074869b244064cf535b4c1Dake Gu            assertFalse(presenter.isUsingZOrder(mContext));
1208a23c768a1a61495852074869b244064cf535b4c1Dake Gu            assertFalse(presenter.isUsingDefaultShadow());
1209a23c768a1a61495852074869b244064cf535b4c1Dake Gu        } else {
1210a23c768a1a61495852074869b244064cf535b4c1Dake Gu            assertTrue(presenter.isUsingZOrder(mContext));
1211a23c768a1a61495852074869b244064cf535b4c1Dake Gu            assertTrue(presenter.isUsingDefaultShadow());
1212a23c768a1a61495852074869b244064cf535b4c1Dake Gu        }
1213a23c768a1a61495852074869b244064cf535b4c1Dake Gu        assertTrue(presenter.areChildRoundedCornersEnabled());
1214a23c768a1a61495852074869b244064cf535b4c1Dake Gu        assertTrue(presenter.getShadowEnabled());
1215a23c768a1a61495852074869b244064cf535b4c1Dake Gu        assertTrue(presenter.isKeepChildForeground());
1216a23c768a1a61495852074869b244064cf535b4c1Dake Gu    }
1217a23c768a1a61495852074869b244064cf535b4c1Dake Gu}
1218