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