16f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi/* 26f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi * Copyright (C) 2017 The Android Open Source Project 36f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi * 46f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi * Licensed under the Apache License, Version 2.0 (the "License"); 56f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi * you may not use this file except in compliance with the License. 66f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi * You may obtain a copy of the License at 76f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi * 86f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi * http://www.apache.org/licenses/LICENSE-2.0 96f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi * 106f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi * Unless required by applicable law or agreed to in writing, software 116f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi * distributed under the License is distributed on an "AS IS" BASIS, 126f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi * See the License for the specific language governing permissions and 146f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi * limitations under the License 156f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi */ 166f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 176f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggipackage com.android.systemui.recents.model; 186f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 196f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport static org.junit.Assert.assertFalse; 206f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport static org.junit.Assert.assertTrue; 216f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport static org.mockito.Mockito.anyBoolean; 226f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport static org.mockito.Mockito.anyInt; 236f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport static org.mockito.Mockito.never; 246f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport static org.mockito.Mockito.verify; 256f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport static org.mockito.Mockito.when; 266f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 276f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport android.os.Looper; 286f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport android.support.test.filters.SmallTest; 296f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport android.support.test.runner.AndroidJUnit4; 306f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 316f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport com.android.systemui.SysuiTestCase; 326f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport com.android.systemui.recents.misc.SystemServicesProxy; 336f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport com.android.systemui.recents.model.Task.TaskKey; 346f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 356f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport org.junit.Before; 366f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport org.junit.Test; 376f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport org.junit.runner.RunWith; 386f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport org.mockito.Mock; 396f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport org.mockito.MockitoAnnotations; 406f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 416f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi/** 426f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi * runtest systemui -c com.android.systemui.recents.model.HighResThumbnailLoaderTest 436f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi */ 446f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi@SmallTest 456f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi@RunWith(AndroidJUnit4.class) 466f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggipublic class HighResThumbnailLoaderTest extends SysuiTestCase { 476f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 486f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi private HighResThumbnailLoader mLoader; 496f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 506f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi @Mock 516f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi private SystemServicesProxy mMockSystemServicesProxy; 526f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi @Mock 536f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi private Task mTask; 546f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 556f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi private ThumbnailData mThumbnailData = new ThumbnailData(); 566f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 576f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi @Before 586f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi public void setUp() throws Exception { 596f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi MockitoAnnotations.initMocks(this); 606f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader = new HighResThumbnailLoader(mMockSystemServicesProxy, Looper.getMainLooper()); 616f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mTask.key = new TaskKey(0, 0, null, 0, 0, 0); 626f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi when(mMockSystemServicesProxy.getTaskThumbnail(anyInt(), anyBoolean())) 636f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi .thenReturn(mThumbnailData); 646f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.setVisible(true); 6544f4bcb80df76608d4db048aacc27760472d6a2dJorim Jaggi mLoader.setTaskLoadQueueIdle(true); 666f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi } 676f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 686f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi @Test 696f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi public void testLoading() throws Exception { 706f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.setVisible(true); 716f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi assertTrue(mLoader.isLoading()); 726f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.setVisible(false); 736f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi assertFalse(mLoader.isLoading()); 746f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.setVisible(true); 756f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.setFlingingFast(true); 766f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi assertFalse(mLoader.isLoading()); 776f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.setFlingingFast(false); 786f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi assertTrue(mLoader.isLoading()); 7944f4bcb80df76608d4db048aacc27760472d6a2dJorim Jaggi mLoader.setFlingingFast(false); 8044f4bcb80df76608d4db048aacc27760472d6a2dJorim Jaggi mLoader.setTaskLoadQueueIdle(false); 8144f4bcb80df76608d4db048aacc27760472d6a2dJorim Jaggi assertFalse(mLoader.isLoading()); 8244f4bcb80df76608d4db048aacc27760472d6a2dJorim Jaggi mLoader.setTaskLoadQueueIdle(true); 8344f4bcb80df76608d4db048aacc27760472d6a2dJorim Jaggi assertTrue(mLoader.isLoading()); 846f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi } 856f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 866f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi @Test 876f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi public void testLoad() throws Exception { 886f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.onTaskVisible(mTask); 896f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.waitForLoaderIdle(); 906f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi waitForIdleSync(); 916f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi verify(mTask).notifyTaskDataLoaded(mThumbnailData, null); 926f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi } 936f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 946f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi @Test 956f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi public void testFlinging_notLoaded() throws Exception { 966f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.setFlingingFast(true); 976f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.onTaskVisible(mTask); 986f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.waitForLoaderIdle(); 996f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi waitForIdleSync(); 1006f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi verify(mTask, never()).notifyTaskDataLoaded(mThumbnailData, null); 1016f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi } 1026f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 1036f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi /** 1046f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi * Tests whether task is loaded after stopping to fling 1056f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi */ 1066f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi @Test 1076f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi public void testAfterFlinging() throws Exception { 1086f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.setFlingingFast(true); 1096f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.onTaskVisible(mTask); 1106f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.setFlingingFast(false); 1116f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.waitForLoaderIdle(); 1126f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi waitForIdleSync(); 1136f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi verify(mTask).notifyTaskDataLoaded(mThumbnailData, null); 1146f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi } 1156f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 1166f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi @Test 1176f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi public void testAlreadyLoaded() throws Exception { 1186f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mTask.thumbnail = new ThumbnailData(); 1196f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mTask.thumbnail.reducedResolution = false; 1206f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.onTaskVisible(mTask); 1216f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.waitForLoaderIdle(); 1226f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi waitForIdleSync(); 1236f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi verify(mTask, never()).notifyTaskDataLoaded(mThumbnailData, null); 1246f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi } 1256f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi} 126