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