Fix notification history crash & layout

- Fix occasional crash on device boot
- No more overlapping text

Test: manual
Fixes: 150326599
Fixes: 149767075
Change-Id: I3032a2913f2ca4ce57af596c180faa819e4c9363
diff --git a/res/layout/notification_history_log_row.xml b/res/layout/notification_history_log_row.xml
index 136af38..c77b005 100644
--- a/res/layout/notification_history_log_row.xml
+++ b/res/layout/notification_history_log_row.xml
@@ -28,19 +28,21 @@
         android:layout_height="wrap_content"
         android:orientation="vertical"
         android:layout_marginBottom="6dp">
-        <RelativeLayout
+        <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="@*android:dimen/status_bar_icon_size"
             android:gravity="center_vertical">
 
             <TextView
                 android:id="@+id/title"
-                android:layout_width="match_parent"
+                android:layout_weight="1"
+                android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_centerVertical="true"
                 android:ellipsize="end"
                 android:singleLine="true"
                 android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification.Title"
+                android:layout_toStartOf="@id/alerted_icon"
                 android:textAlignment="viewStart"/>
 
             <ImageView
@@ -51,8 +53,9 @@
                 android:layout_marginStart="6dp"
                 android:paddingTop="1dp"
                 android:scaleType="fitCenter"
-                android:visibility="gone"
+                android:visibility="invisible"
                 android:layout_toEndOf="@id/title"
+                android:layout_toStartOf="@id/timestamp"
                 android:tint="?android:attr/textColorSecondary"
                 android:src="@drawable/ic_notifications_alert"/>
 
@@ -67,7 +70,7 @@
                 android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification"
                 android:textAlignment="viewEnd"
                 />
-        </RelativeLayout>
+        </LinearLayout>
 
         <TextView
             android:id="@+id/text"
diff --git a/src/com/android/settings/notification/history/NotificationHistoryActivity.java b/src/com/android/settings/notification/history/NotificationHistoryActivity.java
index fbbda21..8c00b5d 100644
--- a/src/com/android/settings/notification/history/NotificationHistoryActivity.java
+++ b/src/com/android/settings/notification/history/NotificationHistoryActivity.java
@@ -241,7 +241,16 @@
 
         @Override
         public void onListenerConnected() {
-            StatusBarNotification[] snoozed = getSnoozedNotifications();
+            StatusBarNotification[] snoozed = null;
+            StatusBarNotification[] dismissed = null;
+            try {
+                snoozed = getSnoozedNotifications();
+                dismissed = mNm.getHistoricalNotifications(
+                    NotificationHistoryActivity.this.getPackageName(), 6, false);
+            } catch (SecurityException | RemoteException e) {
+                Log.d(TAG, "OnPaused called while trying to retrieve notifications");
+            }
+
             mSnoozedRv = mSnoozeView.findViewById(R.id.notification_list);
             LinearLayoutManager lm = new LinearLayoutManager(NotificationHistoryActivity.this);
             mSnoozedRv.setLayoutManager(lm);
@@ -259,26 +268,23 @@
                         new ArrayList<>(Arrays.asList(snoozed)));
             }
 
-            try {
-                StatusBarNotification[] dismissed = mNm.getHistoricalNotifications(
-                        NotificationHistoryActivity.this.getPackageName(), 6, false);
-                mDismissedRv = mDismissView.findViewById(R.id.notification_list);
-                LinearLayoutManager dismissLm =
-                        new LinearLayoutManager(NotificationHistoryActivity.this);
-                mDismissedRv.setLayoutManager(dismissLm);
-                mDismissedRv.setAdapter(
-                        new NotificationSbnAdapter(NotificationHistoryActivity.this, mPm));
-                DividerItemDecoration dismissDivider = new DividerItemDecoration(
-                        mDismissedRv.getContext(), dismissLm.getOrientation());
-                mDismissedRv.addItemDecoration(dismissDivider);
-                mDismissedRv.setNestedScrollingEnabled(false);
+            mDismissedRv = mDismissView.findViewById(R.id.notification_list);
+            LinearLayoutManager dismissLm =
+                new LinearLayoutManager(NotificationHistoryActivity.this);
+            mDismissedRv.setLayoutManager(dismissLm);
+            mDismissedRv.setAdapter(
+                new NotificationSbnAdapter(NotificationHistoryActivity.this, mPm));
+            DividerItemDecoration dismissDivider = new DividerItemDecoration(
+                mDismissedRv.getContext(), dismissLm.getOrientation());
+            mDismissedRv.addItemDecoration(dismissDivider);
+            mDismissedRv.setNestedScrollingEnabled(false);
 
-                ((NotificationSbnAdapter) mDismissedRv.getAdapter()).onRebuildComplete(
-                        new ArrayList<>(Arrays.asList(dismissed)));
-                mDismissView.setVisibility(View.VISIBLE);
-            } catch (Exception e) {
-                Slog.e(TAG, "Cannot load recently dismissed", e);
+            if (dismissed == null || dismissed.length == 0) {
                 mDismissView.setVisibility(View.GONE);
+            } else {
+                mDismissView.setVisibility(View.VISIBLE);
+                ((NotificationSbnAdapter) mDismissedRv.getAdapter()).onRebuildComplete(
+                    new ArrayList<>(Arrays.asList(dismissed)));
             }
         }