11853eab01f421268e2a1de76b660b5577260ce5dDake Gu/*
21853eab01f421268e2a1de76b660b5577260ce5dDake Gu * Copyright (C) 2017 The Android Open Source Project
31853eab01f421268e2a1de76b660b5577260ce5dDake Gu *
41853eab01f421268e2a1de76b660b5577260ce5dDake Gu * Licensed under the Apache License, Version 2.0 (the "License");
51853eab01f421268e2a1de76b660b5577260ce5dDake Gu * you may not use this file except in compliance with the License.
61853eab01f421268e2a1de76b660b5577260ce5dDake Gu * You may obtain a copy of the License at
71853eab01f421268e2a1de76b660b5577260ce5dDake Gu *
81853eab01f421268e2a1de76b660b5577260ce5dDake Gu *      http://www.apache.org/licenses/LICENSE-2.0
91853eab01f421268e2a1de76b660b5577260ce5dDake Gu *
101853eab01f421268e2a1de76b660b5577260ce5dDake Gu * Unless required by applicable law or agreed to in writing, software
111853eab01f421268e2a1de76b660b5577260ce5dDake Gu * distributed under the License is distributed on an "AS IS" BASIS,
121853eab01f421268e2a1de76b660b5577260ce5dDake Gu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131853eab01f421268e2a1de76b660b5577260ce5dDake Gu * See the License for the specific language governing permissions and
141853eab01f421268e2a1de76b660b5577260ce5dDake Gu * limitations under the License.
151853eab01f421268e2a1de76b660b5577260ce5dDake Gu */
161853eab01f421268e2a1de76b660b5577260ce5dDake Gupackage android.support.v17.leanback.app;
171853eab01f421268e2a1de76b660b5577260ce5dDake Gu
181853eab01f421268e2a1de76b660b5577260ce5dDake Guimport static org.junit.Assert.assertSame;
191853eab01f421268e2a1de76b660b5577260ce5dDake Gu
201853eab01f421268e2a1de76b660b5577260ce5dDake Guimport android.content.Context;
211853eab01f421268e2a1de76b660b5577260ce5dDake Guimport android.support.test.InstrumentationRegistry;
223d459a1534a5885aa687ac01ebb93d0a2806ac1bAurimas Liutikasimport android.support.test.filters.LargeTest;
231853eab01f421268e2a1de76b660b5577260ce5dDake Guimport android.support.v17.leanback.testutils.PollingCheck;
241853eab01f421268e2a1de76b660b5577260ce5dDake Guimport android.view.View;
251853eab01f421268e2a1de76b660b5577260ce5dDake Guimport android.view.ViewGroup;
261853eab01f421268e2a1de76b660b5577260ce5dDake Guimport android.widget.FrameLayout;
271853eab01f421268e2a1de76b660b5577260ce5dDake Gu
281853eab01f421268e2a1de76b660b5577260ce5dDake Guimport org.junit.Before;
291853eab01f421268e2a1de76b660b5577260ce5dDake Guimport org.junit.Test;
301853eab01f421268e2a1de76b660b5577260ce5dDake Gu
313d459a1534a5885aa687ac01ebb93d0a2806ac1bAurimas Liutikas@LargeTest
321853eab01f421268e2a1de76b660b5577260ce5dDake Gupublic class ProgressBarManagerTest {
331853eab01f421268e2a1de76b660b5577260ce5dDake Gu
341853eab01f421268e2a1de76b660b5577260ce5dDake Gu    Context mContext;
351853eab01f421268e2a1de76b660b5577260ce5dDake Gu    ProgressBarManager mProgressBarManager;
361853eab01f421268e2a1de76b660b5577260ce5dDake Gu    long mWaitShownTimeOutMs;
371853eab01f421268e2a1de76b660b5577260ce5dDake Gu    long mWaitHideTimeOutMs;
381853eab01f421268e2a1de76b660b5577260ce5dDake Gu
391853eab01f421268e2a1de76b660b5577260ce5dDake Gu    @Before
401853eab01f421268e2a1de76b660b5577260ce5dDake Gu    public void setUp() {
411853eab01f421268e2a1de76b660b5577260ce5dDake Gu        mContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
421853eab01f421268e2a1de76b660b5577260ce5dDake Gu        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
431853eab01f421268e2a1de76b660b5577260ce5dDake Gu            @Override
441853eab01f421268e2a1de76b660b5577260ce5dDake Gu            public void run() {
451853eab01f421268e2a1de76b660b5577260ce5dDake Gu                mProgressBarManager = new ProgressBarManager();
461853eab01f421268e2a1de76b660b5577260ce5dDake Gu            }
471853eab01f421268e2a1de76b660b5577260ce5dDake Gu        });
481853eab01f421268e2a1de76b660b5577260ce5dDake Gu        mWaitShownTimeOutMs = Math.max(2000, mProgressBarManager.getInitialDelay() * 3);
491853eab01f421268e2a1de76b660b5577260ce5dDake Gu        mWaitHideTimeOutMs = 2000;
501853eab01f421268e2a1de76b660b5577260ce5dDake Gu    }
511853eab01f421268e2a1de76b660b5577260ce5dDake Gu
521853eab01f421268e2a1de76b660b5577260ce5dDake Gu    @Test
531853eab01f421268e2a1de76b660b5577260ce5dDake Gu    public void defaultProgressBarView() {
541853eab01f421268e2a1de76b660b5577260ce5dDake Gu        final ViewGroup rootView = new FrameLayout(mContext);
551853eab01f421268e2a1de76b660b5577260ce5dDake Gu        mProgressBarManager.setRootView(rootView);
561853eab01f421268e2a1de76b660b5577260ce5dDake Gu        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
571853eab01f421268e2a1de76b660b5577260ce5dDake Gu            @Override
581853eab01f421268e2a1de76b660b5577260ce5dDake Gu            public void run() {
591853eab01f421268e2a1de76b660b5577260ce5dDake Gu                mProgressBarManager.show();
601853eab01f421268e2a1de76b660b5577260ce5dDake Gu            }
611853eab01f421268e2a1de76b660b5577260ce5dDake Gu        });
621853eab01f421268e2a1de76b660b5577260ce5dDake Gu        PollingCheck.waitFor(mWaitShownTimeOutMs,
631853eab01f421268e2a1de76b660b5577260ce5dDake Gu                new PollingCheck.PollingCheckCondition() {
641853eab01f421268e2a1de76b660b5577260ce5dDake Gu                    @Override
651853eab01f421268e2a1de76b660b5577260ce5dDake Gu                    public boolean canProceed() {
661853eab01f421268e2a1de76b660b5577260ce5dDake Gu                        if (rootView.getChildCount() == 0) return false;
671853eab01f421268e2a1de76b660b5577260ce5dDake Gu                        return  rootView.getChildAt(0).getVisibility() == View.VISIBLE;
681853eab01f421268e2a1de76b660b5577260ce5dDake Gu                    }
691853eab01f421268e2a1de76b660b5577260ce5dDake Gu                });
701853eab01f421268e2a1de76b660b5577260ce5dDake Gu        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
711853eab01f421268e2a1de76b660b5577260ce5dDake Gu            @Override
721853eab01f421268e2a1de76b660b5577260ce5dDake Gu            public void run() {
731853eab01f421268e2a1de76b660b5577260ce5dDake Gu                mProgressBarManager.hide();
741853eab01f421268e2a1de76b660b5577260ce5dDake Gu            }
751853eab01f421268e2a1de76b660b5577260ce5dDake Gu        });
761853eab01f421268e2a1de76b660b5577260ce5dDake Gu        PollingCheck.waitFor(mWaitHideTimeOutMs,
771853eab01f421268e2a1de76b660b5577260ce5dDake Gu                new PollingCheck.PollingCheckCondition() {
781853eab01f421268e2a1de76b660b5577260ce5dDake Gu                    @Override
791853eab01f421268e2a1de76b660b5577260ce5dDake Gu                    public boolean canProceed() {
801853eab01f421268e2a1de76b660b5577260ce5dDake Gu                        return rootView.getChildCount() == 0;
811853eab01f421268e2a1de76b660b5577260ce5dDake Gu                    }
821853eab01f421268e2a1de76b660b5577260ce5dDake Gu                });
831853eab01f421268e2a1de76b660b5577260ce5dDake Gu        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
841853eab01f421268e2a1de76b660b5577260ce5dDake Gu            @Override
851853eab01f421268e2a1de76b660b5577260ce5dDake Gu            public void run() {
861853eab01f421268e2a1de76b660b5577260ce5dDake Gu                mProgressBarManager.show();
871853eab01f421268e2a1de76b660b5577260ce5dDake Gu            }
881853eab01f421268e2a1de76b660b5577260ce5dDake Gu        });
891853eab01f421268e2a1de76b660b5577260ce5dDake Gu        PollingCheck.waitFor(mWaitShownTimeOutMs,
901853eab01f421268e2a1de76b660b5577260ce5dDake Gu                new PollingCheck.PollingCheckCondition() {
911853eab01f421268e2a1de76b660b5577260ce5dDake Gu                    @Override
921853eab01f421268e2a1de76b660b5577260ce5dDake Gu                    public boolean canProceed() {
931853eab01f421268e2a1de76b660b5577260ce5dDake Gu                        if (rootView.getChildCount() == 0) return false;
941853eab01f421268e2a1de76b660b5577260ce5dDake Gu                        return  rootView.getChildAt(0).getVisibility() == View.VISIBLE;
951853eab01f421268e2a1de76b660b5577260ce5dDake Gu                    }
961853eab01f421268e2a1de76b660b5577260ce5dDake Gu                });
971853eab01f421268e2a1de76b660b5577260ce5dDake Gu    }
981853eab01f421268e2a1de76b660b5577260ce5dDake Gu
991853eab01f421268e2a1de76b660b5577260ce5dDake Gu    @Test
1001853eab01f421268e2a1de76b660b5577260ce5dDake Gu    public void customProgressBarView() {
1011853eab01f421268e2a1de76b660b5577260ce5dDake Gu        final ViewGroup rootView = new FrameLayout(mContext);
1021853eab01f421268e2a1de76b660b5577260ce5dDake Gu        View customProgressBar = new View(mContext);
1031853eab01f421268e2a1de76b660b5577260ce5dDake Gu        rootView.addView(customProgressBar, 100, 100);
1041853eab01f421268e2a1de76b660b5577260ce5dDake Gu        mProgressBarManager.setProgressBarView(customProgressBar);
1051853eab01f421268e2a1de76b660b5577260ce5dDake Gu        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
1061853eab01f421268e2a1de76b660b5577260ce5dDake Gu            @Override
1071853eab01f421268e2a1de76b660b5577260ce5dDake Gu            public void run() {
1081853eab01f421268e2a1de76b660b5577260ce5dDake Gu                mProgressBarManager.show();
1091853eab01f421268e2a1de76b660b5577260ce5dDake Gu            }
1101853eab01f421268e2a1de76b660b5577260ce5dDake Gu        });
1111853eab01f421268e2a1de76b660b5577260ce5dDake Gu        PollingCheck.waitFor(mWaitShownTimeOutMs,
1121853eab01f421268e2a1de76b660b5577260ce5dDake Gu                new PollingCheck.PollingCheckCondition() {
1131853eab01f421268e2a1de76b660b5577260ce5dDake Gu                    @Override
1141853eab01f421268e2a1de76b660b5577260ce5dDake Gu                    public boolean canProceed() {
1151853eab01f421268e2a1de76b660b5577260ce5dDake Gu                        if (rootView.getChildCount() == 0) return false;
1161853eab01f421268e2a1de76b660b5577260ce5dDake Gu                        return  rootView.getChildAt(0).getVisibility() == View.VISIBLE;
1171853eab01f421268e2a1de76b660b5577260ce5dDake Gu                    }
1181853eab01f421268e2a1de76b660b5577260ce5dDake Gu                });
1191853eab01f421268e2a1de76b660b5577260ce5dDake Gu        assertSame(customProgressBar, rootView.getChildAt(0));
1201853eab01f421268e2a1de76b660b5577260ce5dDake Gu        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
1211853eab01f421268e2a1de76b660b5577260ce5dDake Gu            @Override
1221853eab01f421268e2a1de76b660b5577260ce5dDake Gu            public void run() {
1231853eab01f421268e2a1de76b660b5577260ce5dDake Gu                mProgressBarManager.hide();
1241853eab01f421268e2a1de76b660b5577260ce5dDake Gu            }
1251853eab01f421268e2a1de76b660b5577260ce5dDake Gu        });
1261853eab01f421268e2a1de76b660b5577260ce5dDake Gu        PollingCheck.waitFor(mWaitHideTimeOutMs,
1271853eab01f421268e2a1de76b660b5577260ce5dDake Gu                new PollingCheck.PollingCheckCondition() {
1281853eab01f421268e2a1de76b660b5577260ce5dDake Gu                    @Override
1291853eab01f421268e2a1de76b660b5577260ce5dDake Gu                    public boolean canProceed() {
1301853eab01f421268e2a1de76b660b5577260ce5dDake Gu                        return  rootView.getChildAt(0).getVisibility() != View.VISIBLE;
1311853eab01f421268e2a1de76b660b5577260ce5dDake Gu                    }
1321853eab01f421268e2a1de76b660b5577260ce5dDake Gu                });
1331853eab01f421268e2a1de76b660b5577260ce5dDake Gu        assertSame(customProgressBar, rootView.getChildAt(0));
1341853eab01f421268e2a1de76b660b5577260ce5dDake Gu        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
1351853eab01f421268e2a1de76b660b5577260ce5dDake Gu            @Override
1361853eab01f421268e2a1de76b660b5577260ce5dDake Gu            public void run() {
1371853eab01f421268e2a1de76b660b5577260ce5dDake Gu                mProgressBarManager.show();
1381853eab01f421268e2a1de76b660b5577260ce5dDake Gu            }
1391853eab01f421268e2a1de76b660b5577260ce5dDake Gu        });
1401853eab01f421268e2a1de76b660b5577260ce5dDake Gu        PollingCheck.waitFor(mWaitShownTimeOutMs,
1411853eab01f421268e2a1de76b660b5577260ce5dDake Gu                new PollingCheck.PollingCheckCondition() {
1421853eab01f421268e2a1de76b660b5577260ce5dDake Gu                    @Override
1431853eab01f421268e2a1de76b660b5577260ce5dDake Gu                    public boolean canProceed() {
1441853eab01f421268e2a1de76b660b5577260ce5dDake Gu                        if (rootView.getChildCount() == 0) return false;
1451853eab01f421268e2a1de76b660b5577260ce5dDake Gu                        return  rootView.getChildAt(0).getVisibility() == View.VISIBLE;
1461853eab01f421268e2a1de76b660b5577260ce5dDake Gu                    }
1471853eab01f421268e2a1de76b660b5577260ce5dDake Gu                });
1481853eab01f421268e2a1de76b660b5577260ce5dDake Gu    }
1491853eab01f421268e2a1de76b660b5577260ce5dDake Gu}
150