1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.launcher3; 18 19 import android.content.ComponentName; 20 import android.content.ContentValues; 21 import android.content.Context; 22 import android.content.Intent; 23 import android.graphics.Bitmap; 24 25 import com.android.launcher3.compat.UserHandleCompat; 26 import com.android.launcher3.compat.UserManagerCompat; 27 28 /** 29 * Represents an item in the launcher. 30 */ 31 public class ItemInfo { 32 33 /** 34 * Intent extra to store the profile. Format: UserHandle 35 */ 36 public static final String EXTRA_PROFILE = "profile"; 37 38 public static final int NO_ID = -1; 39 40 /** 41 * The id in the settings database for this item 42 */ 43 public long id = NO_ID; 44 45 /** 46 * One of {@link LauncherSettings.Favorites#ITEM_TYPE_APPLICATION}, 47 * {@link LauncherSettings.Favorites#ITEM_TYPE_SHORTCUT}, 48 * {@link LauncherSettings.Favorites#ITEM_TYPE_FOLDER}, or 49 * {@link LauncherSettings.Favorites#ITEM_TYPE_APPWIDGET}. 50 */ 51 public int itemType; 52 53 /** 54 * The id of the container that holds this item. For the desktop, this will be 55 * {@link LauncherSettings.Favorites#CONTAINER_DESKTOP}. For the all applications folder it 56 * will be {@link #NO_ID} (since it is not stored in the settings DB). For user folders 57 * it will be the id of the folder. 58 */ 59 public long container = NO_ID; 60 61 /** 62 * Iindicates the screen in which the shortcut appears. 63 */ 64 public long screenId = -1; 65 66 /** 67 * Indicates the X position of the associated cell. 68 */ 69 public int cellX = -1; 70 71 /** 72 * Indicates the Y position of the associated cell. 73 */ 74 public int cellY = -1; 75 76 /** 77 * Indicates the X cell span. 78 */ 79 public int spanX = 1; 80 81 /** 82 * Indicates the Y cell span. 83 */ 84 public int spanY = 1; 85 86 /** 87 * Indicates the minimum X cell span. 88 */ 89 public int minSpanX = 1; 90 91 /** 92 * Indicates the minimum Y cell span. 93 */ 94 public int minSpanY = 1; 95 96 /** 97 * Indicates the position in an ordered list. 98 */ 99 public int rank = 0; 100 101 /** 102 * Title of the item 103 */ 104 public CharSequence title; 105 106 /** 107 * Content description of the item. 108 */ 109 public CharSequence contentDescription; 110 111 public UserHandleCompat user; 112 113 public ItemInfo() { 114 user = UserHandleCompat.myUserHandle(); 115 } 116 117 ItemInfo(ItemInfo info) { 118 copyFrom(info); 119 // tempdebug: 120 LauncherModel.checkItemInfo(this); 121 } 122 123 public void copyFrom(ItemInfo info) { 124 id = info.id; 125 cellX = info.cellX; 126 cellY = info.cellY; 127 spanX = info.spanX; 128 spanY = info.spanY; 129 rank = info.rank; 130 screenId = info.screenId; 131 itemType = info.itemType; 132 container = info.container; 133 user = info.user; 134 contentDescription = info.contentDescription; 135 } 136 137 public Intent getIntent() { 138 return null; 139 } 140 141 public ComponentName getTargetComponent() { 142 return getIntent() == null ? null : getIntent().getComponent(); 143 } 144 145 public void writeToValues(ContentValues values) { 146 values.put(LauncherSettings.Favorites.ITEM_TYPE, itemType); 147 values.put(LauncherSettings.Favorites.CONTAINER, container); 148 values.put(LauncherSettings.Favorites.SCREEN, screenId); 149 values.put(LauncherSettings.Favorites.CELLX, cellX); 150 values.put(LauncherSettings.Favorites.CELLY, cellY); 151 values.put(LauncherSettings.Favorites.SPANX, spanX); 152 values.put(LauncherSettings.Favorites.SPANY, spanY); 153 values.put(LauncherSettings.Favorites.RANK, rank); 154 } 155 156 public void readFromValues(ContentValues values) { 157 itemType = values.getAsInteger(LauncherSettings.Favorites.ITEM_TYPE); 158 container = values.getAsLong(LauncherSettings.Favorites.CONTAINER); 159 screenId = values.getAsLong(LauncherSettings.Favorites.SCREEN); 160 cellX = values.getAsInteger(LauncherSettings.Favorites.CELLX); 161 cellY = values.getAsInteger(LauncherSettings.Favorites.CELLY); 162 spanX = values.getAsInteger(LauncherSettings.Favorites.SPANX); 163 spanY = values.getAsInteger(LauncherSettings.Favorites.SPANY); 164 rank = values.getAsInteger(LauncherSettings.Favorites.RANK); 165 } 166 167 /** 168 * Write the fields of this item to the DB 169 * 170 * @param context A context object to use for getting UserManagerCompat 171 * @param values 172 */ 173 void onAddToDatabase(Context context, ContentValues values) { 174 writeToValues(values); 175 long serialNumber = UserManagerCompat.getInstance(context).getSerialNumberForUser(user); 176 values.put(LauncherSettings.Favorites.PROFILE_ID, serialNumber); 177 178 if (screenId == Workspace.EXTRA_EMPTY_SCREEN_ID) { 179 // We should never persist an item on the extra empty screen. 180 throw new RuntimeException("Screen id should not be EXTRA_EMPTY_SCREEN_ID"); 181 } 182 } 183 184 static void writeBitmap(ContentValues values, Bitmap bitmap) { 185 if (bitmap != null) { 186 byte[] data = Utilities.flattenBitmap(bitmap); 187 values.put(LauncherSettings.Favorites.ICON, data); 188 } 189 } 190 191 @Override 192 public final String toString() { 193 return getClass().getSimpleName() + "(" + dumpProperties() + ")"; 194 } 195 196 protected String dumpProperties() { 197 return "id=" + id 198 + " type=" + itemType 199 + " container=" + container 200 + " screen=" + screenId 201 + " cellX=" + cellX 202 + " cellY=" + cellY 203 + " spanX=" + spanX 204 + " spanY=" + spanY 205 + " minSpanX=" + minSpanX 206 + " minSpanY=" + minSpanY 207 + " rank=" + rank 208 + " user=" + user 209 + " title=" + title; 210 } 211 212 /** 213 * Whether this item is disabled. 214 */ 215 public boolean isDisabled() { 216 return false; 217 } 218 } 219