ItemInfo.java revision aafa03cbb925c74be1c13f8bb99d928be429e62f
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 17package com.android.launcher2; 18 19import java.io.ByteArrayOutputStream; 20import java.io.IOException; 21 22import android.content.ContentValues; 23import android.graphics.Bitmap; 24import android.util.Log; 25 26/** 27 * Represents an item in the launcher. 28 */ 29class ItemInfo { 30 31 static final int NO_ID = -1; 32 33 /** 34 * The id in the settings database for this item 35 */ 36 long id = NO_ID; 37 38 /** 39 * One of {@link LauncherSettings.Favorites#ITEM_TYPE_APPLICATION}, 40 * {@link LauncherSettings.Favorites#ITEM_TYPE_SHORTCUT}, 41 * {@link LauncherSettings.Favorites#ITEM_TYPE_USER_FOLDER}, or 42 * {@link LauncherSettings.Favorites#ITEM_TYPE_APPWIDGET}. 43 */ 44 int itemType; 45 46 /** 47 * The id of the container that holds this item. For the desktop, this will be 48 * {@link LauncherSettings.Favorites#CONTAINER_DESKTOP}. For the all applications folder it 49 * will be {@link #NO_ID} (since it is not stored in the settings DB). For user folders 50 * it will be the id of the folder. 51 */ 52 long container = NO_ID; 53 54 /** 55 * Iindicates the screen in which the shortcut appears. 56 */ 57 int screen = -1; 58 59 /** 60 * Indicates the X position of the associated cell. 61 */ 62 int cellX = -1; 63 64 /** 65 * Indicates the Y position of the associated cell. 66 */ 67 int cellY = -1; 68 69 /** 70 * Indicates the X cell span. 71 */ 72 int spanX = 1; 73 74 /** 75 * Indicates the Y cell span. 76 */ 77 int spanY = 1; 78 79 /** 80 * Indicates whether the item is a gesture. 81 */ 82 boolean isGesture = false; 83 84 ItemInfo() { 85 } 86 87 ItemInfo(ItemInfo info) { 88 id = info.id; 89 cellX = info.cellX; 90 cellY = info.cellY; 91 spanX = info.spanX; 92 spanY = info.spanY; 93 screen = info.screen; 94 itemType = info.itemType; 95 container = info.container; 96 } 97 98 /** 99 * Write the fields of this item to the DB 100 * 101 * @param values 102 */ 103 void onAddToDatabase(ContentValues values) { 104 values.put(LauncherSettings.BaseLauncherColumns.ITEM_TYPE, itemType); 105 if (!isGesture) { 106 values.put(LauncherSettings.Favorites.CONTAINER, container); 107 values.put(LauncherSettings.Favorites.SCREEN, screen); 108 values.put(LauncherSettings.Favorites.CELLX, cellX); 109 values.put(LauncherSettings.Favorites.CELLY, cellY); 110 values.put(LauncherSettings.Favorites.SPANX, spanX); 111 values.put(LauncherSettings.Favorites.SPANY, spanY); 112 } 113 } 114 115 void updateValuesWithCoordinates(ContentValues values, int cellX, int cellY) { 116 values.put(LauncherSettings.Favorites.CELLX, cellX); 117 values.put(LauncherSettings.Favorites.CELLY, cellY); 118 } 119 120 static byte[] flattenBitmap(Bitmap bitmap) { 121 // Try go guesstimate how much space the icon will take when serialized 122 // to avoid unnecessary allocations/copies during the write. 123 int size = bitmap.getWidth() * bitmap.getHeight() * 4; 124 ByteArrayOutputStream out = new ByteArrayOutputStream(size); 125 try { 126 bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); 127 out.flush(); 128 out.close(); 129 return out.toByteArray(); 130 } catch (IOException e) { 131 Log.w("Favorite", "Could not write icon"); 132 return null; 133 } 134 } 135 136 static void writeBitmap(ContentValues values, Bitmap bitmap) { 137 if (bitmap != null) { 138 byte[] data = flattenBitmap(bitmap); 139 values.put(LauncherSettings.Favorites.ICON, data); 140 } 141 } 142 143 void unbind() { 144 } 145 146 @Override 147 public String toString() { 148 return "Item(id=" + this.id + " type=" + this.itemType + ")"; 149 } 150} 151