From ef4c044053ee23a684083da95f92a92801234770 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Wed, 27 May 2020 09:45:32 -0400 Subject: [PATCH] Some notification history fixes - Update header count when item swiped away - Clean up container when last notification is swiped away - Long pressing on the top two section brings you to settings to modify notification behavior - Show more notification content Test: manual Bug: 157547283 Change-Id: I1d43cacca7a0f22f83cef9187cf288839e0d5795 --- res/layout/notification_history_log_row.xml | 2 +- res/layout/notification_sbn_log_row.xml | 2 +- .../history/NotificationHistoryActivity.java | 10 +++++++++- .../history/NotificationHistoryAdapter.java | 10 +++++++++- .../history/NotificationSbnAdapter.java | 14 ++++++++++++++ 5 files changed, 34 insertions(+), 4 deletions(-) diff --git a/res/layout/notification_history_log_row.xml b/res/layout/notification_history_log_row.xml index 4f45fecd0ae..04438e33f61 100644 --- a/res/layout/notification_history_log_row.xml +++ b/res/layout/notification_history_log_row.xml @@ -76,7 +76,7 @@ android:layout_height="wrap_content" android:layout_gravity="left|center_vertical" android:ellipsize="end" - android:singleLine="true" + android:maxLines="3" android:paddingTop="3dp" android:textAppearance="@style/TextAppearance.NotificationHistory.Text" android:textAlignment="viewStart" /> diff --git a/res/layout/notification_sbn_log_row.xml b/res/layout/notification_sbn_log_row.xml index a5b8dd0fde7..7a3e6d7d817 100644 --- a/res/layout/notification_sbn_log_row.xml +++ b/res/layout/notification_sbn_log_row.xml @@ -125,7 +125,7 @@ android:layout_height="wrap_content" android:layout_gravity="left|center_vertical" android:ellipsize="end" - android:singleLine="true" + android:maxLines="3" android:textAppearance="@style/TextAppearance.NotificationHistory.Text" android:textAlignment="viewStart" /> diff --git a/src/com/android/settings/notification/history/NotificationHistoryActivity.java b/src/com/android/settings/notification/history/NotificationHistoryActivity.java index 1e5e21e4919..525ac84e3c4 100644 --- a/src/com/android/settings/notification/history/NotificationHistoryActivity.java +++ b/src/com/android/settings/notification/history/NotificationHistoryActivity.java @@ -140,7 +140,15 @@ public class NotificationHistoryActivity extends Activity { final NotificationHistoryRecyclerView rv = viewForPackage.findViewById(R.id.notification_list); - rv.setAdapter(new NotificationHistoryAdapter(mNm, rv)); + rv.setAdapter(new NotificationHistoryAdapter(mNm, rv, + newCount -> { + count.setText(getResources().getQuantityString( + R.plurals.notification_history_count, + newCount, newCount)); + if (newCount == 0) { + viewForPackage.setVisibility(View.GONE); + } + })); ((NotificationHistoryAdapter) rv.getAdapter()).onRebuildComplete( new ArrayList<>(nhp.notifications)); diff --git a/src/com/android/settings/notification/history/NotificationHistoryAdapter.java b/src/com/android/settings/notification/history/NotificationHistoryAdapter.java index 4a5c627eb28..70eee21e985 100644 --- a/src/com/android/settings/notification/history/NotificationHistoryAdapter.java +++ b/src/com/android/settings/notification/history/NotificationHistoryAdapter.java @@ -49,13 +49,16 @@ public class NotificationHistoryAdapter extends private INotificationManager mNm; private List mValues; + private OnItemDeletedListener mListener; public NotificationHistoryAdapter(INotificationManager nm, - NotificationHistoryRecyclerView listView) { + NotificationHistoryRecyclerView listView, + OnItemDeletedListener listener) { mValues = new ArrayList<>(); setHasStableIds(true); listView.setOnItemSwipeDeleteListener(this); mNm = nm; + mListener = listener; } @Override @@ -134,6 +137,11 @@ public class NotificationHistoryAdapter extends Slog.e(TAG, "Failed to delete item", e); } } + mListener.onItemDeleted(mValues.size()); notifyItemRemoved(position); } + + interface OnItemDeletedListener { + void onItemDeleted(int newCount); + } } diff --git a/src/com/android/settings/notification/history/NotificationSbnAdapter.java b/src/com/android/settings/notification/history/NotificationSbnAdapter.java index 27ecabdd92e..def98de6b9c 100644 --- a/src/com/android/settings/notification/history/NotificationSbnAdapter.java +++ b/src/com/android/settings/notification/history/NotificationSbnAdapter.java @@ -20,12 +20,16 @@ import static android.app.Notification.COLOR_DEFAULT; import static android.content.pm.PackageManager.MATCH_ANY_USER; import static android.content.pm.PackageManager.NameNotFoundException; import static android.os.UserHandle.USER_ALL; +import static android.provider.Settings.EXTRA_APP_PACKAGE; +import static android.provider.Settings.EXTRA_CHANNEL_ID; +import static android.provider.Settings.EXTRA_CONVERSATION_ID; import android.annotation.ColorInt; import android.annotation.UserIdInt; import android.app.ActivityManager; import android.app.Notification; import android.content.Context; +import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; @@ -33,6 +37,7 @@ import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.os.UserHandle; import android.os.UserManager; +import android.provider.Settings; import android.service.notification.StatusBarNotification; import android.text.TextUtils; import android.util.Log; @@ -113,6 +118,15 @@ public class NotificationSbnAdapter extends holder.setProfileBadge(mUserBadgeCache.get(userId)); holder.addOnClick(sbn.getPackageName(), sbn.getUserId(), sbn.getNotification().contentIntent); + holder.itemView.setOnLongClickListener(v -> { + Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS) + .putExtra(EXTRA_APP_PACKAGE, sbn.getPackageName()) + .putExtra(EXTRA_CHANNEL_ID, sbn.getNotification().getChannelId()) + .putExtra(EXTRA_CONVERSATION_ID, sbn.getNotification().getShortcutId()); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + holder.itemView.getContext().startActivityAsUser(intent, UserHandle.of(userId)); + return true; + }); } else { Slog.w(TAG, "null entry in list at position " + position); }