6a207fc4f9
This makes the behavior same as instrumentation test Bug: 370080120 Test: Presubmit Flag: EXEMPT test fix Change-Id: Id4183c91f3951748b657b583fde8860abe55d3a8
138 lines
5.6 KiB
Java
138 lines
5.6 KiB
Java
/*
|
|
* Copyright (C) 2024 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
package com.android.launcher3.model;
|
|
|
|
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
|
|
import static com.android.launcher3.util.LauncherModelHelper.TEST_ACTIVITY;
|
|
import static com.android.launcher3.util.LauncherModelHelper.TEST_ACTIVITY2;
|
|
import static com.android.launcher3.util.LauncherModelHelper.TEST_ACTIVITY3;
|
|
import static com.android.launcher3.util.LauncherModelHelper.TEST_PACKAGE;
|
|
import static com.android.launcher3.util.TestUtil.runOnExecutorSync;
|
|
|
|
import static org.junit.Assert.assertEquals;
|
|
|
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
|
import androidx.test.filters.SmallTest;
|
|
|
|
import com.android.launcher3.model.data.ItemInfo;
|
|
import com.android.launcher3.model.data.LauncherAppWidgetInfo;
|
|
import com.android.launcher3.model.data.WorkspaceItemInfo;
|
|
import com.android.launcher3.pm.PackageInstallInfo;
|
|
import com.android.launcher3.util.IntSet;
|
|
import com.android.launcher3.util.LauncherLayoutBuilder;
|
|
import com.android.launcher3.util.LauncherModelHelper;
|
|
|
|
import org.junit.After;
|
|
import org.junit.Before;
|
|
import org.junit.Test;
|
|
import org.junit.runner.RunWith;
|
|
|
|
/**
|
|
* Tests for {@link PackageInstallStateChangedTask}
|
|
*/
|
|
@SmallTest
|
|
@RunWith(AndroidJUnit4.class)
|
|
public class PackageInstallStateChangedTaskTest {
|
|
|
|
private static final String PENDING_APP_1 = TEST_PACKAGE + ".pending1";
|
|
private static final String PENDING_APP_2 = TEST_PACKAGE + ".pending2";
|
|
|
|
private LauncherModelHelper mModelHelper;
|
|
private IntSet mDownloadingApps;
|
|
|
|
@Before
|
|
public void setup() throws Exception {
|
|
mModelHelper = new LauncherModelHelper();
|
|
mModelHelper.createInstallerSession(PENDING_APP_1);
|
|
mModelHelper.createInstallerSession(PENDING_APP_2);
|
|
|
|
LauncherLayoutBuilder builder = new LauncherLayoutBuilder()
|
|
.atWorkspace(0, 0, 1).putApp(TEST_PACKAGE, TEST_ACTIVITY) // 1
|
|
.atWorkspace(0, 0, 2).putApp(TEST_PACKAGE, TEST_ACTIVITY2) // 2
|
|
.atWorkspace(0, 0, 3).putApp(TEST_PACKAGE, TEST_ACTIVITY3) // 3
|
|
|
|
.atWorkspace(0, 0, 4).putApp(PENDING_APP_1, TEST_ACTIVITY) // 4
|
|
.atWorkspace(0, 0, 5).putApp(PENDING_APP_1, TEST_ACTIVITY2) // 5
|
|
.atWorkspace(0, 0, 6).putApp(PENDING_APP_1, TEST_ACTIVITY3) // 6
|
|
.atWorkspace(0, 0, 7).putWidget(PENDING_APP_1, "pending.widget", 1, 1) // 7
|
|
|
|
.atWorkspace(0, 0, 8).putApp(PENDING_APP_2, TEST_ACTIVITY) // 8
|
|
.atWorkspace(0, 0, 9).putApp(PENDING_APP_2, TEST_ACTIVITY2) // 9
|
|
.atWorkspace(0, 0, 10).putApp(PENDING_APP_2, TEST_ACTIVITY3); // 10
|
|
|
|
mDownloadingApps = IntSet.wrap(4, 5, 6, 7, 8, 9, 10);
|
|
mModelHelper.setupDefaultLayoutProvider(builder);
|
|
mModelHelper.loadModelSync();
|
|
assertEquals(10, mModelHelper.getBgDataModel().itemsIdMap.size());
|
|
}
|
|
|
|
@After
|
|
public void tearDown() {
|
|
mModelHelper.destroy();
|
|
}
|
|
|
|
private PackageInstallStateChangedTask newTask(String pkg, int progress) {
|
|
int state = PackageInstallInfo.STATUS_INSTALLING;
|
|
PackageInstallInfo installInfo = new PackageInstallInfo(pkg, state, progress,
|
|
android.os.Process.myUserHandle());
|
|
return new PackageInstallStateChangedTask(installInfo);
|
|
}
|
|
|
|
@Test
|
|
public void testSessionUpdate_ignore_installed() {
|
|
// Run on model executor so that no other task runs in the middle.
|
|
runOnExecutorSync(MODEL_EXECUTOR, () -> {
|
|
mModelHelper.getModel().enqueueModelUpdateTask(newTask(TEST_PACKAGE, 30));
|
|
|
|
// No shortcuts were updated
|
|
verifyProgressUpdate(0);
|
|
});
|
|
}
|
|
|
|
@Test
|
|
public void testSessionUpdate_shortcuts_updated() {
|
|
// Run on model executor so that no other task runs in the middle.
|
|
runOnExecutorSync(MODEL_EXECUTOR, () -> {
|
|
mModelHelper.getModel().enqueueModelUpdateTask(newTask(PENDING_APP_1, 30));
|
|
|
|
verifyProgressUpdate(30, 4, 5, 6, 7);
|
|
});
|
|
}
|
|
|
|
@Test
|
|
public void testSessionUpdate_widgets_updated() {
|
|
// Run on model executor so that no other task runs in the middle.
|
|
runOnExecutorSync(MODEL_EXECUTOR, () -> {
|
|
mModelHelper.getModel().enqueueModelUpdateTask(newTask(PENDING_APP_2, 30));
|
|
|
|
verifyProgressUpdate(30, 8, 9, 10);
|
|
});
|
|
}
|
|
|
|
private void verifyProgressUpdate(int progress, int... idsUpdated) {
|
|
IntSet updates = IntSet.wrap(idsUpdated);
|
|
for (ItemInfo info : mModelHelper.getBgDataModel().itemsIdMap) {
|
|
int expectedProgress = updates.contains(info.id) ? progress
|
|
: (mDownloadingApps.contains(info.id) ? 0 : 100);
|
|
if (info instanceof WorkspaceItemInfo wi) {
|
|
assertEquals(expectedProgress, wi.getProgressLevel());
|
|
} else {
|
|
assertEquals(expectedProgress, ((LauncherAppWidgetInfo) info).installProgress);
|
|
}
|
|
}
|
|
}
|
|
}
|