am 3dc7beea: Catching DeadObjectException and TransactionTooLarge

* commit '3dc7beea3c7f9a60070e767aa43f5877a467d3ed':
  Catching DeadObjectException and TransactionTooLarge
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index ee5f9ca..494ca81 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -34,6 +34,7 @@
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.net.Uri;
+import android.os.DeadObjectException;
 import android.os.Environment;
 import android.os.Handler;
 import android.os.HandlerThread;
@@ -3301,9 +3302,14 @@
                     // Refresh widget list, if there is any newly added widget
                     PackageManager pm = context.getPackageManager();
                     for (String pkg : mPackages) {
-                        needToRefresh |= !pm.queryBroadcastReceivers(
-                                new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE)
-                                    .setPackage(pkg), 0).isEmpty();
+                        try {
+                            needToRefresh |= !pm.queryBroadcastReceivers(
+                                    new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE)
+                                            .setPackage(pkg), 0).isEmpty();
+                        } catch (RuntimeException e) {
+                            // Ignore the crash. We can live with a state widget list.
+                            Log.e(TAG, "PM call failed for " + pkg, e);
+                        }
                     }
                 }
 
@@ -3355,7 +3361,8 @@
                 return results;
             }
         } catch (Exception e) {
-            if (e.getCause() instanceof TransactionTooLargeException) {
+            if (e.getCause() instanceof TransactionTooLargeException ||
+                    e.getCause() instanceof DeadObjectException) {
                 // the returned value may be incomplete and will not be refreshed until the next
                 // time Launcher starts.
                 // TODO: after figuring out a repro step, introduce a dirty bit to check when