1 package com.android.launcher3.model;
2 
3 import static org.junit.Assert.assertEquals;
4 
5 import androidx.test.ext.junit.runners.AndroidJUnit4;
6 import androidx.test.filters.SmallTest;
7 
8 import com.android.launcher3.model.data.ItemInfo;
9 import com.android.launcher3.model.data.LauncherAppWidgetInfo;
10 import com.android.launcher3.model.data.WorkspaceItemInfo;
11 import com.android.launcher3.pm.PackageInstallInfo;
12 import com.android.launcher3.util.LauncherModelHelper;
13 
14 import org.junit.After;
15 import org.junit.Before;
16 import org.junit.Test;
17 import org.junit.runner.RunWith;
18 
19 import java.util.Arrays;
20 import java.util.HashSet;
21 
22 /**
23  * Tests for {@link PackageInstallStateChangedTask}
24  */
25 @SmallTest
26 @RunWith(AndroidJUnit4.class)
27 public class PackageInstallStateChangedTaskTest {
28 
29     private LauncherModelHelper mModelHelper;
30 
31     @Before
setup()32     public void setup() throws Exception {
33         mModelHelper = new LauncherModelHelper();
34         mModelHelper.initializeData("package_install_state_change_task_data");
35     }
36 
37     @After
tearDown()38     public void tearDown() {
39         mModelHelper.destroy();
40     }
41 
newTask(String pkg, int progress)42     private PackageInstallStateChangedTask newTask(String pkg, int progress) {
43         int state = PackageInstallInfo.STATUS_INSTALLING;
44         PackageInstallInfo installInfo = new PackageInstallInfo(pkg, state, progress,
45                 android.os.Process.myUserHandle());
46         return new PackageInstallStateChangedTask(installInfo);
47     }
48 
49     @Test
testSessionUpdate_ignore_installed()50     public void testSessionUpdate_ignore_installed() throws Exception {
51         mModelHelper.executeTaskForTest(newTask("app1", 30));
52 
53         // No shortcuts were updated
54         verifyProgressUpdate(0);
55     }
56 
57     @Test
testSessionUpdate_shortcuts_updated()58     public void testSessionUpdate_shortcuts_updated() throws Exception {
59         mModelHelper.executeTaskForTest(newTask("app3", 30));
60 
61         verifyProgressUpdate(30, 5, 6, 7);
62     }
63 
64     @Test
testSessionUpdate_widgets_updated()65     public void testSessionUpdate_widgets_updated() throws Exception {
66         mModelHelper.executeTaskForTest(newTask("app4", 30));
67 
68         verifyProgressUpdate(30, 8, 9);
69     }
70 
verifyProgressUpdate(int progress, Integer... idsUpdated)71     private void verifyProgressUpdate(int progress, Integer... idsUpdated) {
72         HashSet<Integer> updates = new HashSet<>(Arrays.asList(idsUpdated));
73         for (ItemInfo info : mModelHelper.getBgDataModel().itemsIdMap) {
74             if (info instanceof WorkspaceItemInfo) {
75                 assertEquals(updates.contains(info.id) ? progress: 100,
76                         ((WorkspaceItemInfo) info).getProgressLevel());
77             } else {
78                 assertEquals(updates.contains(info.id) ? progress: -1,
79                         ((LauncherAppWidgetInfo) info).installProgress);
80             }
81         }
82     }
83 }
84