Fixes: 335717550 Bug: 349652992 Test: manual- view history in all states with new styling enabled and disabled Flag: EXEMPT bug fix Change-Id: I8ccf5d848691f954cb1b0a79c773ad76ab6c371a
142 lines
5.6 KiB
Java
142 lines
5.6 KiB
Java
/*
|
|
* Copyright (C) 2020 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package com.android.settings.notification.history;
|
|
|
|
import static android.app.ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED;
|
|
|
|
import android.app.ActivityOptions;
|
|
import android.app.PendingIntent;
|
|
import android.content.ActivityNotFoundException;
|
|
import android.content.Intent;
|
|
import android.graphics.drawable.Drawable;
|
|
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.internal.logging.InstanceId;
|
|
import com.android.internal.logging.UiEventLogger;
|
|
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;
|
|
private final DateTimeView mTime;
|
|
private final TextView mTitle;
|
|
private final TextView mSummary;
|
|
private final ImageView mProfileBadge;
|
|
|
|
NotificationSbnViewHolder(View itemView) {
|
|
super(itemView);
|
|
mPkgName = itemView.findViewById(R.id.pkgname);
|
|
mIcon = itemView.findViewById(R.id.icon);
|
|
mTime = itemView.findViewById(R.id.timestamp);
|
|
mTitle = itemView.findViewById(R.id.title);
|
|
mSummary = itemView.findViewById(R.id.text);
|
|
mProfileBadge = itemView.findViewById(R.id.profile_badge);
|
|
}
|
|
|
|
void setSummary(CharSequence summary) {
|
|
mSummary.setVisibility(TextUtils.isEmpty(summary) ? View.GONE : View.VISIBLE);
|
|
mSummary.setText(summary);
|
|
}
|
|
|
|
void setTitle(CharSequence title) {
|
|
mTitle.setText(title);
|
|
}
|
|
|
|
void setIcon(Drawable icon) {
|
|
mIcon.setImageDrawable(icon);
|
|
}
|
|
|
|
void setIconBackground(Drawable background) {
|
|
mIcon.setBackground(background);
|
|
}
|
|
|
|
void setPackageLabel(String pkg) {
|
|
mPkgName.setText(pkg);
|
|
}
|
|
|
|
void setPostedTime(long postedTime) {
|
|
mTime.setTime(postedTime);
|
|
}
|
|
|
|
void setProfileBadge(Drawable badge) {
|
|
mProfileBadge.setImageDrawable(badge);
|
|
mProfileBadge.setVisibility(badge != null ? View.VISIBLE : View.GONE);
|
|
}
|
|
|
|
void addOnClick(int position, String pkg, int uid, int userId, PendingIntent pi,
|
|
InstanceId instanceId,
|
|
boolean isSnoozed, UiEventLogger uiEventLogger) {
|
|
Intent appIntent = itemView.getContext().getPackageManager()
|
|
.getLaunchIntentForPackage(pkg);
|
|
boolean isPendingIntentValid = pi != null && pi.isActivity();
|
|
if (isPendingIntentValid || appIntent != null) {
|
|
itemView.setOnClickListener(v -> {
|
|
uiEventLogger.logWithInstanceIdAndPosition(
|
|
isSnoozed
|
|
? NotificationHistoryActivity.NotificationHistoryEvent
|
|
.NOTIFICATION_HISTORY_SNOOZED_ITEM_CLICK
|
|
: NotificationHistoryActivity.NotificationHistoryEvent
|
|
.NOTIFICATION_HISTORY_RECENT_ITEM_CLICK,
|
|
uid, pkg, instanceId, position);
|
|
if (pi != null && isPendingIntentValid) {
|
|
try {
|
|
ActivityOptions options = ActivityOptions.makeBasic();
|
|
options.setPendingIntentBackgroundActivityStartMode(
|
|
MODE_BACKGROUND_ACTIVITY_START_ALLOWED);
|
|
pi.send(options.toBundle());
|
|
} catch (PendingIntent.CanceledException e) {
|
|
Slog.e(TAG, "Could not launch", e);
|
|
}
|
|
} else if (appIntent != null) {
|
|
appIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
try {
|
|
itemView.getContext().startActivityAsUser(appIntent, UserHandle.of(userId));
|
|
} catch (ActivityNotFoundException e) {
|
|
Slog.e(TAG, "no launch activity", e);
|
|
}
|
|
}
|
|
});
|
|
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);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|