/* * Copyright (C) 2017 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.service.notification; option java_multiple_files = true; option java_outer_classname = "NotificationServiceProto"; import "frameworks/base/core/proto/android/app/notification_channel.proto"; import "frameworks/base/core/proto/android/app/notification_channel_group.proto"; import "frameworks/base/core/proto/android/app/notificationmanager.proto"; import "frameworks/base/core/proto/android/content/component_name.proto"; import "frameworks/base/core/proto/android/media/audioattributes.proto"; import "frameworks/base/core/proto/android/privacy.proto"; message NotificationServiceDumpProto { option (.android.msg_privacy).dest = DEST_AUTOMATIC; repeated NotificationRecordProto records = 1; optional ZenModeProto zen = 2; optional ManagedServicesProto notification_listeners = 3; optional int32 listener_hints = 4; repeated ListenersDisablingEffectsProto listeners_disabling_effects = 5; optional ManagedServicesProto notification_assistants = 6; optional ManagedServicesProto condition_providers = 7; optional RankingHelperProto ranking_config = 8; } message NotificationRecordProto { option (.android.msg_privacy).dest = DEST_AUTOMATIC; optional string key = 1; enum State { ENQUEUED = 0; POSTED = 1; SNOOZED = 2; } optional State state = 2; optional int32 flags = 3; optional string channel_id = 4 [ (.android.privacy).dest = DEST_EXPLICIT ]; optional string sound = 5 [ (.android.privacy).dest = DEST_EXPLICIT ]; optional .android.media.AudioAttributesProto audio_attributes = 6; optional bool can_vibrate = 7; optional bool can_show_light = 8; optional string group_key = 9 [ (.android.privacy).dest = DEST_EXPLICIT ]; optional sint32 importance = 10; // The package the notification was posted for. optional string package = 11; // The package that posted the notification. It might not be the same as package. optional string delegate_package = 12; } message ListenersDisablingEffectsProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; optional int32 hint = 1; reserved 2; // ManagedServiceInfoProto listeners repeated android.content.ComponentNameProto listener_components = 3; } message ManagedServiceInfoProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; optional android.content.ComponentNameProto component = 1; optional int32 user_id = 2; optional string service = 3; optional bool is_system = 4; optional bool is_guest = 5; } message ManagedServicesProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; // Hard-coded string identifying what the service config is for // (eg: "notification assistant" or "notification listener"). optional string caption = 1; message ServiceProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; // Package or component name. repeated string name = 1; optional int32 user_id = 2; optional bool is_primary = 3; } repeated ServiceProto approved = 2; // All of this type/caption enabled for current profiles. repeated android.content.ComponentNameProto enabled = 3; repeated ManagedServiceInfoProto live_services = 4; // Was: repeated ComponentNameProto, when snoozed services were not per-user-id. reserved 5; message SnoozedServices { option (android.msg_privacy).dest = DEST_AUTOMATIC; optional int32 user_id = 1; repeated android.content.ComponentNameProto snoozed = 2; } // Snoozed for current profiles. repeated SnoozedServices snoozed = 6; } message RankingHelperProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; repeated string notification_signal_extractors = 1; message RecordProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; optional string package = 1; // Default value is UNKNOWN_UID = USER_NULL = -10000. optional int32 uid = 2; // Default is IMPORTANCE_UNSPECIFIED (-1000). optional sint32 importance = 3; // Default is PRIORITY_DEFAULT (0). optional int32 priority = 4; // Default is VISIBILITY_NO_OVERRIDE (-1000). optional sint32 visibility = 5; // Default is true. optional bool show_badge = 6; repeated android.app.NotificationChannelProto channels = 7; repeated android.app.NotificationChannelGroupProto channel_groups = 8; } repeated RecordProto records = 2; repeated RecordProto records_restored_without_uid = 3; } enum ZenMode { ZEN_MODE_OFF = 0; ZEN_MODE_IMPORTANT_INTERRUPTIONS = 1; ZEN_MODE_NO_INTERRUPTIONS = 2; ZEN_MODE_ALARMS = 3; } // An android.service.notification.Condition object. message ConditionProto { option (android.msg_privacy).dest = DEST_EXPLICIT; // The URI representing the rule being updated. optional string id = 1; // A user visible description of the rule state. optional string summary = 2; // Android generated strings that detail when ZenMode will end. optional string line_1 = 3; optional string line_2 = 4; optional int32 icon = 5 [ (android.privacy).dest = DEST_AUTOMATIC ]; enum State { // Indicates that Do Not Disturb should be turned off. STATE_FALSE = 0; // Indicates that Do Not Disturb should be turned on. STATE_TRUE = 1; STATE_UNKNOWN = 2; STATE_ERROR = 3; } optional State state = 6 [ (android.privacy).dest = DEST_AUTOMATIC ]; optional int32 flags = 7 [ (android.privacy).dest = DEST_AUTOMATIC ]; } // An android.service.notification.ZenModeConfig.ZenRule object. message ZenRuleProto { option (android.msg_privacy).dest = DEST_EXPLICIT; // Required for automatic ZenRules (unique). optional string id = 1; // Required for automatic ZenRules. optional string name = 2; // Required for automatic ZenRules. optional int64 creation_time_ms = 3 [ (android.privacy).dest = DEST_AUTOMATIC ]; optional bool enabled = 4 [ (android.privacy).dest = DEST_AUTOMATIC ]; // Package name, only used for manual ZenRules. optional string enabler = 5 [ (android.privacy).dest = DEST_AUTOMATIC ]; // User manually disabled this instance. optional bool is_snoozing = 6 [ (android.privacy).dest = DEST_AUTOMATIC ]; optional ZenMode zen_mode = 7 [ (android.privacy).dest = DEST_AUTOMATIC ]; // Required for automatic ZenRules. The condition's ID, which is the URI // representing the rule being updated. optional string condition_id = 8; optional ConditionProto condition = 9; optional android.content.ComponentNameProto component = 10; optional ZenPolicyProto zenPolicy = 11; // Indicates whether this ZenRule has been modified after its initial creation optional bool modified = 12 [ (android.privacy).dest = DEST_AUTOMATIC ]; } // A dump from com.android.server.notification.ZenModeHelper. message ZenModeProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; optional ZenMode zen_mode = 1; repeated ZenRuleProto enabled_active_conditions = 2; optional int32 suppressed_effects = 3; repeated android.content.ComponentNameProto suppressors = 4; optional android.app.PolicyProto policy = 5; } // An android.service.notification.ZenPolicy object message ZenPolicyProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; enum State { STATE_UNSET = 0; STATE_ALLOW = 1; STATE_DISALLOW = 2; } // Notifications and sounds allowed/disallowed when DND is active optional State reminders = 1; optional State events = 2; optional State messages = 3; optional State calls = 4; optional State repeat_callers = 5; optional State alarms = 6; optional State media = 7; optional State system = 8; // Visual effects allowed/disallowed for intercepted notifications when DND is active optional State full_screen_intent = 9; optional State lights = 10; optional State peek = 11; optional State status_bar = 12; optional State badge= 13; optional State ambient = 14; optional State notification_list = 15; enum Sender { SENDER_UNSET = 0; // Any sender is prioritized. SENDER_ANY = 1; // Saved contacts are prioritized. SENDER_CONTACTS = 2; // Only starred contacts are prioritized. SENDER_STARRED = 3; // No calls/messages are prioritized. SENDER_NONE = 4; } optional Sender priority_calls = 16; optional Sender priority_messages = 17; } // Next Tag: 2 message PackageRemoteViewInfoProto { optional string package_name = 1; // add per-package additional info here (like channels) } // Next Tag: 2 message NotificationRemoteViewsProto { repeated PackageRemoteViewInfoProto package_remote_view_info = 1; } // Enum used in DNDModeProto to specify the zen mode setting. enum LoggedZenMode { ROOT_CONFIG = -1; // Used to distinguish config (one per user) from the rules. OFF = 0; IMPORTANT_INTERRUPTIONS = 1; NO_INTERRUPTIONS = 2; ALARMS = 3; } /** * Atom that represents an item in the list of Do Not Disturb rules, pulled from * NotificationManagerService.java. */ message DNDModeProto { optional int32 user = 1; // Android user ID (0, 1, 10, ...) optional bool enabled = 2; // true for ROOT_CONFIG if a manualRule is enabled optional bool channels_bypassing = 3; // only valid for ROOT_CONFIG optional LoggedZenMode zen_mode = 4; // id is one of the system default rule IDs, or empty // May also be "MANUAL_RULE" to indicate app-activation of the manual rule. optional string id = 5; optional int32 uid = 6; // currently only SYSTEM_UID or 0 for other optional DNDPolicyProto policy = 7; } // Enum used in DNDPolicyProto for a particular policy parameter's state. enum State { STATE_UNSET = 0; STATE_ALLOW = 1; STATE_DISALLOW = 2; } // Enum used in DNDPolicyProto for which people are allowed to break through. enum PeopleType { PEOPLE_UNSET = 0; PEOPLE_ANYONE = 1; PEOPLE_CONTACTS = 2; PEOPLE_STARRED = 3; PEOPLE_NONE = 4; } // Enum used in DNDPolicyProto for conversation types allowed to break through. enum ConversationType { CONV_UNSET = 0; CONV_ANYONE = 1; CONV_IMPORTANT = 2; CONV_NONE = 3; } /** * Message that represents a Do Not Disturb policy, an optional detail proto for DNDModeProto. */ message DNDPolicyProto { optional State calls = 1; optional State repeat_callers = 2; optional State messages = 3; optional State conversations = 4; optional State reminders = 5; optional State events = 6; optional State alarms = 7; optional State media = 8; optional State system = 9; optional State fullscreen = 10; optional State lights = 11; optional State peek = 12; optional State status_bar = 13; optional State badge = 14; optional State ambient = 15; optional State notification_list = 16; optional PeopleType allow_calls_from = 17; optional PeopleType allow_messages_from = 18; optional ConversationType allow_conversations_from = 19; optional ChannelPolicy allow_channels = 20; } // Enum identifying the type of rule that changed; values set to match ones used in the // DNDStateChanged proto. enum RuleType { RULE_TYPE_UNKNOWN = 0; RULE_TYPE_MANUAL = 1; RULE_TYPE_AUTOMATIC = 2; } // Enum used in DNDPolicyProto to indicate the type of channels permitted to // break through DND. Mirrors values in ZenPolicy. enum ChannelPolicy { CHANNEL_POLICY_UNSET = 0; CHANNEL_POLICY_PRIORITY = 1; CHANNEL_POLICY_NONE = 2; }