ItemInfo.java revision a5902524d4403885eb4c50360bf3465c6be796ef
131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project/*
231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *
431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * you may not use this file except in compliance with the License.
631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * You may obtain a copy of the License at
731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *
831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *
1031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * See the License for the specific language governing permissions and
1431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * limitations under the License.
1531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */
1631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
17a5902524d4403885eb4c50360bf3465c6be796efJoe Onoratopackage com.android.launcher2;
1831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
1931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport java.io.ByteArrayOutputStream;
2031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport java.io.IOException;
2131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
2231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.content.ContentValues;
2331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.graphics.Bitmap;
2431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.util.Log;
2531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
2631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project/**
2731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Represents an item in the launcher.
2831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */
2931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectclass ItemInfo {
3031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
3131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    static final int NO_ID = -1;
3231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
3331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
3431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * The id in the settings database for this item
3531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
3631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    long id = NO_ID;
3731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
3831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
3931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * One of {@link LauncherSettings.Favorites#ITEM_TYPE_APPLICATION},
4031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * {@link LauncherSettings.Favorites#ITEM_TYPE_SHORTCUT},
4131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * {@link LauncherSettings.Favorites#ITEM_TYPE_USER_FOLDER}, or
427376faefbbcbe30cc4e3f706ab95c254a4707d98The Android Open Source Project     * {@link LauncherSettings.Favorites#ITEM_TYPE_APPWIDGET}.
4331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
4431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    int itemType;
4531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
4631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
4731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * The id of the container that holds this item. For the desktop, this will be
4831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * {@link LauncherSettings.Favorites#CONTAINER_DESKTOP}. For the all applications folder it
4931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * will be {@link #NO_ID} (since it is not stored in the settings DB). For user folders
5031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * it will be the id of the folder.
5131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
5231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    long container = NO_ID;
5331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
5431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
5531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * Iindicates the screen in which the shortcut appears.
5631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
5731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    int screen = -1;
5831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
5931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
6031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * Indicates the X position of the associated cell.
6131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
6231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    int cellX = -1;
6331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
6431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
6531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * Indicates the Y position of the associated cell.
6631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
6731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    int cellY = -1;
6831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
6931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
7031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * Indicates the X cell span.
7131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
7231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    int spanX = 1;
7331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
7431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
7531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * Indicates the Y cell span.
7631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
7731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    int spanY = 1;
7831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
7973b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy    /**
8073b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy     * Indicates whether the item is a gesture.
8173b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy     */
8273b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy    boolean isGesture = false;
8373b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy
8431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    ItemInfo() {
8531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
8631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
8731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    ItemInfo(ItemInfo info) {
8831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        id = info.id;
8931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        cellX = info.cellX;
9031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        cellY = info.cellY;
9131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        spanX = info.spanX;
9231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        spanY = info.spanY;
9331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        screen = info.screen;
9431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        itemType = info.itemType;
9531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        container = info.container;
9631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
9731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
9831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
9931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * Write the fields of this item to the DB
10031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     *
10131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * @param values
10231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
10331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    void onAddToDatabase(ContentValues values) {
10473b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy        values.put(LauncherSettings.BaseLauncherColumns.ITEM_TYPE, itemType);
10573b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy        if (!isGesture) {
10673b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy            values.put(LauncherSettings.Favorites.CONTAINER, container);
10773b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy            values.put(LauncherSettings.Favorites.SCREEN, screen);
10873b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy            values.put(LauncherSettings.Favorites.CELLX, cellX);
10973b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy            values.put(LauncherSettings.Favorites.CELLY, cellY);
11073b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy            values.put(LauncherSettings.Favorites.SPANX, spanX);
11173b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy            values.put(LauncherSettings.Favorites.SPANY, spanY);
11273b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy        }
11331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
11431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
11531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    static void writeBitmap(ContentValues values, Bitmap bitmap) {
11631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        if (bitmap != null) {
11731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            // Try go guesstimate how much space the icon will take when serialized
11831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            // to avoid unnecessary allocations/copies during the write.
11931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            int size = bitmap.getWidth() * bitmap.getHeight() * 4;
12031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            ByteArrayOutputStream out = new ByteArrayOutputStream(size);
12131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            try {
12231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
12331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                out.flush();
12431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                out.close();
12531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
12631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                values.put(LauncherSettings.Favorites.ICON, out.toByteArray());
12731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            } catch (IOException e) {
12831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                Log.w("Favorite", "Could not write icon");
12931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            }
13031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        }
13131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
13231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
13331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project}
134