diff --git a/res/values/strings.xml b/res/values/strings.xml index 72d810673e3..450eb1301a1 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -8093,6 +8093,9 @@ view notification settings + + open notification + Allow notification snoozing diff --git a/src/com/android/settings/notification/history/NotificationSbnAdapter.java b/src/com/android/settings/notification/history/NotificationSbnAdapter.java index ca2bfcbc5ed..c7f68abac14 100644 --- a/src/com/android/settings/notification/history/NotificationSbnAdapter.java +++ b/src/com/android/settings/notification/history/NotificationSbnAdapter.java @@ -20,7 +20,6 @@ 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.os.UserHandle.USER_CURRENT; import android.annotation.ColorInt; import android.annotation.UserIdInt; @@ -48,7 +47,6 @@ import com.android.internal.util.ContrastColorUtil; import com.android.settings.R; import java.util.ArrayList; -import java.util.Currency; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -92,7 +90,7 @@ public class NotificationSbnAdapter extends final StatusBarNotification sbn = mValues.get(position); if (sbn != null) { holder.setIcon(loadIcon(sbn)); - holder.setPackageName(loadPackageName(sbn.getPackageName()).toString()); + holder.setPackageLabel(loadPackageLabel(sbn.getPackageName()).toString()); holder.setTitle(getTitleString(sbn.getNotification())); holder.setSummary(getTextString(mContext, sbn.getNotification())); holder.setPostedTime(sbn.getPostTime()); @@ -103,6 +101,8 @@ public class NotificationSbnAdapter extends mUserBadgeCache.put(userId, profile); } holder.setProfileBadge(mUserBadgeCache.get(userId)); + holder.addOnClick(sbn.getPackageName(), sbn.getUserId(), + sbn.getNotification().contentIntent); } else { Slog.w(TAG, "null entry in list at position " + position); } @@ -133,7 +133,7 @@ public class NotificationSbnAdapter extends notifyDataSetChanged(); } - private @NonNull CharSequence loadPackageName(String pkg) { + private @NonNull CharSequence loadPackageLabel(String pkg) { try { ApplicationInfo info = mPm.getApplicationInfo(pkg, MATCH_ANY_USER); diff --git a/src/com/android/settings/notification/history/NotificationSbnViewHolder.java b/src/com/android/settings/notification/history/NotificationSbnViewHolder.java index 79cda7fe267..27b4b73d09c 100644 --- a/src/com/android/settings/notification/history/NotificationSbnViewHolder.java +++ b/src/com/android/settings/notification/history/NotificationSbnViewHolder.java @@ -16,19 +16,26 @@ package com.android.settings.notification.history; +import android.app.PendingIntent; +import android.content.Intent; import android.graphics.drawable.Drawable; -import android.graphics.drawable.Icon; +import android.os.UserHandle; import android.text.TextUtils; +import android.util.Slog; import android.view.View; import android.widget.DateTimeView; import android.widget.ImageView; import android.widget.TextView; +import androidx.core.view.AccessibilityDelegateCompat; +import androidx.core.view.ViewCompat; +import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; import androidx.recyclerview.widget.RecyclerView; import com.android.settings.R; public class NotificationSbnViewHolder extends RecyclerView.ViewHolder { + private static final String TAG = "SbnViewHolder"; private final TextView mPkgName; private final ImageView mIcon; @@ -63,7 +70,7 @@ public class NotificationSbnViewHolder extends RecyclerView.ViewHolder { mIcon.setImageDrawable(icon); } - void setPackageName(String pkg) { + void setPackageLabel(String pkg) { mPkgName.setText(pkg); } @@ -74,4 +81,34 @@ public class NotificationSbnViewHolder extends RecyclerView.ViewHolder { void setProfileBadge(Drawable badge) { mProfileBadge.setImageDrawable(badge); } + + void addOnClick(String pkg, int userId, PendingIntent pi) { + itemView.setOnClickListener(v -> { + if (pi != null) { + try { + pi.send(); + } catch (PendingIntent.CanceledException e) { + Slog.e(TAG, "Could not launch", e); + } + } else { + Intent appIntent = new Intent(Intent.ACTION_MAIN) + .setPackage(pkg); + appIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + itemView.getContext().startActivityAsUser(appIntent, UserHandle.of(userId)); + } + }); + ViewCompat.setAccessibilityDelegate(itemView, new AccessibilityDelegateCompat() { + @Override + public void onInitializeAccessibilityNodeInfo(View host, + AccessibilityNodeInfoCompat info) { + super.onInitializeAccessibilityNodeInfo(host, info); + CharSequence description = host.getResources().getText( + R.string.notification_history_open_notification); + AccessibilityNodeInfoCompat.AccessibilityActionCompat customClick = + new AccessibilityNodeInfoCompat.AccessibilityActionCompat( + AccessibilityNodeInfoCompat.ACTION_CLICK, description); + info.addAction(customClick); + } + }); + } }