diff options
author | Adam Cohen <adamcohen@google.com> | 2014-10-14 08:55:28 -0700 |
---|---|---|
committer | Adam Cohen <adamcohen@google.com> | 2014-10-14 10:36:27 -0700 |
commit | eb1ac42fd479cfd9b8e58220173c8bea5c69b649 (patch) | |
tree | d1d09a01e223165b8a61b59379cf7c1e4d031fa0 /src/com/android | |
parent | 0c2918f4f4c4a9a6609b82cf23155ed51840f2c8 (diff) | |
download | android_packages_apps_Trebuchet-eb1ac42fd479cfd9b8e58220173c8bea5c69b649.tar.gz android_packages_apps_Trebuchet-eb1ac42fd479cfd9b8e58220173c8bea5c69b649.tar.bz2 android_packages_apps_Trebuchet-eb1ac42fd479cfd9b8e58220173c8bea5c69b649.zip |
Fix missing screen when adding widget directly to provider
bug: 17969770
Change-Id: Icbd8451d8adde0519917a7bf06365517405759fe
Diffstat (limited to 'src/com/android')
-rw-r--r-- | src/com/android/launcher3/LauncherProvider.java | 51 |
1 files changed, 31 insertions, 20 deletions
diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index c0e648758..670780af0 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -1290,14 +1290,15 @@ public class LauncherProvider extends ContentProvider { try { int appWidgetId = mAppWidgetHost.allocateAppWidgetId(); values.put(LauncherSettings.Favorites.APPWIDGET_ID, appWidgetId); - if (appWidgetManager.bindAppWidgetIdIfAllowed(appWidgetId,cn)) { - return true; + if (!appWidgetManager.bindAppWidgetIdIfAllowed(appWidgetId,cn)) { } } catch (RuntimeException e) { Log.e(TAG, "Failed to initialize external widget", e); + return false; } + } else { + return false; } - return false; } // Add screen id if not present @@ -1553,24 +1554,11 @@ public class LauncherProvider extends ContentProvider { } /** - * Parse folder starting at current {@link XmlPullParser} location. + * Parse folder items starting at {@link XmlPullParser} location. Allow recursive + * includes of items. */ - private boolean loadFolder(SQLiteDatabase db, ContentValues values, Resources res, - XmlResourceParser parser) throws IOException, XmlPullParserException { - final String title; - final int titleResId = getAttributeResourceValue(parser, ATTR_TITLE, 0); - if (titleResId != 0) { - title = res.getString(titleResId); - } else { - title = mContext.getResources().getString(R.string.folder_name); - } - - values.put(LauncherSettings.Favorites.TITLE, title); - long folderId = addFolder(db, values); - boolean added = folderId >= 0; - - ArrayList<Long> folderItems = new ArrayList<Long>(); - + private void addToFolder(SQLiteDatabase db, Resources res, XmlResourceParser parser, + ArrayList<Long> folderItems, long folderId) throws IOException, XmlPullParserException { int type; int folderDepth = parser.getDepth(); while ((type = parser.next()) != XmlPullParser.END_TAG || @@ -1600,10 +1588,33 @@ public class LauncherProvider extends ContentProvider { if (id >= 0) { folderItems.add(id); } + } else if (TAG_INCLUDE.equals(tag) && folderId >= 0) { + addToFolder(db, res, parser, folderItems, folderId); } else { throw new RuntimeException("Folders can contain only shortcuts"); } } + } + + /** + * Parse folder starting at current {@link XmlPullParser} location. + */ + private boolean loadFolder(SQLiteDatabase db, ContentValues values, Resources res, + XmlResourceParser parser) throws IOException, XmlPullParserException { + final String title; + final int titleResId = getAttributeResourceValue(parser, ATTR_TITLE, 0); + if (titleResId != 0) { + title = res.getString(titleResId); + } else { + title = mContext.getResources().getString(R.string.folder_name); + } + + values.put(LauncherSettings.Favorites.TITLE, title); + long folderId = addFolder(db, values); + boolean added = folderId >= 0; + + ArrayList<Long> folderItems = new ArrayList<Long>(); + addToFolder(db, res, parser, folderItems, folderId); // We can only have folders with >= 2 items, so we need to remove the // folder and clean up if less than 2 items were included, or some |