summaryrefslogtreecommitdiff
path: root/tests/src/com/android/launcher3/model/GridSizeMigrationTaskV2Test.kt
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/com/android/launcher3/model/GridSizeMigrationTaskV2Test.kt')
-rw-r--r--tests/src/com/android/launcher3/model/GridSizeMigrationTaskV2Test.kt510
1 files changed, 0 insertions, 510 deletions
diff --git a/tests/src/com/android/launcher3/model/GridSizeMigrationTaskV2Test.kt b/tests/src/com/android/launcher3/model/GridSizeMigrationTaskV2Test.kt
deleted file mode 100644
index 90d7b434df..0000000000
--- a/tests/src/com/android/launcher3/model/GridSizeMigrationTaskV2Test.kt
+++ /dev/null
@@ -1,510 +0,0 @@
-/*
- * Copyright (C) 2022 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 android.content.Context
-import android.content.Intent
-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.LauncherFiles
-import com.android.launcher3.LauncherSettings.Favorites.*
-import com.android.launcher3.config.FeatureFlags
-import com.android.launcher3.model.GridSizeMigrationTaskV2.DbReader
-import com.android.launcher3.pm.UserCache
-import com.android.launcher3.provider.LauncherDbUtils
-import com.android.launcher3.util.LauncherModelHelper
-import com.android.launcher3.util.LauncherModelHelper.*
-import com.google.common.truth.Truth.assertThat
-import org.junit.After
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-
-/** Unit tests for [GridSizeMigrationTaskV2] */
-@SmallTest
-@RunWith(AndroidJUnit4::class)
-class GridSizeMigrationTaskV2Test {
- private lateinit var modelHelper: LauncherModelHelper
- private lateinit var context: Context
- private lateinit var db: SQLiteDatabase
- private lateinit var validPackages: Set<String>
- private lateinit var idp: InvariantDeviceProfile
- private val testPackage1 = "com.android.launcher3.validpackage1"
- private val testPackage2 = "com.android.launcher3.validpackage2"
- private val testPackage3 = "com.android.launcher3.validpackage3"
- private val testPackage4 = "com.android.launcher3.validpackage4"
- private val testPackage5 = "com.android.launcher3.validpackage5"
- private val testPackage6 = "com.android.launcher3.validpackage6"
- private val testPackage7 = "com.android.launcher3.validpackage7"
- private val testPackage8 = "com.android.launcher3.validpackage8"
- private val testPackage9 = "com.android.launcher3.validpackage9"
- private val testPackage10 = "com.android.launcher3.validpackage10"
-
- @Before
- fun setUp() {
- modelHelper = LauncherModelHelper()
- context = modelHelper.sandboxContext
- db = modelHelper.provider.db
-
- validPackages = setOf(
- TEST_PACKAGE,
- testPackage1,
- testPackage2,
- testPackage3,
- testPackage4,
- testPackage5,
- testPackage6,
- testPackage7,
- testPackage8,
- testPackage9,
- testPackage10
- )
-
- idp = InvariantDeviceProfile.INSTANCE[context]
- val userSerial = UserCache.INSTANCE[context].getSerialNumberForUser(Process.myUserHandle())
- LauncherDbUtils.dropTable(db, TMP_TABLE)
- addTableToDb(db, userSerial, false, TMP_TABLE)
- }
-
- @After
- fun tearDown() {
- modelHelper.destroy()
- }
-
- /**
- * Old migration logic, should be modified once [FeatureFlags.ENABLE_NEW_MIGRATION_LOGIC] is
- * not needed anymore
- */
- @Test
- @Throws(Exception::class)
- fun testMigration() {
- // Src Hotseat icons
- modelHelper.addItem(APP_ICON, 0, HOTSEAT, 0, 0, testPackage1, 1, TMP_CONTENT_URI)
- modelHelper.addItem(SHORTCUT, 1, HOTSEAT, 0, 0, testPackage2, 2, TMP_CONTENT_URI)
- modelHelper.addItem(SHORTCUT, 3, HOTSEAT, 0, 0, testPackage3, 3, TMP_CONTENT_URI)
- modelHelper.addItem(APP_ICON, 4, HOTSEAT, 0, 0, testPackage4, 4, TMP_CONTENT_URI)
- // Src grid icons
- // _ _ _ _ _
- // _ _ _ _ 5
- // _ _ 6 _ 7
- // _ _ 8 _ 9
- // _ _ _ _ _
- modelHelper.addItem(APP_ICON, 0, DESKTOP, 4, 1, testPackage5, 5, TMP_CONTENT_URI)
- modelHelper.addItem(APP_ICON, 0, DESKTOP, 2, 2, testPackage6, 6, TMP_CONTENT_URI)
- modelHelper.addItem(APP_ICON, 0, DESKTOP, 4, 2, testPackage7, 7, TMP_CONTENT_URI)
- modelHelper.addItem(APP_ICON, 0, DESKTOP, 2, 3, testPackage8, 8, TMP_CONTENT_URI)
- modelHelper.addItem(APP_ICON, 0, DESKTOP, 4, 3, testPackage9, 9, TMP_CONTENT_URI)
-
- // Dest hotseat icons
- modelHelper.addItem(SHORTCUT, 1, HOTSEAT, 0, 0, testPackage2)
- // Dest grid icons
- modelHelper.addItem(APP_ICON, 0, DESKTOP, 2, 2, testPackage10)
-
- idp.numDatabaseHotseatIcons = 4
- idp.numColumns = 4
- idp.numRows = 4
- val srcReader = DbReader(db, TMP_TABLE, context, validPackages)
- val destReader = DbReader(db, TABLE_NAME, context, validPackages)
- val task = GridSizeMigrationTaskV2(
- context,
- db,
- srcReader,
- destReader,
- idp.numDatabaseHotseatIcons,
- Point(idp.numColumns, idp.numRows)
- )
- task.migrate(DeviceGridState(context), DeviceGridState(idp))
-
- // Check hotseat items
- var c = context.contentResolver.query(
- CONTENT_URI,
- arrayOf(SCREEN, INTENT),
- "container=$CONTAINER_HOTSEAT",
- null,
- SCREEN,
- null
- ) ?: throw IllegalStateException()
-
- assertThat(c.count).isEqualTo(idp.numDatabaseHotseatIcons)
-
- val screenIndex = c.getColumnIndex(SCREEN)
- var intentIndex = c.getColumnIndex(INTENT)
- c.moveToNext()
- assertThat(c.getInt(screenIndex).toLong()).isEqualTo(0)
- assertThat(c.getString(intentIndex)).contains(testPackage1)
- c.moveToNext()
- assertThat(c.getInt(screenIndex).toLong()).isEqualTo(1)
- assertThat(c.getString(intentIndex)).contains(testPackage2)
- c.moveToNext()
- assertThat(c.getInt(screenIndex).toLong()).isEqualTo(2)
- assertThat(c.getString(intentIndex)).contains(testPackage3)
- c.moveToNext()
- assertThat(c.getInt(screenIndex).toLong()).isEqualTo(3)
- assertThat(c.getString(intentIndex)).contains(testPackage4)
- c.close()
-
- // Check workspace items
- c = context.contentResolver.query(
- CONTENT_URI,
- arrayOf(CELLX, CELLY, INTENT),
- "container=$CONTAINER_DESKTOP",
- null,
- null,
- null
- ) ?: throw IllegalStateException()
-
- intentIndex = c.getColumnIndex(INTENT)
- val cellXIndex = c.getColumnIndex(CELLX)
- val cellYIndex = c.getColumnIndex(CELLY)
- val locMap = HashMap<String, Point>()
- while (c.moveToNext()) {
- locMap[Intent.parseUri(c.getString(intentIndex), 0).getPackage()] =
- Point(c.getInt(cellXIndex), c.getInt(cellYIndex))
- }
- c.close()
- // Expected dest grid icons
- // _ _ _ _
- // 5 6 7 8
- // 9 _ 10_
- // _ _ _ _
- assertThat(locMap.size.toLong()).isEqualTo(6)
- assertThat(locMap[testPackage5]).isEqualTo(Point(0, 1))
- assertThat(locMap[testPackage6]).isEqualTo(Point(1, 1))
- assertThat(locMap[testPackage7]).isEqualTo(Point(2, 1))
- assertThat(locMap[testPackage8]).isEqualTo(Point(3, 1))
- assertThat(locMap[testPackage9]).isEqualTo(Point(0, 2))
- assertThat(locMap[testPackage10]).isEqualTo(Point(2, 2))
- }
-
- @Test
- fun migrateToLargerHotseat() {
- val srcHotseatItems = intArrayOf(
- modelHelper.addItem(APP_ICON, 0, HOTSEAT, 0, 0, testPackage1, 1, TMP_CONTENT_URI),
- modelHelper.addItem(SHORTCUT, 1, HOTSEAT, 0, 0, testPackage2, 2, TMP_CONTENT_URI),
- modelHelper.addItem(APP_ICON, 2, HOTSEAT, 0, 0, testPackage3, 3, TMP_CONTENT_URI),
- modelHelper.addItem(SHORTCUT, 3, HOTSEAT, 0, 0, testPackage4, 4, TMP_CONTENT_URI)
- )
- val numSrcDatabaseHotseatIcons = srcHotseatItems.size
- idp.numDatabaseHotseatIcons = 6
- idp.numColumns = 4
- idp.numRows = 4
- val srcReader = DbReader(db, TMP_TABLE, context, validPackages)
- val destReader = DbReader(db, TABLE_NAME, context, validPackages)
- val task = GridSizeMigrationTaskV2(
- context,
- db,
- srcReader,
- destReader,
- idp.numDatabaseHotseatIcons,
- Point(idp.numColumns, idp.numRows)
- )
- task.migrate(DeviceGridState(context), DeviceGridState(idp))
-
- // Check hotseat items
- val c = context.contentResolver.query(
- CONTENT_URI,
- arrayOf(SCREEN, INTENT),
- "container=$CONTAINER_HOTSEAT",
- null,
- SCREEN,
- null
- ) ?: throw IllegalStateException()
-
- assertThat(c.count.toLong()).isEqualTo(numSrcDatabaseHotseatIcons.toLong())
- val screenIndex = c.getColumnIndex(SCREEN)
- val intentIndex = c.getColumnIndex(INTENT)
- c.moveToNext()
- assertThat(c.getInt(screenIndex)).isEqualTo(0)
- assertThat(c.getString(intentIndex)).contains(testPackage1)
-
- c.moveToNext()
- assertThat(c.getInt(screenIndex)).isEqualTo(1)
- assertThat(c.getString(intentIndex)).contains(testPackage2)
-
- c.moveToNext()
- assertThat(c.getInt(screenIndex)).isEqualTo(2)
- assertThat(c.getString(intentIndex)).contains(testPackage3)
-
- c.moveToNext()
- assertThat(c.getInt(screenIndex)).isEqualTo(3)
- assertThat(c.getString(intentIndex)).contains(testPackage4)
-
- c.close()
- }
-
- @Test
- fun migrateFromLargerHotseat() {
- modelHelper.addItem(APP_ICON, 0, HOTSEAT, 0, 0, testPackage1, 1, TMP_CONTENT_URI)
- modelHelper.addItem(SHORTCUT, 2, HOTSEAT, 0, 0, testPackage2, 2, TMP_CONTENT_URI)
- modelHelper.addItem(APP_ICON, 3, HOTSEAT, 0, 0, testPackage3, 3, TMP_CONTENT_URI)
- modelHelper.addItem(SHORTCUT, 4, HOTSEAT, 0, 0, testPackage4, 4, TMP_CONTENT_URI)
- modelHelper.addItem(APP_ICON, 5, HOTSEAT, 0, 0, testPackage5, 5, TMP_CONTENT_URI)
-
- idp.numDatabaseHotseatIcons = 4
- idp.numColumns = 4
- idp.numRows = 4
- val srcReader = DbReader(db, TMP_TABLE, context, validPackages)
- val destReader = DbReader(db, TABLE_NAME, context, validPackages)
- val task = GridSizeMigrationTaskV2(
- context,
- db,
- srcReader,
- destReader,
- idp.numDatabaseHotseatIcons,
- Point(idp.numColumns, idp.numRows)
- )
- task.migrate(DeviceGridState(context), DeviceGridState(idp))
-
- // Check hotseat items
- val c = context.contentResolver.query(
- CONTENT_URI,
- arrayOf(SCREEN, INTENT),
- "container=$CONTAINER_HOTSEAT",
- null,
- SCREEN,
- null
- ) ?: throw IllegalStateException()
-
- assertThat(c.count.toLong()).isEqualTo(idp.numDatabaseHotseatIcons.toLong())
- val screenIndex = c.getColumnIndex(SCREEN)
- val intentIndex = c.getColumnIndex(INTENT)
-
- c.moveToNext()
- assertThat(c.getInt(screenIndex)).isEqualTo(0)
- assertThat(c.getString(intentIndex)).contains(testPackage1)
-
- c.moveToNext()
- assertThat(c.getInt(screenIndex)).isEqualTo(1)
- assertThat(c.getString(intentIndex)).contains(testPackage2)
-
- c.moveToNext()
- assertThat(c.getInt(screenIndex)).isEqualTo(2)
- assertThat(c.getString(intentIndex)).contains(testPackage3)
-
- c.moveToNext()
- assertThat(c.getInt(screenIndex)).isEqualTo(3)
- assertThat(c.getString(intentIndex)).contains(testPackage4)
-
- c.close()
- }
-
- /**
- * Migrating from a smaller grid to a large one should keep the pages
- * if the column difference is less than 2
- */
- @Test
- @Throws(Exception::class)
- fun migrateFromSmallerGridSmallDifference() {
- enableNewMigrationLogic("4,4")
-
- // Setup src grid
- modelHelper.addItem(APP_ICON, 0, DESKTOP, 2, 2, testPackage1, 5, TMP_CONTENT_URI)
- modelHelper.addItem(APP_ICON, 0, DESKTOP, 2, 3, testPackage2, 6, TMP_CONTENT_URI)
- modelHelper.addItem(APP_ICON, 1, DESKTOP, 3, 1, testPackage3, 7, TMP_CONTENT_URI)
- modelHelper.addItem(APP_ICON, 1, DESKTOP, 3, 2, testPackage4, 8, TMP_CONTENT_URI)
- modelHelper.addItem(APP_ICON, 2, DESKTOP, 3, 3, testPackage5, 9, TMP_CONTENT_URI)
-
- idp.numDatabaseHotseatIcons = 4
- idp.numColumns = 6
- idp.numRows = 5
-
- val srcReader = DbReader(db, TMP_TABLE, context, validPackages)
- val destReader = DbReader(db, TABLE_NAME, context, validPackages)
- val task = GridSizeMigrationTaskV2(
- context,
- db,
- srcReader,
- destReader,
- idp.numDatabaseHotseatIcons,
- Point(idp.numColumns, idp.numRows)
- )
- task.migrate(DeviceGridState(context), DeviceGridState(idp))
-
- // Get workspace items
- val c = context.contentResolver.query(
- CONTENT_URI,
- arrayOf(INTENT, SCREEN),
- "container=$CONTAINER_DESKTOP",
- null,
- null,
- null
- ) ?: throw IllegalStateException()
- val intentIndex = c.getColumnIndex(INTENT)
- val screenIndex = c.getColumnIndex(SCREEN)
-
- // Get in which screen the icon is
- val locMap = HashMap<String, Int>()
- while (c.moveToNext()) {
- locMap[Intent.parseUri(c.getString(intentIndex), 0).getPackage()] =
- c.getInt(screenIndex)
- }
- c.close()
- assertThat(locMap.size).isEqualTo(5)
- assertThat(locMap[testPackage1]).isEqualTo(0)
- assertThat(locMap[testPackage2]).isEqualTo(0)
- assertThat(locMap[testPackage3]).isEqualTo(1)
- assertThat(locMap[testPackage4]).isEqualTo(1)
- assertThat(locMap[testPackage5]).isEqualTo(2)
-
- disableNewMigrationLogic()
- }
-
- /**
- * Migrating from a smaller grid to a large one should reflow the pages
- * if the column difference is more than 2
- */
- @Test
- @Throws(Exception::class)
- fun migrateFromSmallerGridBigDifference() {
- enableNewMigrationLogic("2,2")
-
- // Setup src grid
- modelHelper.addItem(APP_ICON, 0, DESKTOP, 0, 1, testPackage1, 5, TMP_CONTENT_URI)
- modelHelper.addItem(APP_ICON, 0, DESKTOP, 1, 1, testPackage2, 6, TMP_CONTENT_URI)
- modelHelper.addItem(APP_ICON, 1, DESKTOP, 0, 0, testPackage3, 7, TMP_CONTENT_URI)
- modelHelper.addItem(APP_ICON, 1, DESKTOP, 1, 0, testPackage4, 8, TMP_CONTENT_URI)
- modelHelper.addItem(APP_ICON, 2, DESKTOP, 0, 0, testPackage5, 9, TMP_CONTENT_URI)
-
- idp.numDatabaseHotseatIcons = 4
- idp.numColumns = 5
- idp.numRows = 5
- val srcReader = DbReader(db, TMP_TABLE, context, validPackages)
- val destReader = DbReader(db, TABLE_NAME, context, validPackages)
- val task = GridSizeMigrationTaskV2(
- context,
- db,
- srcReader,
- destReader,
- idp.numDatabaseHotseatIcons,
- Point(idp.numColumns, idp.numRows)
- )
- task.migrate(DeviceGridState(context), DeviceGridState(idp))
-
- // Get workspace items
- val c = context.contentResolver.query(
- CONTENT_URI,
- arrayOf(INTENT, SCREEN),
- "container=$CONTAINER_DESKTOP",
- null,
- null,
- null
- ) ?: throw IllegalStateException()
-
- val intentIndex = c.getColumnIndex(INTENT)
- val screenIndex = c.getColumnIndex(SCREEN)
-
- // Get in which screen the icon is
- val locMap = HashMap<String, Int>()
- while (c.moveToNext()) {
- locMap[Intent.parseUri(c.getString(intentIndex), 0).getPackage()] =
- c.getInt(screenIndex)
- }
- c.close()
-
- // All icons fit the first screen
- assertThat(locMap.size).isEqualTo(5)
- assertThat(locMap[testPackage1]).isEqualTo(0)
- assertThat(locMap[testPackage2]).isEqualTo(0)
- assertThat(locMap[testPackage3]).isEqualTo(0)
- assertThat(locMap[testPackage4]).isEqualTo(0)
- assertThat(locMap[testPackage5]).isEqualTo(0)
- disableNewMigrationLogic()
- }
-
- /**
- * Migrating from a larger grid to a smaller, we reflow from page 0
- */
- @Test
- @Throws(Exception::class)
- fun migrateFromLargerGrid() {
- enableNewMigrationLogic("5,5")
-
- // Setup src grid
- modelHelper.addItem(APP_ICON, 0, DESKTOP, 0, 1, testPackage1, 5, TMP_CONTENT_URI)
- modelHelper.addItem(APP_ICON, 0, DESKTOP, 1, 1, testPackage2, 6, TMP_CONTENT_URI)
- modelHelper.addItem(APP_ICON, 1, DESKTOP, 0, 0, testPackage3, 7, TMP_CONTENT_URI)
- modelHelper.addItem(APP_ICON, 1, DESKTOP, 1, 0, testPackage4, 8, TMP_CONTENT_URI)
- modelHelper.addItem(APP_ICON, 2, DESKTOP, 0, 0, testPackage5, 9, TMP_CONTENT_URI)
-
- idp.numDatabaseHotseatIcons = 4
- idp.numColumns = 4
- idp.numRows = 4
- val srcReader = DbReader(db, TMP_TABLE, context, validPackages)
- val destReader = DbReader(db, TABLE_NAME, context, validPackages)
- val task = GridSizeMigrationTaskV2(
- context,
- db,
- srcReader,
- destReader,
- idp.numDatabaseHotseatIcons,
- Point(idp.numColumns, idp.numRows)
- )
- task.migrate(DeviceGridState(context), DeviceGridState(idp))
-
- // Get workspace items
- val c = context.contentResolver.query(
- CONTENT_URI,
- arrayOf(INTENT, SCREEN),
- "container=$CONTAINER_DESKTOP",
- null,
- null,
- null
- ) ?: throw IllegalStateException()
- val intentIndex = c.getColumnIndex(INTENT)
- val screenIndex = c.getColumnIndex(SCREEN)
-
- // Get in which screen the icon is
- val locMap = HashMap<String, Int>()
- while (c.moveToNext()) {
- locMap[Intent.parseUri(c.getString(intentIndex), 0).getPackage()] =
- c.getInt(screenIndex)
- }
- c.close()
-
- // All icons fit the first screen
- assertThat(locMap.size).isEqualTo(5)
- assertThat(locMap[testPackage1]).isEqualTo(0)
- assertThat(locMap[testPackage2]).isEqualTo(0)
- assertThat(locMap[testPackage3]).isEqualTo(0)
- assertThat(locMap[testPackage4]).isEqualTo(0)
- assertThat(locMap[testPackage5]).isEqualTo(0)
-
- disableNewMigrationLogic()
- }
-
- private fun enableNewMigrationLogic(srcGridSize: String) {
- context.getSharedPreferences(FeatureFlags.FLAGS_PREF_NAME, Context.MODE_PRIVATE)
- .edit()
- .putBoolean(FeatureFlags.ENABLE_NEW_MIGRATION_LOGIC.key, true)
- .commit()
- context.getSharedPreferences(LauncherFiles.SHARED_PREFERENCES_KEY, Context.MODE_PRIVATE)
- .edit()
- .putString(DeviceGridState.KEY_WORKSPACE_SIZE, srcGridSize)
- .commit()
- FeatureFlags.initialize(context)
- }
-
- private fun disableNewMigrationLogic() {
- context.getSharedPreferences(FeatureFlags.FLAGS_PREF_NAME, Context.MODE_PRIVATE)
- .edit()
- .putBoolean(FeatureFlags.ENABLE_NEW_MIGRATION_LOGIC.key, false)
- .commit()
- }
-} \ No newline at end of file