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)));
}
}