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