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.launcher; 18 19 import java.io.ByteArrayOutputStream; 20 import java.io.IOException; 21 22 import android.content.ContentValues; 23 import android.graphics.Bitmap; 24 import android.util.Log; 25 26 /** 27 * Represents an item in the launcher. 28 */ 29 class 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 ItemInfo()84 ItemInfo() { 85 } 86 ItemInfo(ItemInfo info)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 */ onAddToDatabase(ContentValues values)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 writeBitmap(ContentValues values, Bitmap bitmap)115 static void writeBitmap(ContentValues values, Bitmap bitmap) { 116 if (bitmap != null) { 117 // Try go guesstimate how much space the icon will take when serialized 118 // to avoid unnecessary allocations/copies during the write. 119 int size = bitmap.getWidth() * bitmap.getHeight() * 4; 120 ByteArrayOutputStream out = new ByteArrayOutputStream(size); 121 try { 122 bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); 123 out.flush(); 124 out.close(); 125 126 values.put(LauncherSettings.Favorites.ICON, out.toByteArray()); 127 } catch (IOException e) { 128 Log.w("Favorite", "Could not write icon"); 129 } 130 } 131 } 132 133 } 134