777d49062f
This reverts commit 7a4a30d86d.
Test: Presubmit
Reason for revert: Fixing original bug
Bug: 196825541
Change-Id: Id4b1eb24a89564d264266d305aebea52917dfcd9
279 lines
13 KiB
Java
279 lines
13 KiB
Java
/*
|
|
* Copyright (C) 2020 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.LauncherSettings.Favorites.CONTAINER_DESKTOP;
|
|
import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_HOTSEAT;
|
|
import static com.android.launcher3.LauncherSettings.Favorites.TMP_CONTENT_URI;
|
|
import static com.android.launcher3.provider.LauncherDbUtils.dropTable;
|
|
import static com.android.launcher3.util.LauncherModelHelper.APP_ICON;
|
|
import static com.android.launcher3.util.LauncherModelHelper.DESKTOP;
|
|
import static com.android.launcher3.util.LauncherModelHelper.HOTSEAT;
|
|
import static com.android.launcher3.util.LauncherModelHelper.SHORTCUT;
|
|
import static com.android.launcher3.util.LauncherModelHelper.TEST_PACKAGE;
|
|
|
|
import static org.junit.Assert.assertEquals;
|
|
import static org.junit.Assert.assertTrue;
|
|
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.database.Cursor;
|
|
import android.database.sqlite.SQLiteDatabase;
|
|
import android.graphics.Point;
|
|
import android.os.Process;
|
|
|
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
|
import androidx.test.filters.SmallTest;
|
|
|
|
import com.android.launcher3.InvariantDeviceProfile;
|
|
import com.android.launcher3.LauncherSettings;
|
|
import com.android.launcher3.pm.UserCache;
|
|
import com.android.launcher3.util.LauncherModelHelper;
|
|
|
|
import org.junit.After;
|
|
import org.junit.Before;
|
|
import org.junit.Test;
|
|
import org.junit.runner.RunWith;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.HashSet;
|
|
|
|
/** Unit tests for {@link GridSizeMigrationTaskV2} */
|
|
@SmallTest
|
|
@RunWith(AndroidJUnit4.class)
|
|
public class GridSizeMigrationTaskV2Test {
|
|
|
|
private LauncherModelHelper mModelHelper;
|
|
private Context mContext;
|
|
private SQLiteDatabase mDb;
|
|
|
|
private HashSet<String> mValidPackages;
|
|
private InvariantDeviceProfile mIdp;
|
|
|
|
private final String testPackage1 = "com.android.launcher3.validpackage1";
|
|
private final String testPackage2 = "com.android.launcher3.validpackage2";
|
|
private final String testPackage3 = "com.android.launcher3.validpackage3";
|
|
private final String testPackage4 = "com.android.launcher3.validpackage4";
|
|
private final String testPackage5 = "com.android.launcher3.validpackage5";
|
|
private final String testPackage6 = "com.android.launcher3.validpackage6";
|
|
private final String testPackage7 = "com.android.launcher3.validpackage7";
|
|
private final String testPackage8 = "com.android.launcher3.validpackage8";
|
|
private final String testPackage9 = "com.android.launcher3.validpackage9";
|
|
private final String testPackage10 = "com.android.launcher3.validpackage10";
|
|
|
|
@Before
|
|
public void setUp() {
|
|
mModelHelper = new LauncherModelHelper();
|
|
mContext = mModelHelper.sandboxContext;
|
|
mDb = mModelHelper.provider.getDb();
|
|
|
|
mValidPackages = new HashSet<>();
|
|
mValidPackages.add(TEST_PACKAGE);
|
|
mValidPackages.add(testPackage1);
|
|
mValidPackages.add(testPackage2);
|
|
mValidPackages.add(testPackage3);
|
|
mValidPackages.add(testPackage4);
|
|
mValidPackages.add(testPackage5);
|
|
mValidPackages.add(testPackage6);
|
|
mValidPackages.add(testPackage7);
|
|
mValidPackages.add(testPackage8);
|
|
mValidPackages.add(testPackage9);
|
|
mValidPackages.add(testPackage10);
|
|
|
|
mIdp = InvariantDeviceProfile.INSTANCE.get(mContext);
|
|
|
|
long userSerial = UserCache.INSTANCE.get(mContext).getSerialNumberForUser(
|
|
Process.myUserHandle());
|
|
dropTable(mDb, LauncherSettings.Favorites.TMP_TABLE);
|
|
LauncherSettings.Favorites.addTableToDb(mDb, userSerial, false,
|
|
LauncherSettings.Favorites.TMP_TABLE);
|
|
}
|
|
|
|
@After
|
|
public void tearDown() {
|
|
mModelHelper.destroy();
|
|
}
|
|
|
|
@Test
|
|
public void testMigration() throws Exception {
|
|
int[] srcHotseatItems = {
|
|
mModelHelper.addItem(APP_ICON, 0, HOTSEAT, 0, 0, testPackage1, 1, TMP_CONTENT_URI),
|
|
mModelHelper.addItem(SHORTCUT, 1, HOTSEAT, 0, 0, testPackage2, 2, TMP_CONTENT_URI),
|
|
-1,
|
|
mModelHelper.addItem(SHORTCUT, 3, HOTSEAT, 0, 0, testPackage3, 3, TMP_CONTENT_URI),
|
|
mModelHelper.addItem(APP_ICON, 4, HOTSEAT, 0, 0, testPackage4, 4, TMP_CONTENT_URI),
|
|
};
|
|
mModelHelper.addItem(APP_ICON, 0, DESKTOP, 2, 2, testPackage5, 5, TMP_CONTENT_URI);
|
|
mModelHelper.addItem(APP_ICON, 0, DESKTOP, 2, 3, testPackage6, 6, TMP_CONTENT_URI);
|
|
mModelHelper.addItem(APP_ICON, 0, DESKTOP, 4, 1, testPackage8, 8, TMP_CONTENT_URI);
|
|
mModelHelper.addItem(APP_ICON, 0, DESKTOP, 4, 2, testPackage9, 9, TMP_CONTENT_URI);
|
|
mModelHelper.addItem(APP_ICON, 0, DESKTOP, 4, 3, testPackage10, 10, TMP_CONTENT_URI);
|
|
|
|
int[] destHotseatItems = {
|
|
-1,
|
|
mModelHelper.addItem(SHORTCUT, 1, HOTSEAT, 0, 0, testPackage2),
|
|
-1,
|
|
};
|
|
mModelHelper.addItem(APP_ICON, 0, DESKTOP, 2, 2, testPackage7);
|
|
|
|
mIdp.numDatabaseHotseatIcons = 4;
|
|
mIdp.numColumns = 4;
|
|
mIdp.numRows = 4;
|
|
GridSizeMigrationTaskV2.DbReader srcReader = new GridSizeMigrationTaskV2.DbReader(mDb,
|
|
LauncherSettings.Favorites.TMP_TABLE, mContext, mValidPackages);
|
|
GridSizeMigrationTaskV2.DbReader destReader = new GridSizeMigrationTaskV2.DbReader(mDb,
|
|
LauncherSettings.Favorites.TABLE_NAME, mContext, mValidPackages);
|
|
GridSizeMigrationTaskV2 task = new GridSizeMigrationTaskV2(mContext, mDb, srcReader,
|
|
destReader, mIdp.numDatabaseHotseatIcons, new Point(mIdp.numColumns, mIdp.numRows));
|
|
task.migrate(mIdp);
|
|
|
|
// Check hotseat items
|
|
Cursor c = mContext.getContentResolver().query(LauncherSettings.Favorites.CONTENT_URI,
|
|
new String[]{LauncherSettings.Favorites.SCREEN, LauncherSettings.Favorites.INTENT},
|
|
"container=" + CONTAINER_HOTSEAT, null, LauncherSettings.Favorites.SCREEN, null);
|
|
assertEquals(c.getCount(), mIdp.numDatabaseHotseatIcons);
|
|
int screenIndex = c.getColumnIndex(LauncherSettings.Favorites.SCREEN);
|
|
int intentIndex = c.getColumnIndex(LauncherSettings.Favorites.INTENT);
|
|
c.moveToNext();
|
|
assertEquals(c.getInt(screenIndex), 0);
|
|
assertTrue(c.getString(intentIndex).contains(testPackage1));
|
|
c.moveToNext();
|
|
assertEquals(c.getInt(screenIndex), 1);
|
|
assertTrue(c.getString(intentIndex).contains(testPackage2));
|
|
c.moveToNext();
|
|
assertEquals(c.getInt(screenIndex), 2);
|
|
assertTrue(c.getString(intentIndex).contains(testPackage3));
|
|
c.moveToNext();
|
|
assertEquals(c.getInt(screenIndex), 3);
|
|
assertTrue(c.getString(intentIndex).contains(testPackage4));
|
|
c.close();
|
|
|
|
// Check workspace items
|
|
c = mContext.getContentResolver().query(LauncherSettings.Favorites.CONTENT_URI,
|
|
new String[]{LauncherSettings.Favorites.CELLX, LauncherSettings.Favorites.CELLY,
|
|
LauncherSettings.Favorites.INTENT},
|
|
"container=" + CONTAINER_DESKTOP, null, null, null);
|
|
intentIndex = c.getColumnIndex(LauncherSettings.Favorites.INTENT);
|
|
int cellXIndex = c.getColumnIndex(LauncherSettings.Favorites.CELLX);
|
|
int cellYIndex = c.getColumnIndex(LauncherSettings.Favorites.CELLY);
|
|
|
|
HashMap<String, Point> locMap = new HashMap<>();
|
|
while (c.moveToNext()) {
|
|
locMap.put(
|
|
Intent.parseUri(c.getString(intentIndex), 0).getPackage(),
|
|
new Point(c.getInt(cellXIndex), c.getInt(cellYIndex)));
|
|
}
|
|
c.close();
|
|
|
|
assertEquals(locMap.size(), 6);
|
|
assertEquals(new Point(0, 2), locMap.get(testPackage8));
|
|
assertEquals(new Point(0, 3), locMap.get(testPackage6));
|
|
assertEquals(new Point(1, 3), locMap.get(testPackage10));
|
|
assertEquals(new Point(2, 3), locMap.get(testPackage5));
|
|
assertEquals(new Point(3, 3), locMap.get(testPackage9));
|
|
}
|
|
|
|
@Test
|
|
public void migrateToLargerHotseat() {
|
|
int[] srcHotseatItems = {
|
|
mModelHelper.addItem(APP_ICON, 0, HOTSEAT, 0, 0, testPackage1, 1, TMP_CONTENT_URI),
|
|
mModelHelper.addItem(SHORTCUT, 1, HOTSEAT, 0, 0, testPackage2, 2, TMP_CONTENT_URI),
|
|
mModelHelper.addItem(APP_ICON, 2, HOTSEAT, 0, 0, testPackage3, 3, TMP_CONTENT_URI),
|
|
mModelHelper.addItem(SHORTCUT, 3, HOTSEAT, 0, 0, testPackage4, 4, TMP_CONTENT_URI),
|
|
};
|
|
|
|
int numSrcDatabaseHotseatIcons = srcHotseatItems.length;
|
|
mIdp.numDatabaseHotseatIcons = 6;
|
|
mIdp.numColumns = 4;
|
|
mIdp.numRows = 4;
|
|
GridSizeMigrationTaskV2.DbReader srcReader = new GridSizeMigrationTaskV2.DbReader(mDb,
|
|
LauncherSettings.Favorites.TMP_TABLE, mContext, mValidPackages);
|
|
GridSizeMigrationTaskV2.DbReader destReader = new GridSizeMigrationTaskV2.DbReader(mDb,
|
|
LauncherSettings.Favorites.TABLE_NAME, mContext, mValidPackages);
|
|
GridSizeMigrationTaskV2 task = new GridSizeMigrationTaskV2(mContext, mDb, srcReader,
|
|
destReader, mIdp.numDatabaseHotseatIcons, new Point(mIdp.numColumns, mIdp.numRows));
|
|
task.migrate(mIdp);
|
|
|
|
// Check hotseat items
|
|
Cursor c = mContext.getContentResolver().query(LauncherSettings.Favorites.CONTENT_URI,
|
|
new String[]{LauncherSettings.Favorites.SCREEN, LauncherSettings.Favorites.INTENT},
|
|
"container=" + CONTAINER_HOTSEAT, null, LauncherSettings.Favorites.SCREEN, null);
|
|
assertEquals(c.getCount(), numSrcDatabaseHotseatIcons);
|
|
int screenIndex = c.getColumnIndex(LauncherSettings.Favorites.SCREEN);
|
|
int intentIndex = c.getColumnIndex(LauncherSettings.Favorites.INTENT);
|
|
c.moveToNext();
|
|
assertEquals(c.getInt(screenIndex), 0);
|
|
assertTrue(c.getString(intentIndex).contains(testPackage1));
|
|
c.moveToNext();
|
|
assertEquals(c.getInt(screenIndex), 1);
|
|
assertTrue(c.getString(intentIndex).contains(testPackage2));
|
|
c.moveToNext();
|
|
assertEquals(c.getInt(screenIndex), 2);
|
|
assertTrue(c.getString(intentIndex).contains(testPackage3));
|
|
c.moveToNext();
|
|
assertEquals(c.getInt(screenIndex), 3);
|
|
assertTrue(c.getString(intentIndex).contains(testPackage4));
|
|
|
|
c.close();
|
|
}
|
|
|
|
@Test
|
|
public void migrateFromLargerHotseat() {
|
|
int[] srcHotseatItems = {
|
|
mModelHelper.addItem(APP_ICON, 0, HOTSEAT, 0, 0, testPackage1, 1, TMP_CONTENT_URI),
|
|
-1,
|
|
mModelHelper.addItem(SHORTCUT, 2, HOTSEAT, 0, 0, testPackage2, 2, TMP_CONTENT_URI),
|
|
mModelHelper.addItem(APP_ICON, 3, HOTSEAT, 0, 0, testPackage3, 3, TMP_CONTENT_URI),
|
|
mModelHelper.addItem(SHORTCUT, 4, HOTSEAT, 0, 0, testPackage4, 4, TMP_CONTENT_URI),
|
|
mModelHelper.addItem(APP_ICON, 5, HOTSEAT, 0, 0, testPackage5, 5, TMP_CONTENT_URI),
|
|
};
|
|
|
|
mIdp.numDatabaseHotseatIcons = 4;
|
|
mIdp.numColumns = 4;
|
|
mIdp.numRows = 4;
|
|
GridSizeMigrationTaskV2.DbReader srcReader = new GridSizeMigrationTaskV2.DbReader(mDb,
|
|
LauncherSettings.Favorites.TMP_TABLE, mContext, mValidPackages);
|
|
GridSizeMigrationTaskV2.DbReader destReader = new GridSizeMigrationTaskV2.DbReader(mDb,
|
|
LauncherSettings.Favorites.TABLE_NAME, mContext, mValidPackages);
|
|
GridSizeMigrationTaskV2 task = new GridSizeMigrationTaskV2(mContext, mDb, srcReader,
|
|
destReader, mIdp.numDatabaseHotseatIcons, new Point(mIdp.numColumns, mIdp.numRows));
|
|
task.migrate(mIdp);
|
|
|
|
// Check hotseat items
|
|
Cursor c = mContext.getContentResolver().query(LauncherSettings.Favorites.CONTENT_URI,
|
|
new String[]{LauncherSettings.Favorites.SCREEN, LauncherSettings.Favorites.INTENT},
|
|
"container=" + CONTAINER_HOTSEAT, null, LauncherSettings.Favorites.SCREEN, null);
|
|
assertEquals(c.getCount(), mIdp.numDatabaseHotseatIcons);
|
|
int screenIndex = c.getColumnIndex(LauncherSettings.Favorites.SCREEN);
|
|
int intentIndex = c.getColumnIndex(LauncherSettings.Favorites.INTENT);
|
|
c.moveToNext();
|
|
assertEquals(c.getInt(screenIndex), 0);
|
|
assertTrue(c.getString(intentIndex).contains(testPackage1));
|
|
c.moveToNext();
|
|
assertEquals(c.getInt(screenIndex), 1);
|
|
assertTrue(c.getString(intentIndex).contains(testPackage2));
|
|
c.moveToNext();
|
|
assertEquals(c.getInt(screenIndex), 2);
|
|
assertTrue(c.getString(intentIndex).contains(testPackage3));
|
|
c.moveToNext();
|
|
assertEquals(c.getInt(screenIndex), 3);
|
|
assertTrue(c.getString(intentIndex).contains(testPackage4));
|
|
|
|
c.close();
|
|
}
|
|
}
|