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