From 079fdaae9ef39229509c187b5e85b23a2df8e86d Mon Sep 17 00:00:00 2001 From: Will Brockman Date: Sun, 12 Jan 2020 16:45:03 -0500 Subject: [PATCH] Add notification atoms for statsd. Bug: 146488473 Bug: 147584635 Test: m out/soong/.intermediates/frameworks/base/framework-statslog-gen/gen/android/util/StatsLogInternal.java out/soong/.intermediates/frameworks/base/tools/stats_log_api_gen/statslog.cpp/gen/statslog.cpp Change-Id: Ia7bf24f65c8378c5c1b2d9d99995c5953e6929e7 --- cmds/statsd/src/atoms.proto | 124 ++++++++++++++++++ .../stats/sysui/notification_enums.proto | 29 ++++ 2 files changed, 153 insertions(+) create mode 100644 core/proto/android/stats/sysui/notification_enums.proto diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto index cbece78ec355b..0f52e45644543 100644 --- a/cmds/statsd/src/atoms.proto +++ b/cmds/statsd/src/atoms.proto @@ -53,6 +53,7 @@ import "frameworks/base/core/proto/android/stats/mediametrics/mediametrics.proto import "frameworks/base/core/proto/android/stats/mediaprovider/mediaprovider_enums.proto"; import "frameworks/base/core/proto/android/stats/storage/storage_enums.proto"; import "frameworks/base/core/proto/android/stats/style/style_enums.proto"; +import "frameworks/base/core/proto/android/stats/sysui/notification_enums.proto"; import "frameworks/base/core/proto/android/telecomm/enums.proto"; import "frameworks/base/core/proto/android/telephony/enums.proto"; import "frameworks/base/core/proto/android/view/enums.proto"; @@ -339,6 +340,9 @@ message Atom { BootTimeEventUtcTime boot_time_event_utc_time_reported = 241; BootTimeEventErrorCode boot_time_event_error_code_reported = 242; UserspaceRebootReported userspace_reboot_reported = 243; + NotificationReported notification_reported = 244; + NotificationPanelReported notification_panel_reported = 245; + NotificationChannelModified notification_panel_modified = 246; } // Pulled events will start at field 10000. @@ -3309,6 +3313,10 @@ message GenericAtom { * this button" or "this dialog was displayed". * Keep the UI event stream clean: don't use for system or background events. * Log using the UiEventLogger wrapper - don't write with the StatsLog API directly. + * + * Logged from: + * frameworks/base/services/core/java/com/android/server/ + * frameworks/base/packages/SystemUI/src/com/android/systemui/ */ message UiEventReported { // The event_id. @@ -3319,6 +3327,122 @@ message UiEventReported { optional string package_name = 3; } +/** + * Reports a notification was created or updated. + * + * Logged from: + * frameworks/base/services/core/java/com/android/server/notification/ + */ +message NotificationReported { + // The event_id (as for UiEventReported). + optional int32 event_id = 1; + // The notifying app's uid and package. + optional int32 uid = 2 [(is_uid) = true]; + optional string package_name = 3; + // A small system-assigned identifier for the notification. + // Locally probably-unique, but expect collisions across users and/or days. + optional int32 instance_id = 4; + // The app-assigned notification ID and tag + optional int32 notification_id = 5; + optional string notification_tag = 6; + optional string channel_id = 7; // App-assigned channel ID + + // Grouping information + optional string group_id = 8; // Group the notification currently belongs to + optional int32 group_instance_id = 9; // Instance_id of the group-summary notification + optional bool is_group_summary = 10; // Tags the group-summary notification + + // Attributes + optional string category = 11; // App-assigned notification category (API-defined strings) + optional int32 style = 12; // App-assigned notification style + optional int32 num_people = 13; // Number of Person records attached to the notification + + // Ordering, importance and interruptiveness + + optional int32 position = 14; // Position in NotificationManager's list + + optional android.stats.sysui.NotificationImportance importance = 15; + optional int32 alerting = 16; // Bitfield, 1=buzz 2=beep 4=blink + + enum NotificationImportanceExplanation { + IMPORTANCE_EXPLANATION_UNKNOWN = 0; + IMPORTANCE_EXPLANATION_APP = 1; // App-specified channel importance. + IMPORTANCE_EXPLANATION_USER = 2; // User-specified channel importance. + IMPORTANCE_EXPLANATION_ASST = 3; // Notification Assistant override. + IMPORTANCE_EXPLANATION_SYSTEM = 4; // System override. + // Like _APP, but based on pre-channels priority signal. + IMPORTANCE_EXPLANATION_APP_PRE_CHANNELS = 5; + } + + optional NotificationImportanceExplanation importance_source = 17; + optional android.stats.sysui.NotificationImportance importance_initial = 18; + optional NotificationImportanceExplanation importance_initial_source = 19; + optional android.stats.sysui.NotificationImportance importance_asst = 20; + optional int32 assistant_hash = 21; + optional float assistant_ranking_score = 22; +} + +message Notification { + // The notifying app's uid and package. + optional int32 uid = 1 [(is_uid) = true]; + optional string package_name = 2; + // A small system-assigned identifier for the notification. + optional int32 instance_id = 3; + + // Grouping information. + optional int32 group_instance_id = 4; + optional bool is_group_summary = 5; + + // The section of the shade that the notification is in. + // See NotificationSectionsManager.PriorityBucket. + enum NotificationSection { + SECTION_UNKNOWN = 0; + SECTION_PEOPLE = 1; + SECTION_ALERTING = 2; + SECTION_SILENT = 3; + } + optional NotificationSection section = 6; +} + +message NotificationList { + repeated Notification notifications = 1; // An ordered sequence of notifications. +} + +/** + * Reports a notification panel was displayed, e.g. from the lockscreen or status bar. + * + * Logged from: + * frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/notification/ + */ +message NotificationPanelReported { + // The event_id (as for UiEventReported). + optional int32 event_id = 1; + optional int32 num_notifications = 2; + // The notifications in the panel, in the order that they appear there. + optional NotificationList notifications = 3 [(log_mode) = MODE_BYTES]; +} + +/** + * Reports a notification channel, or channel group, was created, updated, or deleted. + * + * Logged from: + * frameworks/base/services/core/java/com/android/server/notification/ + */ +message NotificationChannelModified { + // The event_id (as for UiEventReported). + optional int32 event_id = 1; + // The notifying app's uid and package. + optional int32 uid = 2 [(is_uid) = true]; + optional string package_name = 3; + // App-assigned notification channel ID or channel-group ID + optional string channel_id = 4; + // Previous importance setting, if applicable + optional android.stats.sysui.NotificationImportance old_importance = 5; + // New importance setting + optional android.stats.sysui.NotificationImportance importance = 6; +} + + /** * Logs when a biometric acquire event occurs. * diff --git a/core/proto/android/stats/sysui/notification_enums.proto b/core/proto/android/stats/sysui/notification_enums.proto new file mode 100644 index 0000000000000..09837022e50d3 --- /dev/null +++ b/core/proto/android/stats/sysui/notification_enums.proto @@ -0,0 +1,29 @@ +/* + * 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. + */ + +syntax = "proto2"; + +package android.stats.sysui; + +// Enum used in NotificationReported and NotificationChannelModified atoms +enum NotificationImportance { // Constants from NotificationManager.java + IMPORTANCE_UNSPECIFIED = -1000; // Should not occur for real notifications. + IMPORTANCE_NONE = 0; // No importance: does not show in the shade. + IMPORTANCE_MIN = 1; // Minimum to show in the shade. + IMPORTANCE_LOW = 2; // Shows in shade, maybe status bar, no buzz/beep. + IMPORTANCE_DEFAULT = 3; // Shows everywhere, makes noise, no heads-up. + IMPORTANCE_HIGH = 4; // Shows everywhere, makes noise, heads-up, may full-screen. +}