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