Merge "Don't crash systemui"
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java
index ab47d33..e635976 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java
@@ -28,12 +28,10 @@
 import android.content.pm.PackageManager;
 import android.content.res.Resources;
 import android.net.Uri;
-import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.UserHandle;
 import android.provider.Settings;
 import android.service.notification.StatusBarNotification;
-import androidx.annotation.VisibleForTesting;
 import android.util.ArraySet;
 import android.util.Log;
 import android.view.HapticFeedbackConstants;
@@ -45,15 +43,17 @@
 import com.android.systemui.Dependency;
 import com.android.systemui.Dumpable;
 import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.NotificationPresenter;
+import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
 import com.android.systemui.statusbar.phone.StatusBar;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 
+import androidx.annotation.VisibleForTesting;
+
 /**
  * Handles various NotificationGuts related tasks, such as binding guts to a row, opening and
  * closing guts, and keeping track of the currently exposed notification guts.
@@ -147,15 +147,15 @@
         }
     }
 
-    public void bindGuts(final ExpandableNotificationRow row) {
-        bindGuts(row, mGutsMenuItem);
+    public boolean bindGuts(final ExpandableNotificationRow row) {
+        row.inflateGuts();
+        return bindGuts(row, mGutsMenuItem);
     }
 
-    private void bindGuts(final ExpandableNotificationRow row,
+    private boolean bindGuts(final ExpandableNotificationRow row,
             NotificationMenuRowPlugin.MenuItem item) {
         StatusBarNotification sbn = row.getStatusBarNotification();
 
-        row.inflateGuts();
         row.setGutsView(item);
         row.setTag(sbn.getPackageName());
         row.getGuts().setClosedListener((NotificationGuts g) -> {
@@ -176,12 +176,18 @@
         });
 
         View gutsView = item.getGutsView();
-        if (gutsView instanceof NotificationSnooze) {
-            initializeSnoozeView(row, (NotificationSnooze) gutsView);
-        } else if (gutsView instanceof AppOpsInfo) {
-            initializeAppOpsInfo(row, (AppOpsInfo) gutsView);
-        } else if (gutsView instanceof NotificationInfo) {
-            initializeNotificationInfo(row, (NotificationInfo) gutsView);
+        try {
+            if (gutsView instanceof NotificationSnooze) {
+                initializeSnoozeView(row, (NotificationSnooze) gutsView);
+            } else if (gutsView instanceof AppOpsInfo) {
+                initializeAppOpsInfo(row, (AppOpsInfo) gutsView);
+            } else if (gutsView instanceof NotificationInfo) {
+                initializeNotificationInfo(row, (NotificationInfo) gutsView);
+            }
+            return true;
+        } catch (Exception e) {
+            Log.e(TAG, "error binding guts", e);
+            return false;
         }
     }
 
@@ -240,7 +246,7 @@
     @VisibleForTesting
     void initializeNotificationInfo(
             final ExpandableNotificationRow row,
-            NotificationInfo notificationInfoView) {
+            NotificationInfo notificationInfoView) throws Exception {
         NotificationGuts guts = row.getGuts();
         StatusBarNotification sbn = row.getStatusBarNotification();
         String packageName = sbn.getPackageName();
@@ -269,24 +275,21 @@
             };
         }
 
-        try {
-            notificationInfoView.bindNotification(
-                    pmUser,
-                    iNotificationManager,
-                    packageName,
-                    row.getEntry().channel,
-                    row.getNumUniqueChannels(),
-                    sbn,
-                    mCheckSaveListener,
-                    onSettingsClick,
-                    onAppSettingsClick,
-                    mPresenter.isDeviceProvisioned(),
-                    row.getIsNonblockable(),
-                    isForBlockingHelper,
-                    row.getEntry().userSentiment == USER_SENTIMENT_NEGATIVE);
-        } catch (RemoteException e) {
-            Log.e(TAG, e.toString());
-        }
+        notificationInfoView.bindNotification(
+                pmUser,
+                iNotificationManager,
+                packageName,
+                row.getEntry().channel,
+                row.getNumUniqueChannels(),
+                sbn,
+                mCheckSaveListener,
+                onSettingsClick,
+                onAppSettingsClick,
+                mPresenter.isDeviceProvisioned(),
+                row.getIsNonblockable(),
+                isForBlockingHelper,
+                row.getEntry().userSentiment == USER_SENTIMENT_NEGATIVE);
+
     }
 
     /**
@@ -356,8 +359,15 @@
                     true /* resetMenu */);
             return false;
         }
-        bindGuts(row, menuItem);
+
+        row.inflateGuts();
         NotificationGuts guts = row.getGuts();
+        mNotificationGutsExposed = guts;
+        if (!bindGuts(row, menuItem)) {
+            // exception occurred trying to fill in all the data, bail.
+            return false;
+        }
+
 
         // Assume we are a status_bar_notification_row
         if (guts == null) {
@@ -378,9 +388,6 @@
                             + "window");
                     return;
                 }
-                closeAndSaveGuts(true /* removeLeavebehind */, true /* force */,
-                        true /* removeControls */, -1 /* x */, -1 /* y */,
-                        false /* resetMenu */);
                 guts.setVisibility(View.VISIBLE);
 
                 final boolean needsFalsingProtection =
@@ -396,7 +403,6 @@
 
                 row.closeRemoteInput();
                 mListContainer.onHeightChanged(row, true /* needsAnimation */);
-                mNotificationGutsExposed = guts;
                 mGutsMenuItem = menuItem;
             }
         });