ItemInfo.java revision 7376faefbbcbe30cc4e3f706ab95c254a4707d98
101f0ed4126be412c8c4352026dad3b2a49832267Michael Jurka/*
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
1731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectpackage com.android.launcher;
18325dc23624160689e59fbac708cf6f222b20d025Daniel Sandler
1931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport java.io.ByteArrayOutputStream;
20974c3864bb438fc924913e0017385f873332d052Michael Jurkaimport java.io.IOException;
21974c3864bb438fc924913e0017385f873332d052Michael Jurka
22dd6c992943a139ce277768b5715e276cfa974f91Gilles Debunneimport android.content.ContentValues;
238edd75c8bb0729a10cb39f614183e3e9ae4288e8Michael Jurkaimport android.graphics.Bitmap;
24dd6c992943a139ce277768b5715e276cfa974f91Gilles Debunneimport android.util.Log;
252801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen
262801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen/**
27dd6c992943a139ce277768b5715e276cfa974f91Gilles Debunne * Represents an item in the launcher.
287044272f180d34ab29866f6c59ee75376e8a1df5Winson Chung */
29946ad470c72a3caa7568d11836c182b7f84d840dMichael Jurkaclass ItemInfo {
302a9e228e6fd719732639beb880d6df64d48158a1Brett Chabot
31c7450e3ebd7672fcd7b9d51a8c1e68f63c5ce86bWinson Chung    static final int NO_ID = -1;
3231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
330cf2a7c3eeb75cbd532b011524140a4b963f2c93Adam Cohen    /**
34af44209bfa60da3c7ab49b7f508f9effd316ee41Michael Jurka     * The id in the settings database for this item
35af44209bfa60da3c7ab49b7f508f9effd316ee41Michael Jurka     */
3631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    long id = NO_ID;
372ca0ae7d7c4d5f6b24a1b3d987813cad9ee4197fJoe Onorato
38e326f186af6b00e4ea32849f1527254c669d0600Michael Jurka    /**
39c9b1877f9acf604897c719d70dc99685d10849b5Daniel Sandler     * One of {@link LauncherSettings.Favorites#ITEM_TYPE_APPLICATION},
401e2efc8a6d355bb6c0fc75261eb819e250ddb8fbJeff Sharkey     * {@link LauncherSettings.Favorites#ITEM_TYPE_SHORTCUT},
4131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * {@link LauncherSettings.Favorites#ITEM_TYPE_USER_FOLDER}, or
4231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * {@link LauncherSettings.Favorites#ITEM_TYPE_APPWIDGET}.
43f0ea4d3378be7b962c8e0bce2392df5e82491fb8Winson Chung     */
4482f5553a137f0a25f7333a6fc9507c847b7a42edWinson Chung    int itemType;
45aafa03cbb925c74be1c13f8bb99d928be429e62fWinson Chung
4631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
47716b51e030f9c6ed34af2b947760e46a280c65a6Adam Cohen     * The id of the container that holds this item. For the desktop, this will be
4885f418d0f5607c66efef1673075a6d3486e5af83Bjorn Bringert     * {@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
50138a04170d964da9cdec228e95b976875ae52481Karl Rosaen     * it will be the id of the folder.
511e2efc8a6d355bb6c0fc75261eb819e250ddb8fbJeff Sharkey     */
52268c4751b547e1470a94030af73a4e7bb8ea221eAdam Cohen    long container = NO_ID;
53268c4751b547e1470a94030af73a4e7bb8ea221eAdam Cohen
545f8afe6280eae34620067696173e71943e1a30a3Winson Chung    /**
55268c4751b547e1470a94030af73a4e7bb8ea221eAdam Cohen     * Iindicates the screen in which the shortcut appears.
56af44209bfa60da3c7ab49b7f508f9effd316ee41Michael Jurka     */
57af44209bfa60da3c7ab49b7f508f9effd316ee41Michael Jurka    int screen = -1;
58c9b1877f9acf604897c719d70dc99685d10849b5Daniel Sandler
59319226a894f5f0b94ca94e64f976a043e3873a40Brad Fitzpatrick    /**
6031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * Indicates the X position of the associated cell.
610fbe7bc14edda0e42d700956f5a3fbd72ed44c49Christian Mehlmauer     */
621e2efc8a6d355bb6c0fc75261eb819e250ddb8fbJeff Sharkey    int cellX = -1;
63ded9f8d8658d0b6601006c0a954cd3bf530e55c1Adam Cohen
64a2413751e3a698aef9c87411a639637883856939Winson Chung    /**
65843e860e8ebab96ff70988f2829fac38afd9d937Daniel Sandler     * Indicates the Y position of the associated cell.
664ed6278e518cc6894cb150b606382e8e6a012599Patrick Dubroy     */
676d7fe506fcfbc7bd6810ec8dd48c214e856aa87aAmith Yamasani    int cellY = -1;
6831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
6931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
70a33411cb83e2c7f822d6486183a7a4ea7d1b09e6Michael Jurka     * Indicates the X cell span.
7131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
72892c74d460ad98c6306420e1127c9aa3e505ba25Winson Chung    int spanX = 1;
737c312c15e33b6cffbda707429e88ade498fc9f5eJoe Onorato
7496d30a165185dc59617e181314f4d22634e22952Adam Cohen    /**
7596d30a165185dc59617e181314f4d22634e22952Adam Cohen     * Indicates the Y cell span.
7696d30a165185dc59617e181314f4d22634e22952Adam Cohen     */
7796d30a165185dc59617e181314f4d22634e22952Adam Cohen    int spanY = 1;
7896d30a165185dc59617e181314f4d22634e22952Adam Cohen
7996d30a165185dc59617e181314f4d22634e22952Adam Cohen    ItemInfo() {
8096d30a165185dc59617e181314f4d22634e22952Adam Cohen    }
8196d30a165185dc59617e181314f4d22634e22952Adam Cohen
8296d30a165185dc59617e181314f4d22634e22952Adam Cohen    ItemInfo(ItemInfo info) {
83f358a4bbd6ce5b6ddadfae19e6b9c6872530d627Adam Cohen        id = info.id;
840cf2a7c3eeb75cbd532b011524140a4b963f2c93Adam Cohen        cellX = info.cellX;
8596d30a165185dc59617e181314f4d22634e22952Adam Cohen        cellY = info.cellY;
8696d30a165185dc59617e181314f4d22634e22952Adam Cohen        spanX = info.spanX;
872a4b1a809c6bc0af9ae3ad974fe50e2a91569543Michael Jurka        spanY = info.spanY;
8896d30a165185dc59617e181314f4d22634e22952Adam Cohen        screen = info.screen;
89815ba2d2eabded5ffee53fba668d63ca9173e6fdSvetoslav Ganov        itemType = info.itemType;
900d9cbae4dd6603870d1cd26c9a7b547b5eea6b0cCasey Burkhardt        container = info.container;
91cff6af81d721415785bddc2efd74e179d2def9daAdam Cohen    }
92f16e571330f030e445c4f7f63f55d093337ffd87Adam Cohen
9331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
9496d30a165185dc59617e181314f4d22634e22952Adam Cohen     * Write the fields of this item to the DB
9596d30a165185dc59617e181314f4d22634e22952Adam Cohen     *
9696d30a165185dc59617e181314f4d22634e22952Adam Cohen     * @param values
9796d30a165185dc59617e181314f4d22634e22952Adam Cohen     */
9896d30a165185dc59617e181314f4d22634e22952Adam Cohen    void onAddToDatabase(ContentValues values) {
994ed6278e518cc6894cb150b606382e8e6a012599Patrick Dubroy        values.put(LauncherSettings.Favorites.ITEM_TYPE, itemType);
100325dc23624160689e59fbac708cf6f222b20d025Daniel Sandler        values.put(LauncherSettings.Favorites.CONTAINER, container);
101edcce099c98a6c40d10109ac092ab50f9d2668f3Romain Guy        values.put(LauncherSettings.Favorites.SCREEN, screen);
102c0dcf597084d00e4c23a7fea5fd0738f6c095a6bAdam Cohen        values.put(LauncherSettings.Favorites.CELLX, cellX);
103c0dcf597084d00e4c23a7fea5fd0738f6c095a6bAdam Cohen        values.put(LauncherSettings.Favorites.CELLY, cellY);
1044caf298a2c9d861d69f5a47b747ada911b125b6dAdam Cohen        values.put(LauncherSettings.Favorites.SPANX, spanX);
10516d7ffc5d55cc69ddd5a7854f138b2d8cc0a7635Adam Cohen        values.put(LauncherSettings.Favorites.SPANY, spanY);
106c0dcf597084d00e4c23a7fea5fd0738f6c095a6bAdam Cohen    }
1074caf298a2c9d861d69f5a47b747ada911b125b6dAdam Cohen
108c0dcf597084d00e4c23a7fea5fd0738f6c095a6bAdam Cohen    static void writeBitmap(ContentValues values, Bitmap bitmap) {
10916d7ffc5d55cc69ddd5a7854f138b2d8cc0a7635Adam Cohen        if (bitmap != null) {
1104caf298a2c9d861d69f5a47b747ada911b125b6dAdam Cohen            // Try go guesstimate how much space the icon will take when serialized
111c0dcf597084d00e4c23a7fea5fd0738f6c095a6bAdam Cohen            // to avoid unnecessary allocations/copies during the write.
112f0c6ae0e35d3e020db55b5b826955da66b14b7f6Winson Chung            int size = bitmap.getWidth() * bitmap.getHeight() * 4;
1134caf298a2c9d861d69f5a47b747ada911b125b6dAdam Cohen            ByteArrayOutputStream out = new ByteArrayOutputStream(size);
114c0dcf597084d00e4c23a7fea5fd0738f6c095a6bAdam Cohen            try {
115d7c28056d3fc462f42b508026154d6d8fee5606bMichael Jurka                bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
116c0dcf597084d00e4c23a7fea5fd0738f6c095a6bAdam Cohen                out.flush();
11731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                out.close();
11831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
11931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                values.put(LauncherSettings.Favorites.ICON, out.toByteArray());
120c459e5241ea0c53dd53c16e73fd7a187701f537bBjorn Bringert            } catch (IOException e) {
1210e26059548e429e5d1c973bebe4c561bead2926fMichael Jurka                Log.w("Favorite", "Could not write icon");
122cd81073eac537e9f85eeee14588d513ea8a56e17Winson Chung            }
123a30ce8e6b25e41f392a41fd4d0d3e0a424a84dadJoe Onorato        }
124cc67f476c01ee6a7d593fa67f80392c6793432d7Joe Onorato    }
12531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
126f061f82461b8afe0c62eecb776e807c14bc0a4aaDaniel Sandler}
127843e860e8ebab96ff70988f2829fac38afd9d937Daniel Sandler