Loading internal default layout if partner layout fails to load

Bug: 18033885
Change-Id: I8399d0107cc3570c0e03d833601abf2cd194b3d3
diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java
index f2d005e..fe9bc17 100644
--- a/src/com/android/launcher3/LauncherProvider.java
+++ b/src/com/android/launcher3/LauncherProvider.java
@@ -322,29 +322,34 @@
                 }
             }
 
+            final boolean usingExternallyProvidedLayout = loader != null;
             if (loader == null) {
-                loader = new DefaultLayoutParser(getContext(), mOpenHelper.mAppWidgetHost,
-                        mOpenHelper, getContext().getResources(), getDefaultWorkspaceResourceId());
+                loader = getDefaultLayoutParser();
             }
-
             // Populate favorites table with initial favorites
-            SharedPreferences.Editor editor = sp.edit().remove(EMPTY_DATABASE_CREATED);
-            mOpenHelper.loadFavorites(mOpenHelper.getWritableDatabase(), loader);
-            editor.commit();
+            if ((mOpenHelper.loadFavorites(mOpenHelper.getWritableDatabase(), loader) <= 0)
+                    && usingExternallyProvidedLayout) {
+                // Unable to load external layout. Cleanup and load the internal layout.
+                createEmptyDB();
+                mOpenHelper.loadFavorites(mOpenHelper.getWritableDatabase(),
+                        getDefaultLayoutParser());
+            }
+            sp.edit().remove(EMPTY_DATABASE_CREATED).commit();
         }
     }
 
+    private DefaultLayoutParser getDefaultLayoutParser() {
+        int defaultLayout = LauncherAppState.getInstance()
+                .getDynamicGrid().getDeviceProfile().defaultLayoutId;
+        return new DefaultLayoutParser(getContext(), mOpenHelper.mAppWidgetHost,
+                mOpenHelper, getContext().getResources(), defaultLayout);
+    }
+
     public void migrateLauncher2Shortcuts() {
         mOpenHelper.migrateLauncher2Shortcuts(mOpenHelper.getWritableDatabase(),
                 Uri.parse(getContext().getString(R.string.old_launcher_provider_uri)));
     }
 
-    private static int getDefaultWorkspaceResourceId() {
-        LauncherAppState app = LauncherAppState.getInstance();
-        DeviceProfile grid = app.getDynamicGrid().getDeviceProfile();
-        return grid.defaultLayoutId;
-    }
-
     private static interface ContentValuesCallback {
         public void onRow(ContentValues values);
     }