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 176519c1b0fe85c5f25115539e936e4333e8537098Winson Chungpackage com.android.systemui.shared.recents.model; 186f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 1989be5761bcacfb27bbc63d0e94a86b666f52f294Wale Ogunwaleimport static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; 206519c1b0fe85c5f25115539e936e4333e8537098Winson Chung 216f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport static org.junit.Assert.assertFalse; 226f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport static org.junit.Assert.assertTrue; 236f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport static org.mockito.Mockito.anyBoolean; 246f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport static org.mockito.Mockito.anyInt; 256f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport static org.mockito.Mockito.never; 266f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport static org.mockito.Mockito.verify; 276f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport static org.mockito.Mockito.when; 286f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 2990ce3f46482dd4cb20733287188901241e160b80Winson Chungimport android.content.ComponentName; 306f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport android.os.Looper; 316f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport android.support.test.filters.SmallTest; 326f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport android.support.test.runner.AndroidJUnit4; 336f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 346519c1b0fe85c5f25115539e936e4333e8537098Winson Chungimport com.android.systemui.shared.SysuiSharedLibTestCase; 356519c1b0fe85c5f25115539e936e4333e8537098Winson Chungimport com.android.systemui.shared.recents.model.Task.TaskKey; 366519c1b0fe85c5f25115539e936e4333e8537098Winson Chungimport com.android.systemui.shared.system.ActivityManagerWrapper; 376f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 386f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport org.junit.Before; 396f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport org.junit.Test; 406f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport org.junit.runner.RunWith; 416f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport org.mockito.Mock; 426f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggiimport org.mockito.MockitoAnnotations; 436f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 446f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi/** 456519c1b0fe85c5f25115539e936e4333e8537098Winson Chung * runtest --path frameworks/base/packages/SystemUI/shared/tests/src/com/android/systemui/shared/recents/model/HighResThumbnailLoaderTest.java 466f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi */ 476f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi@SmallTest 486f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi@RunWith(AndroidJUnit4.class) 496519c1b0fe85c5f25115539e936e4333e8537098Winson Chungpublic class HighResThumbnailLoaderTest extends SysuiSharedLibTestCase { 506f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 516f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi private HighResThumbnailLoader mLoader; 526f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 536f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi @Mock 546519c1b0fe85c5f25115539e936e4333e8537098Winson Chung private ActivityManagerWrapper mMockActivityManagerWrapper; 556f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi @Mock 566f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi private Task mTask; 576f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 586f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi private ThumbnailData mThumbnailData = new ThumbnailData(); 596f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 606f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi @Before 616f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi public void setUp() throws Exception { 626f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi MockitoAnnotations.initMocks(this); 636519c1b0fe85c5f25115539e936e4333e8537098Winson Chung mLoader = new HighResThumbnailLoader(mMockActivityManagerWrapper, Looper.getMainLooper(), 646519c1b0fe85c5f25115539e936e4333e8537098Winson Chung false /* reducedResolution */); 6590ce3f46482dd4cb20733287188901241e160b80Winson Chung mTask.key = new TaskKey(0, WINDOWING_MODE_UNDEFINED, null, null, 0, 0); 666519c1b0fe85c5f25115539e936e4333e8537098Winson Chung when(mMockActivityManagerWrapper.getTaskThumbnail(anyInt(), anyBoolean())) 676f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi .thenReturn(mThumbnailData); 686f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.setVisible(true); 6944f4bcb80df76608d4db048aacc27760472d6a2dJorim Jaggi mLoader.setTaskLoadQueueIdle(true); 706f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi } 716f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 726f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi @Test 736f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi public void testLoading() throws Exception { 746f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.setVisible(true); 756f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi assertTrue(mLoader.isLoading()); 766f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.setVisible(false); 776f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi assertFalse(mLoader.isLoading()); 786f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.setVisible(true); 796f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.setFlingingFast(true); 806f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi assertFalse(mLoader.isLoading()); 816f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.setFlingingFast(false); 826f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi assertTrue(mLoader.isLoading()); 8344f4bcb80df76608d4db048aacc27760472d6a2dJorim Jaggi mLoader.setFlingingFast(false); 8444f4bcb80df76608d4db048aacc27760472d6a2dJorim Jaggi mLoader.setTaskLoadQueueIdle(false); 8544f4bcb80df76608d4db048aacc27760472d6a2dJorim Jaggi assertFalse(mLoader.isLoading()); 8644f4bcb80df76608d4db048aacc27760472d6a2dJorim Jaggi mLoader.setTaskLoadQueueIdle(true); 8744f4bcb80df76608d4db048aacc27760472d6a2dJorim Jaggi assertTrue(mLoader.isLoading()); 886f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi } 896f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 906f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi @Test 916f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi public void testLoad() throws Exception { 926f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.onTaskVisible(mTask); 936f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.waitForLoaderIdle(); 946f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi waitForIdleSync(); 956f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi verify(mTask).notifyTaskDataLoaded(mThumbnailData, null); 966f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi } 976f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 986f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi @Test 996f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi public void testFlinging_notLoaded() throws Exception { 1006f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.setFlingingFast(true); 1016f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.onTaskVisible(mTask); 1026f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.waitForLoaderIdle(); 1036f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi waitForIdleSync(); 1046f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi verify(mTask, never()).notifyTaskDataLoaded(mThumbnailData, null); 1056f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi } 1066f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 1076f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi /** 1086f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi * Tests whether task is loaded after stopping to fling 1096f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi */ 1106f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi @Test 1116f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi public void testAfterFlinging() throws Exception { 1126f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.setFlingingFast(true); 1136f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.onTaskVisible(mTask); 1146f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.setFlingingFast(false); 1156f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.waitForLoaderIdle(); 1166f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi waitForIdleSync(); 1176f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi verify(mTask).notifyTaskDataLoaded(mThumbnailData, null); 1186f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi } 1196f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi 1206f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi @Test 1216f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi public void testAlreadyLoaded() throws Exception { 1226f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mTask.thumbnail = new ThumbnailData(); 1236f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mTask.thumbnail.reducedResolution = false; 1246f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.onTaskVisible(mTask); 1256f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi mLoader.waitForLoaderIdle(); 1266f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi waitForIdleSync(); 1276f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi verify(mTask, never()).notifyTaskDataLoaded(mThumbnailData, null); 1286f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi } 1296f9dbcb742ee930151444118dd61c2239efce09dJorim Jaggi} 130