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
17325dc23624160689e59fbac708cf6f222b20d025Daniel Sandlerpackage com.android.launcher3;
1831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
191bce7fd342875be8f7c1f82c8cf21d0199c8d544Tony Wickhamimport android.content.ComponentName;
2031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.content.ContentValues;
21be365165ed00205265c1876c4829fa9ac630da2aWinson Chungimport android.content.Intent;
227c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyalimport android.os.Process;
237c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyalimport android.os.UserHandle;
2431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
2532f3dda80240e707ad4467b6b65fb589f539c58eSunny Goyalimport com.android.launcher3.util.ContentWriter;
26ed13187a745866483139e2878037e1f8427ce567Kenny Guy
2731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project/**
2831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Represents an item in the launcher.
2931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */
3072fbec17e09a1120971621587d5005f683baafd1Mathew Inwoodpublic class ItemInfo {
31ed13187a745866483139e2878037e1f8427ce567Kenny Guy
323f471440a8b6b71d4c15501a96befd3b715c9e8fHyunyoung Song    public static final int NO_ID = -1;
33aa8ef119f18864f4ab41c12f9c2ad6d7f643a0a9Sunny Goyal
3431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
3531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * The id in the settings database for this item
3631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
37e3e646e1f05caa2b500cc3deecc3a31457c83302Anjali Koppal    public long id = NO_ID;
38aa8ef119f18864f4ab41c12f9c2ad6d7f643a0a9Sunny Goyal
3931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
4031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * One of {@link LauncherSettings.Favorites#ITEM_TYPE_APPLICATION},
4131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * {@link LauncherSettings.Favorites#ITEM_TYPE_SHORTCUT},
4286160f5d5b56cec18871f8ef95aabbbee41d05f9Hyunyoung Song     * {@link LauncherSettings.Favorites#ITEM_TYPE_DEEP_SHORTCUT}
4386160f5d5b56cec18871f8ef95aabbbee41d05f9Hyunyoung Song     * {@link LauncherSettings.Favorites#ITEM_TYPE_FOLDER},
4486160f5d5b56cec18871f8ef95aabbbee41d05f9Hyunyoung Song     * {@link LauncherSettings.Favorites#ITEM_TYPE_APPWIDGET} or
4586160f5d5b56cec18871f8ef95aabbbee41d05f9Hyunyoung Song     * {@link LauncherSettings.Favorites#ITEM_TYPE_CUSTOM_APPWIDGET}.
4631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
47e3e646e1f05caa2b500cc3deecc3a31457c83302Anjali Koppal    public int itemType;
48aa8ef119f18864f4ab41c12f9c2ad6d7f643a0a9Sunny Goyal
4931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
50aa8ef119f18864f4ab41c12f9c2ad6d7f643a0a9Sunny Goyal     * The id of the container that holds this item. For the desktop, this will be
5131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * {@link LauncherSettings.Favorites#CONTAINER_DESKTOP}. For the all applications folder it
5231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * will be {@link #NO_ID} (since it is not stored in the settings DB). For user folders
5331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * it will be the id of the folder.
5431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
55e3e646e1f05caa2b500cc3deecc3a31457c83302Anjali Koppal    public long container = NO_ID;
56aa8ef119f18864f4ab41c12f9c2ad6d7f643a0a9Sunny Goyal
5731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
5886160f5d5b56cec18871f8ef95aabbbee41d05f9Hyunyoung Song     * Indicates the screen in which the shortcut appears if the container types is
5986160f5d5b56cec18871f8ef95aabbbee41d05f9Hyunyoung Song     * {@link LauncherSettings.Favorites#CONTAINER_DESKTOP}. (i.e., ignore if the container type is
6086160f5d5b56cec18871f8ef95aabbbee41d05f9Hyunyoung Song     * {@link LauncherSettings.Favorites#CONTAINER_HOTSEAT})
6131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
62e3e646e1f05caa2b500cc3deecc3a31457c83302Anjali Koppal    public long screenId = -1;
63aa8ef119f18864f4ab41c12f9c2ad6d7f643a0a9Sunny Goyal
6431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
6531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * Indicates the X position of the associated cell.
6631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
67e3e646e1f05caa2b500cc3deecc3a31457c83302Anjali Koppal    public int cellX = -1;
6831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
6931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
7031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * Indicates the Y position of the associated cell.
7131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
72e3e646e1f05caa2b500cc3deecc3a31457c83302Anjali Koppal    public int cellY = -1;
7331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
7431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
7531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * Indicates the X cell span.
7631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
77e3e646e1f05caa2b500cc3deecc3a31457c83302Anjali Koppal    public int spanX = 1;
7831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
7931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
8031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * Indicates the Y cell span.
8131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
823f471440a8b6b71d4c15501a96befd3b715c9e8fHyunyoung Song    public int spanY = 1;
8331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
8473b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy    /**
85d41fbf5680750e34335bba6b38298186c144a4b7Adam Cohen     * Indicates the minimum X cell span.
86d41fbf5680750e34335bba6b38298186c144a4b7Adam Cohen     */
87e3e646e1f05caa2b500cc3deecc3a31457c83302Anjali Koppal    public int minSpanX = 1;
88d41fbf5680750e34335bba6b38298186c144a4b7Adam Cohen
89d41fbf5680750e34335bba6b38298186c144a4b7Adam Cohen    /**
90d41fbf5680750e34335bba6b38298186c144a4b7Adam Cohen     * Indicates the minimum Y cell span.
91d41fbf5680750e34335bba6b38298186c144a4b7Adam Cohen     */
92e3e646e1f05caa2b500cc3deecc3a31457c83302Anjali Koppal    public int minSpanY = 1;
93487f7dd3059621527eb439d7d51d34e00293f9b1Adam Cohen
94487f7dd3059621527eb439d7d51d34e00293f9b1Adam Cohen    /**
9508f7261d11a53ae4b330ad4fa897b8519de3d750Sunny Goyal     * Indicates the position in an ordered list.
9608f7261d11a53ae4b330ad4fa897b8519de3d750Sunny Goyal     */
9708f7261d11a53ae4b330ad4fa897b8519de3d750Sunny Goyal    public int rank = 0;
9808f7261d11a53ae4b330ad4fa897b8519de3d750Sunny Goyal
9908f7261d11a53ae4b330ad4fa897b8519de3d750Sunny Goyal    /**
100487f7dd3059621527eb439d7d51d34e00293f9b1Adam Cohen     * Title of the item
10173b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy     */
1023f471440a8b6b71d4c15501a96befd3b715c9e8fHyunyoung Song    public CharSequence title;
10373b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy
104bbaa75c8c432c46c00ee2eb836e438b3774d6709Patrick Dubroy    /**
105c2bd8101b8e26b9ebb2c079ae6867229dad3f196Kenny Guy     * Content description of the item.
106c2bd8101b8e26b9ebb2c079ae6867229dad3f196Kenny Guy     */
1073f471440a8b6b71d4c15501a96befd3b715c9e8fHyunyoung Song    public CharSequence contentDescription;
108c2bd8101b8e26b9ebb2c079ae6867229dad3f196Kenny Guy
1097c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal    public UserHandle user;
110ed13187a745866483139e2878037e1f8427ce567Kenny Guy
1113f471440a8b6b71d4c15501a96befd3b715c9e8fHyunyoung Song    public ItemInfo() {
1127c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal        user = Process.myUserHandle();
11331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
11431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
115c9d95c5897fc5ebbf53903d4ab18ad13d196f643Michael Jurka    ItemInfo(ItemInfo info) {
116ff572277112ec3d6a6a8c1be274d6fa1019e3648Sunny Goyal        copyFrom(info);
117ff572277112ec3d6a6a8c1be274d6fa1019e3648Sunny Goyal        // tempdebug:
118ff572277112ec3d6a6a8c1be274d6fa1019e3648Sunny Goyal        LauncherModel.checkItemInfo(this);
119ff572277112ec3d6a6a8c1be274d6fa1019e3648Sunny Goyal    }
120ff572277112ec3d6a6a8c1be274d6fa1019e3648Sunny Goyal
121ff572277112ec3d6a6a8c1be274d6fa1019e3648Sunny Goyal    public void copyFrom(ItemInfo info) {
12231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        id = info.id;
12331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        cellX = info.cellX;
12431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        cellY = info.cellY;
12531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        spanX = info.spanX;
12631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        spanY = info.spanY;
12708f7261d11a53ae4b330ad4fa897b8519de3d750Sunny Goyal        rank = info.rank;
128dcd297f05a866e07090d6e2af8fb4b15f28cb555Adam Cohen        screenId = info.screenId;
12931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        itemType = info.itemType;
13031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        container = info.container;
131ed13187a745866483139e2878037e1f8427ce567Kenny Guy        user = info.user;
132c2bd8101b8e26b9ebb2c079ae6867229dad3f196Kenny Guy        contentDescription = info.contentDescription;
13331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
13431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
135e3e646e1f05caa2b500cc3deecc3a31457c83302Anjali Koppal    public Intent getIntent() {
136d6c8e7eeb13094ea1349897663ae28d8a3bf2773Vadim Tryshev        return null;
137997a92348a6d6e061737399321393449c16cd4d8Winson Chung    }
138997a92348a6d6e061737399321393449c16cd4d8Winson Chung
1391bce7fd342875be8f7c1f82c8cf21d0199c8d544Tony Wickham    public ComponentName getTargetComponent() {
14034ab6df4355d8b82b9ed021664d56a39f3a9b860Sunny Goyal        Intent intent = getIntent();
1418ff9e1d6790d64eb5f8ad9e9721e607978b50583Mario Bertschler        if (intent != null) {
1428ff9e1d6790d64eb5f8ad9e9721e607978b50583Mario Bertschler            return intent.getComponent();
1438ff9e1d6790d64eb5f8ad9e9721e607978b50583Mario Bertschler        } else {
14434ab6df4355d8b82b9ed021664d56a39f3a9b860Sunny Goyal            return null;
14534ab6df4355d8b82b9ed021664d56a39f3a9b860Sunny Goyal        }
1461bce7fd342875be8f7c1f82c8cf21d0199c8d544Tony Wickham    }
1471bce7fd342875be8f7c1f82c8cf21d0199c8d544Tony Wickham
14832f3dda80240e707ad4467b6b65fb589f539c58eSunny Goyal    public void writeToValues(ContentWriter writer) {
14932f3dda80240e707ad4467b6b65fb589f539c58eSunny Goyal        writer.put(LauncherSettings.Favorites.ITEM_TYPE, itemType)
15032f3dda80240e707ad4467b6b65fb589f539c58eSunny Goyal                .put(LauncherSettings.Favorites.CONTAINER, container)
15132f3dda80240e707ad4467b6b65fb589f539c58eSunny Goyal                .put(LauncherSettings.Favorites.SCREEN, screenId)
15232f3dda80240e707ad4467b6b65fb589f539c58eSunny Goyal                .put(LauncherSettings.Favorites.CELLX, cellX)
15332f3dda80240e707ad4467b6b65fb589f539c58eSunny Goyal                .put(LauncherSettings.Favorites.CELLY, cellY)
15432f3dda80240e707ad4467b6b65fb589f539c58eSunny Goyal                .put(LauncherSettings.Favorites.SPANX, spanX)
15532f3dda80240e707ad4467b6b65fb589f539c58eSunny Goyal                .put(LauncherSettings.Favorites.SPANY, spanY)
15632f3dda80240e707ad4467b6b65fb589f539c58eSunny Goyal                .put(LauncherSettings.Favorites.RANK, rank);
157756cd26592dee6b956becdc24d60995c64de9153Sunny Goyal    }
158756cd26592dee6b956becdc24d60995c64de9153Sunny Goyal
159756cd26592dee6b956becdc24d60995c64de9153Sunny Goyal    public void readFromValues(ContentValues values) {
160756cd26592dee6b956becdc24d60995c64de9153Sunny Goyal        itemType = values.getAsInteger(LauncherSettings.Favorites.ITEM_TYPE);
161756cd26592dee6b956becdc24d60995c64de9153Sunny Goyal        container = values.getAsLong(LauncherSettings.Favorites.CONTAINER);
162756cd26592dee6b956becdc24d60995c64de9153Sunny Goyal        screenId = values.getAsLong(LauncherSettings.Favorites.SCREEN);
163de51d1d1af595849d3318871134be8dc0f0a34fdSunny Goyal        cellX = values.getAsInteger(LauncherSettings.Favorites.CELLX);
164de51d1d1af595849d3318871134be8dc0f0a34fdSunny Goyal        cellY = values.getAsInteger(LauncherSettings.Favorites.CELLY);
165de51d1d1af595849d3318871134be8dc0f0a34fdSunny Goyal        spanX = values.getAsInteger(LauncherSettings.Favorites.SPANX);
166de51d1d1af595849d3318871134be8dc0f0a34fdSunny Goyal        spanY = values.getAsInteger(LauncherSettings.Favorites.SPANY);
167de51d1d1af595849d3318871134be8dc0f0a34fdSunny Goyal        rank = values.getAsInteger(LauncherSettings.Favorites.RANK);
168756cd26592dee6b956becdc24d60995c64de9153Sunny Goyal    }
169756cd26592dee6b956becdc24d60995c64de9153Sunny Goyal
170756cd26592dee6b956becdc24d60995c64de9153Sunny Goyal    /**
171756cd26592dee6b956becdc24d60995c64de9153Sunny Goyal     * Write the fields of this item to the DB
172756cd26592dee6b956becdc24d60995c64de9153Sunny Goyal     */
173658058b960ef029fc70f0f3e131057a6ba0d10e2Sunny Goyal    public void onAddToDatabase(ContentWriter writer) {
1748f3f6830f2693647034e8df974d67f6b50d01602Adrian Roos        if (screenId == Workspace.EXTRA_EMPTY_SCREEN_ID) {
1758f3f6830f2693647034e8df974d67f6b50d01602Adrian Roos            // We should never persist an item on the extra empty screen.
1768f3f6830f2693647034e8df974d67f6b50d01602Adrian Roos            throw new RuntimeException("Screen id should not be EXTRA_EMPTY_SCREEN_ID");
1778f3f6830f2693647034e8df974d67f6b50d01602Adrian Roos        }
17831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
17932f3dda80240e707ad4467b6b65fb589f539c58eSunny Goyal        writeToValues(writer);
18032f3dda80240e707ad4467b6b65fb589f539c58eSunny Goyal        writer.put(LauncherSettings.Favorites.PROFILE_ID, user);
18131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
1824eac29a80b9a73465c8de54f1caec2a8098a73c6Adam Cohen
1838802e960495e61803c18ea3dda2e30ef0a611d8fDaniel Sandler    @Override
1841edab71d010f3efdde212b96aa1a44ab7a5b4ee5Sunny Goyal    public final String toString() {
1851edab71d010f3efdde212b96aa1a44ab7a5b4ee5Sunny Goyal        return getClass().getSimpleName() + "(" + dumpProperties() + ")";
1861edab71d010f3efdde212b96aa1a44ab7a5b4ee5Sunny Goyal    }
1871edab71d010f3efdde212b96aa1a44ab7a5b4ee5Sunny Goyal
1881edab71d010f3efdde212b96aa1a44ab7a5b4ee5Sunny Goyal    protected String dumpProperties() {
1891edab71d010f3efdde212b96aa1a44ab7a5b4ee5Sunny Goyal        return "id=" + id
19086160f5d5b56cec18871f8ef95aabbbee41d05f9Hyunyoung Song                + " type=" + LauncherSettings.Favorites.itemTypeToString(itemType)
19186160f5d5b56cec18871f8ef95aabbbee41d05f9Hyunyoung Song                + " container=" + LauncherSettings.Favorites.containerToString((int)container)
1921edab71d010f3efdde212b96aa1a44ab7a5b4ee5Sunny Goyal                + " screen=" + screenId
19386160f5d5b56cec18871f8ef95aabbbee41d05f9Hyunyoung Song                + " cell(" + cellX + "," + cellY + ")"
19486160f5d5b56cec18871f8ef95aabbbee41d05f9Hyunyoung Song                + " span(" + spanX + "," + spanY + ")"
19586160f5d5b56cec18871f8ef95aabbbee41d05f9Hyunyoung Song                + " minSpan(" + minSpanX + "," + minSpanY + ")"
1961edab71d010f3efdde212b96aa1a44ab7a5b4ee5Sunny Goyal                + " rank=" + rank
1971edab71d010f3efdde212b96aa1a44ab7a5b4ee5Sunny Goyal                + " user=" + user
1981edab71d010f3efdde212b96aa1a44ab7a5b4ee5Sunny Goyal                + " title=" + title;
1998802e960495e61803c18ea3dda2e30ef0a611d8fDaniel Sandler    }
20044cba696386b44f9115cad13ec9ecf67a0ac9119Kenny Guy
20144cba696386b44f9115cad13ec9ecf67a0ac9119Kenny Guy    /**
20244cba696386b44f9115cad13ec9ecf67a0ac9119Kenny Guy     * Whether this item is disabled.
20344cba696386b44f9115cad13ec9ecf67a0ac9119Kenny Guy     */
20444cba696386b44f9115cad13ec9ecf67a0ac9119Kenny Guy    public boolean isDisabled() {
20544cba696386b44f9115cad13ec9ecf67a0ac9119Kenny Guy        return false;
20644cba696386b44f9115cad13ec9ecf67a0ac9119Kenny Guy    }
20731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project}
208