Removing old Launcher callback reference from LauncherModel when the activity is destroyed.

Change-Id: I288d2bd7e305c2cf9bdeec5357997d566d5205b7
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index eb533fe..2d63b3f 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -1495,6 +1495,11 @@
     public void onDestroy() {
         super.onDestroy();
 
+        // Stop callbacks from LauncherModel
+        LauncherApplication app = ((LauncherApplication) getApplication());
+        mModel.stopLoader();
+        app.setLauncher(null);
+
         try {
             mAppWidgetHost.stopListening();
         } catch (NullPointerException ex) {
@@ -1506,7 +1511,6 @@
 
         TextKeyListener.getInstance().release();
 
-        mModel.stopLoader();
 
         unbindDesktopItems();
 
diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java
index d5505c5..7cfab2a 100644
--- a/src/com/android/launcher2/LauncherModel.java
+++ b/src/com/android/launcher2/LauncherModel.java
@@ -1301,7 +1301,8 @@
                 final ArrayList<ApplicationInfo> addedFinal = added;
                 mHandler.post(new Runnable() {
                     public void run() {
-                        if (callbacks == mCallbacks.get()) {
+                        Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
+                        if (callbacks == cb && cb != null) {
                             callbacks.bindAppsAdded(addedFinal);
                         }
                     }
@@ -1311,7 +1312,8 @@
                 final ArrayList<ApplicationInfo> modifiedFinal = modified;
                 mHandler.post(new Runnable() {
                     public void run() {
-                        if (callbacks == mCallbacks.get()) {
+                        Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
+                        if (callbacks == cb && cb != null) {
                             callbacks.bindAppsUpdated(modifiedFinal);
                         }
                     }
@@ -1322,7 +1324,8 @@
                 final ArrayList<ApplicationInfo> removedFinal = removed;
                 mHandler.post(new Runnable() {
                     public void run() {
-                        if (callbacks == mCallbacks.get()) {
+                        Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
+                        if (callbacks == cb && cb != null) {
                             callbacks.bindAppsRemoved(removedFinal, permanent);
                         }
                     }
@@ -1332,7 +1335,8 @@
             mHandler.post(new Runnable() {
                 @Override
                 public void run() {
-                    if (callbacks == mCallbacks.get()) {
+                    Callbacks cb = mCallbacks != null ? mCallbacks.get() : null;
+                    if (callbacks == cb && cb != null) {
                         callbacks.bindPackagesUpdated();
                     }
                 }