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.ContentResolver; 20 import android.database.sqlite.SQLiteDatabase; 21 import android.net.Uri; 22 import android.os.Bundle; 23 import android.provider.BaseColumns; 24 25 /** 26 * Settings related utilities. 27 */ 28 public class LauncherSettings { 29 30 /** 31 * Favorites. 32 */ 33 public static final class Favorites implements BaseColumns { 34 /** 35 * The time of the last update to this row. 36 * <P>Type: INTEGER</P> 37 */ 38 public static final String MODIFIED = "modified"; 39 40 /** 41 * Descriptive name of the gesture that can be displayed to the user. 42 * <P>Type: TEXT</P> 43 */ 44 public static final String TITLE = "title"; 45 46 /** 47 * The Intent URL of the gesture, describing what it points to. This 48 * value is given to {@link android.content.Intent#parseUri(String, int)} to create 49 * an Intent that can be launched. 50 * <P>Type: TEXT</P> 51 */ 52 public static final String INTENT = "intent"; 53 54 /** 55 * The type of the gesture 56 * 57 * <P>Type: INTEGER</P> 58 */ 59 public static final String ITEM_TYPE = "itemType"; 60 61 /** 62 * The gesture is an application 63 */ 64 public static final int ITEM_TYPE_APPLICATION = 0; 65 66 /** 67 * The gesture is an application created shortcut 68 */ 69 public static final int ITEM_TYPE_SHORTCUT = 1; 70 71 /** 72 * The icon package name in Intent.ShortcutIconResource 73 * <P>Type: TEXT</P> 74 */ 75 public static final String ICON_PACKAGE = "iconPackage"; 76 77 /** 78 * The icon resource name in Intent.ShortcutIconResource 79 * <P>Type: TEXT</P> 80 */ 81 public static final String ICON_RESOURCE = "iconResource"; 82 83 /** 84 * The custom icon bitmap. 85 * <P>Type: BLOB</P> 86 */ 87 public static final String ICON = "icon"; 88 89 public static final String TABLE_NAME = "favorites"; 90 91 /** 92 * Backup table created when when the favorites table is modified during grid migration 93 */ 94 public static final String BACKUP_TABLE_NAME = "favorites_bakup"; 95 96 /** 97 * The content:// style URL for this table 98 */ 99 public static final Uri CONTENT_URI = Uri.parse("content://" + 100 LauncherProvider.AUTHORITY + "/" + TABLE_NAME); 101 102 /** 103 * The content:// style URL for a given row, identified by its id. 104 * 105 * @param id The row id. 106 * 107 * @return The unique content URL for the specified row. 108 */ getContentUri(int id)109 public static Uri getContentUri(int id) { 110 return Uri.parse("content://" + LauncherProvider.AUTHORITY + 111 "/" + TABLE_NAME + "/" + id); 112 } 113 114 /** 115 * The container holding the favorite 116 * <P>Type: INTEGER</P> 117 */ 118 public static final String CONTAINER = "container"; 119 120 /** 121 * The icon is a resource identified by a package name and an integer id. 122 */ 123 public static final int CONTAINER_DESKTOP = -100; 124 public static final int CONTAINER_HOTSEAT = -101; 125 containerToString(int container)126 static final String containerToString(int container) { 127 switch (container) { 128 case CONTAINER_DESKTOP: return "desktop"; 129 case CONTAINER_HOTSEAT: return "hotseat"; 130 default: return String.valueOf(container); 131 } 132 } 133 itemTypeToString(int type)134 static final String itemTypeToString(int type) { 135 switch(type) { 136 case ITEM_TYPE_APPLICATION: return "APP"; 137 case ITEM_TYPE_SHORTCUT: return "SHORTCUT"; 138 case ITEM_TYPE_FOLDER: return "FOLDER"; 139 case ITEM_TYPE_APPWIDGET: return "WIDGET"; 140 case ITEM_TYPE_CUSTOM_APPWIDGET: return "CUSTOMWIDGET"; 141 case ITEM_TYPE_DEEP_SHORTCUT: return "DEEPSHORTCUT"; 142 default: return String.valueOf(type); 143 } 144 } 145 146 /** 147 * The screen holding the favorite (if container is CONTAINER_DESKTOP) 148 * <P>Type: INTEGER</P> 149 */ 150 public static final String SCREEN = "screen"; 151 152 /** 153 * The X coordinate of the cell holding the favorite 154 * (if container is CONTAINER_HOTSEAT or CONTAINER_HOTSEAT) 155 * <P>Type: INTEGER</P> 156 */ 157 public static final String CELLX = "cellX"; 158 159 /** 160 * The Y coordinate of the cell holding the favorite 161 * (if container is CONTAINER_DESKTOP) 162 * <P>Type: INTEGER</P> 163 */ 164 public static final String CELLY = "cellY"; 165 166 /** 167 * The X span of the cell holding the favorite 168 * <P>Type: INTEGER</P> 169 */ 170 public static final String SPANX = "spanX"; 171 172 /** 173 * The Y span of the cell holding the favorite 174 * <P>Type: INTEGER</P> 175 */ 176 public static final String SPANY = "spanY"; 177 178 /** 179 * The profile id of the item in the cell. 180 * <P> 181 * Type: INTEGER 182 * </P> 183 */ 184 public static final String PROFILE_ID = "profileId"; 185 186 /** 187 * The favorite is a user created folder 188 */ 189 public static final int ITEM_TYPE_FOLDER = 2; 190 191 /** 192 * The favorite is a widget 193 */ 194 public static final int ITEM_TYPE_APPWIDGET = 4; 195 196 /** 197 * The favorite is a custom widget provided by the launcher 198 */ 199 public static final int ITEM_TYPE_CUSTOM_APPWIDGET = 5; 200 201 /** 202 * The gesture is an application created deep shortcut 203 */ 204 public static final int ITEM_TYPE_DEEP_SHORTCUT = 6; 205 206 /** 207 * The appWidgetId of the widget 208 * 209 * <P>Type: INTEGER</P> 210 */ 211 public static final String APPWIDGET_ID = "appWidgetId"; 212 213 /** 214 * The ComponentName of the widget provider 215 * 216 * <P>Type: STRING</P> 217 */ 218 public static final String APPWIDGET_PROVIDER = "appWidgetProvider"; 219 220 /** 221 * Boolean indicating that his item was restored and not yet successfully bound. 222 * <P>Type: INTEGER</P> 223 */ 224 public static final String RESTORED = "restored"; 225 226 /** 227 * Indicates the position of the item inside an auto-arranged view like folder or hotseat. 228 * <p>Type: INTEGER</p> 229 */ 230 public static final String RANK = "rank"; 231 232 /** 233 * Stores general flag based options for {@link ItemInfo}s. 234 * <p>Type: INTEGER</p> 235 */ 236 public static final String OPTIONS = "options"; 237 addTableToDb(SQLiteDatabase db, long myProfileId, boolean optional)238 public static void addTableToDb(SQLiteDatabase db, long myProfileId, boolean optional) { 239 addTableToDb(db, myProfileId, optional, TABLE_NAME); 240 } 241 addTableToDb(SQLiteDatabase db, long myProfileId, boolean optional, String tableName)242 public static void addTableToDb(SQLiteDatabase db, long myProfileId, boolean optional, 243 String tableName) { 244 String ifNotExists = optional ? " IF NOT EXISTS " : ""; 245 db.execSQL("CREATE TABLE " + ifNotExists + tableName + " (" + 246 "_id INTEGER PRIMARY KEY," + 247 "title TEXT," + 248 "intent TEXT," + 249 "container INTEGER," + 250 "screen INTEGER," + 251 "cellX INTEGER," + 252 "cellY INTEGER," + 253 "spanX INTEGER," + 254 "spanY INTEGER," + 255 "itemType INTEGER," + 256 "appWidgetId INTEGER NOT NULL DEFAULT -1," + 257 "iconPackage TEXT," + 258 "iconResource TEXT," + 259 "icon BLOB," + 260 "appWidgetProvider TEXT," + 261 "modified INTEGER NOT NULL DEFAULT 0," + 262 "restored INTEGER NOT NULL DEFAULT 0," + 263 "profileId INTEGER DEFAULT " + myProfileId + "," + 264 "rank INTEGER NOT NULL DEFAULT 0," + 265 "options INTEGER NOT NULL DEFAULT 0" + 266 ");"); 267 } 268 } 269 270 /** 271 * Launcher settings 272 */ 273 public static final class Settings { 274 275 public static final Uri CONTENT_URI = Uri.parse("content://" + 276 LauncherProvider.AUTHORITY + "/settings"); 277 278 public static final String METHOD_CLEAR_EMPTY_DB_FLAG = "clear_empty_db_flag"; 279 public static final String METHOD_WAS_EMPTY_DB_CREATED = "get_empty_db_flag"; 280 281 public static final String METHOD_DELETE_EMPTY_FOLDERS = "delete_empty_folders"; 282 283 public static final String METHOD_NEW_ITEM_ID = "generate_new_item_id"; 284 public static final String METHOD_NEW_SCREEN_ID = "generate_new_screen_id"; 285 286 public static final String METHOD_CREATE_EMPTY_DB = "create_empty_db"; 287 288 public static final String METHOD_LOAD_DEFAULT_FAVORITES = "load_default_favorites"; 289 290 public static final String METHOD_REMOVE_GHOST_WIDGETS = "remove_ghost_widgets"; 291 292 public static final String METHOD_NEW_TRANSACTION = "new_db_transaction"; 293 294 public static final String METHOD_REFRESH_BACKUP_TABLE = "refresh_backup_table"; 295 296 public static final String EXTRA_VALUE = "value"; 297 call(ContentResolver cr, String method)298 public static Bundle call(ContentResolver cr, String method) { 299 return cr.call(CONTENT_URI, method, null, null); 300 } 301 } 302 } 303