Fixing nullpointer when creating new DB

LauncherProvider is not ready until the DBHelper is created
Change-Id: Iabd61005892f15fd4a31d882100d87df2b2a7b85
diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java
index 71ddb1a..4df92af 100644
--- a/src/com/android/launcher3/LauncherProvider.java
+++ b/src/com/android/launcher3/LauncherProvider.java
@@ -99,6 +99,7 @@
 
     public void setLauncherProviderChangeListener(LauncherProviderChangeListener listener) {
         mListener = listener;
+        mOpenHelper.mListener = mListener;
     }
 
     @Override
@@ -270,18 +271,6 @@
         }
     }
 
-    @Thunk void notifyAppWidgetHostReset() {
-        new MainThreadExecutor().execute(new Runnable() {
-
-            @Override
-            public void run() {
-                if (mListener != null) {
-                    mListener.onAppWidgetHostReset();
-                }
-            }
-        });
-    }
-
     @Thunk static void addModifiedTime(ContentValues values) {
         values.put(LauncherSettings.ChangeLogColumns.MODIFIED, System.currentTimeMillis());
     }
@@ -429,6 +418,7 @@
             SQLiteDatabase.deleteDatabase(dbFile);
         }
         mOpenHelper = new DatabaseHelper(getContext());
+        mOpenHelper.mListener = mListener;
     }
 
     private static class DatabaseHelper extends SQLiteOpenHelper implements LayoutParserCallback {
@@ -439,6 +429,8 @@
 
         private boolean mNewDbCreated = false;
 
+        @Thunk LauncherProviderChangeListener mListener;
+
         DatabaseHelper(Context context) {
             super(context, LauncherFiles.LAUNCHER_DB, null, DATABASE_VERSION);
             mContext = context;
@@ -508,7 +500,15 @@
                  * want to re-call {@link AppWidgetHost#startListening()} to ensure
                  * callbacks are correctly set.
                  */
-                LauncherAppState.getLauncherProvider().notifyAppWidgetHostReset();
+                new MainThreadExecutor().execute(new Runnable() {
+
+                    @Override
+                    public void run() {
+                        if (mListener != null) {
+                            mListener.onAppWidgetHostReset();
+                        }
+                    }
+                });
             }
 
             // Fresh and clean launcher DB.
diff --git a/src/com/android/launcher3/WidgetPreviewLoader.java b/src/com/android/launcher3/WidgetPreviewLoader.java
index 5ca0ac8..629387e 100644
--- a/src/com/android/launcher3/WidgetPreviewLoader.java
+++ b/src/com/android/launcher3/WidgetPreviewLoader.java
@@ -59,7 +59,7 @@
      * Note: synchronized block used for this variable is expensive and the block should always
      * be posted to a background thread.
      */
-    @Thunk Set<Bitmap> mUnusedBitmaps =
+    @Thunk final Set<Bitmap> mUnusedBitmaps =
             Collections.newSetFromMap(new WeakHashMap<Bitmap, Boolean>());
 
     private final Context mContext;
@@ -540,7 +540,7 @@
      */
     public class PreviewLoadRequest {
 
-        private final PreviewLoadTask mTask;
+        @Thunk final PreviewLoadTask mTask;
 
         public PreviewLoadRequest(PreviewLoadTask task) {
             mTask = task;