Merge "Statsd notif logs: important conversations." into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
263c7f9bc1
@@ -26,4 +26,5 @@ enum NotificationImportance { // Constants from NotificationManager.java
|
|||||||
IMPORTANCE_LOW = 2; // Shows in shade, maybe status bar, no buzz/beep.
|
IMPORTANCE_LOW = 2; // Shows in shade, maybe status bar, no buzz/beep.
|
||||||
IMPORTANCE_DEFAULT = 3; // Shows everywhere, makes noise, no heads-up.
|
IMPORTANCE_DEFAULT = 3; // Shows everywhere, makes noise, no heads-up.
|
||||||
IMPORTANCE_HIGH = 4; // Shows everywhere, makes noise, heads-up, may full-screen.
|
IMPORTANCE_HIGH = 4; // Shows everywhere, makes noise, heads-up, may full-screen.
|
||||||
|
IMPORTANCE_IMPORTANT_CONVERSATION = 5; // High + isImportantConversation().
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,9 +16,12 @@
|
|||||||
|
|
||||||
package com.android.server.notification;
|
package com.android.server.notification;
|
||||||
|
|
||||||
|
import static android.app.NotificationManager.IMPORTANCE_HIGH;
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.app.NotificationChannel;
|
import android.app.NotificationChannel;
|
||||||
import android.app.NotificationChannelGroup;
|
import android.app.NotificationChannelGroup;
|
||||||
|
import android.stats.sysui.NotificationEnums;
|
||||||
|
|
||||||
import com.android.internal.logging.UiEvent;
|
import com.android.internal.logging.UiEvent;
|
||||||
import com.android.internal.logging.UiEventLogger;
|
import com.android.internal.logging.UiEventLogger;
|
||||||
@@ -42,7 +45,7 @@ public interface NotificationChannelLogger {
|
|||||||
String pkg) {
|
String pkg) {
|
||||||
logNotificationChannel(
|
logNotificationChannel(
|
||||||
NotificationChannelEvent.getCreated(channel),
|
NotificationChannelEvent.getCreated(channel),
|
||||||
channel, uid, pkg, 0, 0);
|
channel, uid, pkg, 0, getLoggingImportance(channel));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -55,7 +58,7 @@ public interface NotificationChannelLogger {
|
|||||||
String pkg) {
|
String pkg) {
|
||||||
logNotificationChannel(
|
logNotificationChannel(
|
||||||
NotificationChannelEvent.getDeleted(channel),
|
NotificationChannelEvent.getDeleted(channel),
|
||||||
channel, uid, pkg, 0, 0);
|
channel, uid, pkg, getLoggingImportance(channel), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -63,13 +66,13 @@ public interface NotificationChannelLogger {
|
|||||||
* @param channel The channel.
|
* @param channel The channel.
|
||||||
* @param uid UID of app that owns the channel.
|
* @param uid UID of app that owns the channel.
|
||||||
* @param pkg Package of app that owns the channel.
|
* @param pkg Package of app that owns the channel.
|
||||||
* @param oldImportance Previous importance level of the channel.
|
* @param oldLoggingImportance Previous logging importance level of the channel.
|
||||||
* @param byUser True if the modification was user-specified.
|
* @param byUser True if the modification was user-specified.
|
||||||
*/
|
*/
|
||||||
default void logNotificationChannelModified(@NonNull NotificationChannel channel, int uid,
|
default void logNotificationChannelModified(@NonNull NotificationChannel channel, int uid,
|
||||||
String pkg, int oldImportance, boolean byUser) {
|
String pkg, int oldLoggingImportance, boolean byUser) {
|
||||||
logNotificationChannel(NotificationChannelEvent.getUpdated(byUser),
|
logNotificationChannel(NotificationChannelEvent.getUpdated(byUser),
|
||||||
channel, uid, pkg, oldImportance, channel.getImportance());
|
channel, uid, pkg, oldLoggingImportance, getLoggingImportance(channel));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -218,6 +221,27 @@ public interface NotificationChannelLogger {
|
|||||||
return SmallHash.hash(group.getId());
|
return SmallHash.hash(group.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Logging importance for a channel: the regular importance, or
|
||||||
|
* IMPORTANCE_IMPORTANT_CONVERSATION for a HIGH-importance conversation tagged important.
|
||||||
|
*/
|
||||||
|
static int getLoggingImportance(@NonNull NotificationChannel channel) {
|
||||||
|
return getLoggingImportance(channel, channel.getImportance());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Logging importance for a channel or notification: the regular importance, or
|
||||||
|
* IMPORTANCE_IMPORTANT_CONVERSATION for a HIGH-importance conversation tagged important.
|
||||||
|
*/
|
||||||
|
static int getLoggingImportance(@NonNull NotificationChannel channel, int importance) {
|
||||||
|
if (channel.getConversationId() == null || importance < IMPORTANCE_HIGH) {
|
||||||
|
return importance;
|
||||||
|
}
|
||||||
|
return (channel.isImportantConversation())
|
||||||
|
? NotificationEnums.IMPORTANCE_IMPORTANT_CONVERSATION
|
||||||
|
: importance;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return "Importance" for a channel group
|
* @return "Importance" for a channel group
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -20,8 +20,10 @@ import static android.service.notification.NotificationListenerService.REASON_CA
|
|||||||
import static android.service.notification.NotificationListenerService.REASON_CLICK;
|
import static android.service.notification.NotificationListenerService.REASON_CLICK;
|
||||||
import static android.service.notification.NotificationListenerService.REASON_TIMEOUT;
|
import static android.service.notification.NotificationListenerService.REASON_TIMEOUT;
|
||||||
|
|
||||||
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.app.Notification;
|
import android.app.Notification;
|
||||||
|
import android.app.NotificationChannel;
|
||||||
import android.app.Person;
|
import android.app.Person;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.service.notification.NotificationListenerService;
|
import android.service.notification.NotificationListenerService;
|
||||||
@@ -346,7 +348,8 @@ public interface NotificationRecordLogger {
|
|||||||
== old.getSbn().getNotification().isGroupSummary())
|
== old.getSbn().getNotification().isGroupSummary())
|
||||||
&& Objects.equals(r.getSbn().getNotification().category,
|
&& Objects.equals(r.getSbn().getNotification().category,
|
||||||
old.getSbn().getNotification().category)
|
old.getSbn().getNotification().category)
|
||||||
&& (r.getImportance() == old.getImportance()));
|
&& (r.getImportance() == old.getImportance())
|
||||||
|
&& (getLoggingImportance(r) == getLoggingImportance(old)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -413,5 +416,17 @@ public interface NotificationRecordLogger {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param r NotificationRecord
|
||||||
|
* @return Logging importance of record, taking important conversation channels into account.
|
||||||
|
*/
|
||||||
|
static int getLoggingImportance(@NonNull NotificationRecord r) {
|
||||||
|
final int importance = r.getImportance();
|
||||||
|
final NotificationChannel channel = r.getChannel();
|
||||||
|
if (channel == null) {
|
||||||
|
return importance;
|
||||||
|
}
|
||||||
|
return NotificationChannelLogger.getLoggingImportance(channel, importance);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,8 @@ public class NotificationRecordLoggerImpl implements NotificationRecordLogger {
|
|||||||
/* int32 style = 11 */ p.getStyle(),
|
/* int32 style = 11 */ p.getStyle(),
|
||||||
/* int32 num_people = 12 */ p.getNumPeople(),
|
/* int32 num_people = 12 */ p.getNumPeople(),
|
||||||
/* int32 position = 13 */ position,
|
/* int32 position = 13 */ position,
|
||||||
/* android.stats.sysui.NotificationImportance importance = 14 */ r.getImportance(),
|
/* android.stats.sysui.NotificationImportance importance = 14 */
|
||||||
|
NotificationRecordLogger.getLoggingImportance(r),
|
||||||
/* int32 alerting = 15 */ buzzBeepBlink,
|
/* int32 alerting = 15 */ buzzBeepBlink,
|
||||||
/* NotificationImportanceExplanation importance_source = 16 */
|
/* NotificationImportanceExplanation importance_source = 16 */
|
||||||
r.getImportanceExplanationCode(),
|
r.getImportanceExplanationCode(),
|
||||||
|
|||||||
@@ -838,6 +838,8 @@ public class PreferencesHelper implements RankingConfig {
|
|||||||
// Apps are allowed to downgrade channel importance if the user has not changed any
|
// Apps are allowed to downgrade channel importance if the user has not changed any
|
||||||
// fields on this channel yet.
|
// fields on this channel yet.
|
||||||
final int previousExistingImportance = existing.getImportance();
|
final int previousExistingImportance = existing.getImportance();
|
||||||
|
final int previousLoggingImportance =
|
||||||
|
NotificationChannelLogger.getLoggingImportance(existing);
|
||||||
if (existing.getUserLockedFields() == 0 &&
|
if (existing.getUserLockedFields() == 0 &&
|
||||||
channel.getImportance() < existing.getImportance()) {
|
channel.getImportance() < existing.getImportance()) {
|
||||||
existing.setImportance(channel.getImportance());
|
existing.setImportance(channel.getImportance());
|
||||||
@@ -867,7 +869,7 @@ public class PreferencesHelper implements RankingConfig {
|
|||||||
updateConfig();
|
updateConfig();
|
||||||
if (needsPolicyFileChange && !wasUndeleted) {
|
if (needsPolicyFileChange && !wasUndeleted) {
|
||||||
mNotificationChannelLogger.logNotificationChannelModified(existing, uid, pkg,
|
mNotificationChannelLogger.logNotificationChannelModified(existing, uid, pkg,
|
||||||
previousExistingImportance, false);
|
previousLoggingImportance, false);
|
||||||
}
|
}
|
||||||
return needsPolicyFileChange;
|
return needsPolicyFileChange;
|
||||||
}
|
}
|
||||||
@@ -985,7 +987,7 @@ public class PreferencesHelper implements RankingConfig {
|
|||||||
MetricsLogger.action(getChannelLog(updatedChannel, pkg)
|
MetricsLogger.action(getChannelLog(updatedChannel, pkg)
|
||||||
.setSubtype(fromUser ? 1 : 0));
|
.setSubtype(fromUser ? 1 : 0));
|
||||||
mNotificationChannelLogger.logNotificationChannelModified(updatedChannel, uid, pkg,
|
mNotificationChannelLogger.logNotificationChannelModified(updatedChannel, uid, pkg,
|
||||||
channel.getImportance(), fromUser);
|
NotificationChannelLogger.getLoggingImportance(channel), fromUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (updatedChannel.canBypassDnd() != mAreChannelsBypassingDnd
|
if (updatedChannel.canBypassDnd() != mAreChannelsBypassingDnd
|
||||||
|
|||||||
Reference in New Issue
Block a user