| package com.android.launcher3.model; |
| |
| import android.content.ContentValues; |
| import android.content.Context; |
| import android.content.Intent; |
| import android.database.sqlite.SQLiteDatabase; |
| |
| import com.android.launcher3.LauncherProvider; |
| import com.android.launcher3.LauncherSettings; |
| import com.android.launcher3.util.TestLauncherProvider; |
| |
| import org.junit.Before; |
| import org.robolectric.Robolectric; |
| import org.robolectric.RuntimeEnvironment; |
| import org.robolectric.shadows.ShadowContentResolver; |
| import org.robolectric.shadows.ShadowLog; |
| |
| public abstract class BaseGridChangesTestCase { |
| |
| |
| public static final int DESKTOP = LauncherSettings.Favorites.CONTAINER_DESKTOP; |
| public static final int HOTSEAT = LauncherSettings.Favorites.CONTAINER_HOTSEAT; |
| |
| public static final int APP_ICON = LauncherSettings.Favorites.ITEM_TYPE_APPLICATION; |
| public static final int SHORTCUT = LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT; |
| public static final int NO__ICON = -1; |
| |
| public static final String TEST_PACKAGE = "com.android.launcher3.validpackage"; |
| |
| public Context mContext; |
| public TestLauncherProvider mProvider; |
| public SQLiteDatabase mDb; |
| |
| @Before |
| public void setUpBaseCase() { |
| ShadowLog.stream = System.out; |
| |
| mContext = RuntimeEnvironment.application; |
| mProvider = Robolectric.setupContentProvider(TestLauncherProvider.class); |
| ShadowContentResolver.registerProviderInternal(LauncherProvider.AUTHORITY, mProvider); |
| mDb = mProvider.getDb(); |
| } |
| |
| /** |
| * Adds a mock item in the DB. |
| * @param type {@link #APP_ICON} or {@link #SHORTCUT} or >= 2 for |
| * folder (where the type represents the number of items in the folder). |
| */ |
| public int addItem(int type, int screen, int container, int x, int y) { |
| int id = LauncherSettings.Settings.call(mContext.getContentResolver(), |
| LauncherSettings.Settings.METHOD_NEW_ITEM_ID) |
| .getInt(LauncherSettings.Settings.EXTRA_VALUE); |
| |
| ContentValues values = new ContentValues(); |
| values.put(LauncherSettings.Favorites._ID, id); |
| values.put(LauncherSettings.Favorites.CONTAINER, container); |
| values.put(LauncherSettings.Favorites.SCREEN, screen); |
| values.put(LauncherSettings.Favorites.CELLX, x); |
| values.put(LauncherSettings.Favorites.CELLY, y); |
| values.put(LauncherSettings.Favorites.SPANX, 1); |
| values.put(LauncherSettings.Favorites.SPANY, 1); |
| |
| if (type == APP_ICON || type == SHORTCUT) { |
| values.put(LauncherSettings.Favorites.ITEM_TYPE, type); |
| values.put(LauncherSettings.Favorites.INTENT, |
| new Intent(Intent.ACTION_MAIN).setPackage(TEST_PACKAGE).toUri(0)); |
| } else { |
| values.put(LauncherSettings.Favorites.ITEM_TYPE, |
| LauncherSettings.Favorites.ITEM_TYPE_FOLDER); |
| // Add folder items. |
| for (int i = 0; i < type; i++) { |
| addItem(APP_ICON, 0, id, 0, 0); |
| } |
| } |
| |
| mContext.getContentResolver().insert(LauncherSettings.Favorites.CONTENT_URI, values); |
| return id; |
| } |
| |
| public int[][][] createGrid(int[][][] typeArray) { |
| return createGrid(typeArray, 1); |
| } |
| |
| /** |
| * Initializes the DB with mock elements to represent the provided grid structure. |
| * @param typeArray A 3d array of item types. {@see #addItem(int, long, long, int, int)} for |
| * type definitions. The first dimension represents the screens and the next |
| * two represent the workspace grid. |
| * @param startScreen First screen id from where the icons will be added. |
| * @return the same grid representation where each entry is the corresponding item id. |
| */ |
| public int[][][] createGrid(int[][][] typeArray, int startScreen) { |
| LauncherSettings.Settings.call(mContext.getContentResolver(), |
| LauncherSettings.Settings.METHOD_CREATE_EMPTY_DB); |
| int[][][] ids = new int[typeArray.length][][]; |
| |
| for (int i = 0; i < typeArray.length; i++) { |
| // Add screen to DB |
| int screenId = startScreen + i; |
| |
| // Keep the screen id counter up to date |
| LauncherSettings.Settings.call(mContext.getContentResolver(), |
| LauncherSettings.Settings.METHOD_NEW_SCREEN_ID); |
| |
| ids[i] = new int[typeArray[i].length][]; |
| for (int y = 0; y < typeArray[i].length; y++) { |
| ids[i][y] = new int[typeArray[i][y].length]; |
| for (int x = 0; x < typeArray[i][y].length; x++) { |
| if (typeArray[i][y][x] < 0) { |
| // Empty cell |
| ids[i][y][x] = -1; |
| } else { |
| ids[i][y][x] = addItem(typeArray[i][y][x], screenId, DESKTOP, x, y); |
| } |
| } |
| } |
| } |
| |
| return ids; |
| } |
| } |