Home | History | Annotate | Download | only in launcher2
      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.launcher2;
     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 
     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     static byte[] flattenBitmap(Bitmap bitmap) {
    116         // Try go guesstimate how much space the icon will take when serialized
    117         // to avoid unnecessary allocations/copies during the write.
    118         int size = bitmap.getWidth() * bitmap.getHeight() * 4;
    119         ByteArrayOutputStream out = new ByteArrayOutputStream(size);
    120         try {
    121             bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
    122             out.flush();
    123             out.close();
    124             return out.toByteArray();
    125         } catch (IOException e) {
    126             Log.w("Favorite", "Could not write icon");
    127             return null;
    128         }
    129     }
    130 
    131     static void writeBitmap(ContentValues values, Bitmap bitmap) {
    132         if (bitmap != null) {
    133             byte[] data = flattenBitmap(bitmap);
    134             values.put(LauncherSettings.Favorites.ICON, data);
    135         }
    136     }
    137 
    138     void unbind() {
    139     }
    140 
    141     @Override
    142     public String toString() {
    143         return "Item(id=" + this.id + " type=" + this.itemType + ")";
    144     }
    145 }
    146