• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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