diff options
| author | 2018-01-26 22:07:21 +0000 | |
|---|---|---|
| committer | 2018-01-26 22:07:21 +0000 | |
| commit | c110e17bef09da1e03cc2e99eaa8d5b3269a8c20 (patch) | |
| tree | 481f9390f264180d4130e759697f1e07785bd7f5 | |
| parent | 618e86023fced9085bd02a533d4a61fa34d0952d (diff) | |
| parent | 99546338273fd2fdbcab2d5cd0dfbc2035b935e8 (diff) | |
Merge "incidentd: Adding privacy tag and expanding field."
9 files changed, 155 insertions, 27 deletions
diff --git a/core/java/android/service/notification/Condition.java b/core/java/android/service/notification/Condition.java index 2a352adcee18..b6c6bdc00bbe 100644 --- a/core/java/android/service/notification/Condition.java +++ b/core/java/android/service/notification/Condition.java @@ -18,11 +18,11 @@ package android.service.notification; import android.annotation.IntDef; import android.annotation.SystemApi; -import android.app.AutomaticZenRule; import android.content.Context; import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; +import android.util.proto.ProtoOutputStream; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -161,6 +161,22 @@ public final class Condition implements Parcelable { .append(']').toString(); } + /** @hide */ + public void writeToProto(ProtoOutputStream proto, long fieldId) { + final long token = proto.start(fieldId); + + // id is guarantreed not to be null. + proto.write(ConditionProto.ID, id.toString()); + proto.write(ConditionProto.SUMMARY, summary); + proto.write(ConditionProto.LINE_1, line1); + proto.write(ConditionProto.LINE_2, line2); + proto.write(ConditionProto.ICON, icon); + proto.write(ConditionProto.STATE, state); + proto.write(ConditionProto.FLAGS, flags); + + proto.end(token); + } + @SystemApi public static String stateToString(int state) { if (state == STATE_FALSE) return "STATE_FALSE"; diff --git a/core/java/android/service/notification/ZenModeConfig.java b/core/java/android/service/notification/ZenModeConfig.java index f658ae03c927..bb88e1a20f73 100644 --- a/core/java/android/service/notification/ZenModeConfig.java +++ b/core/java/android/service/notification/ZenModeConfig.java @@ -33,6 +33,7 @@ import android.text.format.DateFormat; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Slog; +import android.util.proto.ProtoOutputStream; import com.android.internal.R; @@ -1262,6 +1263,30 @@ public class ZenModeConfig implements Parcelable { .append(']').toString(); } + /** @hide */ + public void writeToProto(ProtoOutputStream proto, long fieldId) { + final long token = proto.start(fieldId); + + proto.write(ZenRuleProto.ID, id); + proto.write(ZenRuleProto.NAME, name); + proto.write(ZenRuleProto.CREATION_TIME_MS, creationTime); + proto.write(ZenRuleProto.ENABLED, enabled); + proto.write(ZenRuleProto.ENABLER, enabler); + proto.write(ZenRuleProto.IS_SNOOZING, snoozing); + proto.write(ZenRuleProto.ZEN_MODE, zenMode); + if (conditionId != null) { + proto.write(ZenRuleProto.CONDITION_ID, conditionId.toString()); + } + if (condition != null) { + condition.writeToProto(proto, ZenRuleProto.CONDITION); + } + if (component != null) { + component.writeToProto(proto, ZenRuleProto.COMPONENT); + } + + proto.end(token); + } + private static void appendDiff(Diff d, String item, ZenRule from, ZenRule to) { if (d == null) return; if (from == null) { diff --git a/core/proto/android/app/notification.proto b/core/proto/android/app/notification.proto index 379a4ae8e2ac..c7e313aa5801 100644 --- a/core/proto/android/app/notification.proto +++ b/core/proto/android/app/notification.proto @@ -18,10 +18,10 @@ syntax = "proto2"; option java_package = "android.app"; option java_multiple_files = true; -import "frameworks/base/libs/incident/proto/android/privacy.proto"; - package android.app; +import "frameworks/base/libs/incident/proto/android/privacy.proto"; + /** * An android.app.Notification object. * Deprecated fields are not included in the proto. diff --git a/core/proto/android/app/notification_channel.proto b/core/proto/android/app/notification_channel.proto index 0388547e009f..337aa1c20c7a 100644 --- a/core/proto/android/app/notification_channel.proto +++ b/core/proto/android/app/notification_channel.proto @@ -21,19 +21,22 @@ option java_multiple_files = true; package android.app; import "frameworks/base/core/proto/android/media/audioattributes.proto"; +import "frameworks/base/libs/incident/proto/android/privacy.proto"; /** * An android.app.NotificationChannel object. */ message NotificationChannelProto { - optional string id = 1; - optional string name = 2; - optional string description = 3; + option (.android.msg_privacy).dest = DEST_AUTOMATIC; + + optional string id = 1 [ (android.privacy).dest = DEST_EXPLICIT ]; + optional string name = 2 [ (android.privacy).dest = DEST_EXPLICIT ]; + optional string description = 3 [ (android.privacy).dest = DEST_EXPLICIT ]; optional int32 importance = 4; optional bool can_bypass_dnd = 5; // Default is VISIBILITY_NO_OVERRIDE (-1000). optional int32 lockscreen_visibility = 6; - optional string sound = 7; + optional string sound = 7 [ (android.privacy).dest = DEST_EXPLICIT ]; optional bool use_lights = 8; // Default is 0. optional int32 light_color = 9; @@ -46,7 +49,7 @@ message NotificationChannelProto { optional bool show_badge = 13; // Default is false. optional bool is_deleted = 14; - optional string group = 15; + optional string group = 15 [ (android.privacy).dest = DEST_EXPLICIT ]; optional android.media.AudioAttributesProto audio_attributes = 16; // If this is a blockable system notification channel. optional bool is_blockable_system = 17; diff --git a/core/proto/android/app/notification_channel_group.proto b/core/proto/android/app/notification_channel_group.proto index 89a540f2012c..7b270d74f2de 100644 --- a/core/proto/android/app/notification_channel_group.proto +++ b/core/proto/android/app/notification_channel_group.proto @@ -21,11 +21,14 @@ option java_multiple_files = true; package android.app; import "frameworks/base/core/proto/android/app/notification_channel.proto"; +import "frameworks/base/libs/incident/proto/android/privacy.proto"; /** * An android.app.NotificationChannelGroup object. */ message NotificationChannelGroupProto { + option (.android.msg_privacy).dest = DEST_EXPLICIT; + optional string id = 1; optional string name = 2; optional string description = 3; diff --git a/core/proto/android/app/notificationmanager.proto b/core/proto/android/app/notificationmanager.proto index 7d774aeab551..e991688c218c 100644 --- a/core/proto/android/app/notificationmanager.proto +++ b/core/proto/android/app/notificationmanager.proto @@ -20,10 +20,14 @@ option java_multiple_files = true; package android.app; +import "frameworks/base/libs/incident/proto/android/privacy.proto"; + /** - * An android.app.NotificationMananger.Policy object. + * An android.app.NotificationManager.Policy object. */ message PolicyProto { + option (.android.msg_privacy).dest = DEST_AUTOMATIC; + enum Category { CATEGORY_UNKNOWN = 0; // Reminder notifications are prioritized. @@ -36,6 +40,11 @@ message PolicyProto { CALLS = 4; // Calls from repeat callers are prioritized. REPEAT_CALLERS = 5; + // Alarms are prioritized. + ALARMS = 6; + // Media, system, game (catch-all for non-never suppressible sounds) are + // prioritized. + MEDIA_SYSTEM_OTHER = 7; } repeated Category priority_categories = 1; diff --git a/core/proto/android/service/notification.proto b/core/proto/android/service/notification.proto index 65df89a9a85e..9013a23664f6 100644 --- a/core/proto/android/service/notification.proto +++ b/core/proto/android/service/notification.proto @@ -25,8 +25,11 @@ 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/libs/incident/proto/android/privacy.proto"; message NotificationServiceDumpProto { + option (.android.msg_privacy).dest = DEST_AUTOMATIC; + repeated NotificationRecordProto records = 1; optional ZenModeProto zen = 2; @@ -45,7 +48,9 @@ message NotificationServiceDumpProto { } message NotificationRecordProto { - optional string key = 1; + option (.android.msg_privacy).dest = DEST_AUTOMATIC; + + optional string key = 1 [ (.android.privacy).dest = DEST_EXPLICIT ]; enum State { ENQUEUED = 0; @@ -54,21 +59,25 @@ message NotificationRecordProto { } optional State state = 2; optional int32 flags = 3; - optional string channelId = 4; - optional string sound = 5; + optional string channelId = 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; + optional string group_key = 9 [ (.android.privacy).dest = DEST_EXPLICIT ]; optional int32 importance = 10; } message ListenersDisablingEffectsProto { + option (android.msg_privacy).dest = DEST_AUTOMATIC; + optional int32 hint = 1; repeated ManagedServiceInfoProto listeners = 2; } message ManagedServiceInfoProto { + option (android.msg_privacy).dest = DEST_AUTOMATIC; + optional android.content.ComponentNameProto component = 1; optional int32 user_id = 2; optional string service = 3; @@ -77,10 +86,14 @@ message ManagedServiceInfoProto { } message ManagedServicesProto { - optional string caption = 1; + option (android.msg_privacy).dest = DEST_AUTOMATIC; + + optional string caption = 1 [ (.android.privacy).dest = DEST_EXPLICIT ]; message ServiceProto { - repeated string name = 1; + option (android.msg_privacy).dest = DEST_AUTOMATIC; + + repeated string name = 1 [ (.android.privacy).dest = DEST_EXPLICIT ]; optional int32 user_id = 2; optional bool is_primary = 3; } @@ -97,9 +110,13 @@ message ManagedServicesProto { } 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; @@ -118,16 +135,72 @@ message RankingHelperProto { repeated RecordProto records_restored_without_uid = 3; } -message ZenModeProto { - enum ZenMode { - ZEN_MODE_OFF = 0; - ZEN_MODE_IMPORTANT_INTERRUPTIONS = 1; - ZEN_MODE_NO_INTERRUPTIONS = 2; - ZEN_MODE_ALARMS = 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; + + optional string id = 1; + optional string summary = 2; + 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 (unique). + optional string id = 1; + // Required for automatic. + optional string name = 2; + // Required for automatic. + 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 rules. + 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. + optional string condition_id = 8; + optional ConditionProto condition = 9; + optional android.content.ComponentNameProto component = 10; +} + +// A dump from com.android.server.notification.ZenModeHelper. +message ZenModeProto { + option (android.msg_privacy).dest = DEST_AUTOMATIC; + optional ZenMode zen_mode = 1; - repeated string enabled_active_conditions = 2; + repeated ZenRuleProto enabled_active_conditions = 2; optional int32 suppressed_effects = 3; - repeated string suppressors = 4; + repeated android.content.ComponentNameProto suppressors = 4; optional android.app.PolicyProto policy = 5; } diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 4c9da8949cc9..5e3d77874e9b 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -3421,7 +3421,7 @@ public class NotificationManagerService extends SystemService { long zenLog = proto.start(NotificationServiceDumpProto.ZEN); mZenModeHelper.dump(proto); for (ComponentName suppressor : mEffectsSuppressors) { - proto.write(ZenModeProto.SUPPRESSORS, suppressor.toString()); + suppressor.writeToProto(proto, ZenModeProto.SUPPRESSORS); } proto.end(zenLog); diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java index 932e4f948a82..2859613c0047 100644 --- a/services/core/java/com/android/server/notification/ZenModeHelper.java +++ b/services/core/java/com/android/server/notification/ZenModeHelper.java @@ -553,16 +553,15 @@ public class ZenModeHelper { } void dump(ProtoOutputStream proto) { - proto.write(ZenModeProto.ZEN_MODE, mZenMode); synchronized (mConfig) { if (mConfig.manualRule != null) { - proto.write(ZenModeProto.ENABLED_ACTIVE_CONDITIONS, mConfig.manualRule.toString()); + mConfig.manualRule.writeToProto(proto, ZenModeProto.ENABLED_ACTIVE_CONDITIONS); } for (ZenRule rule : mConfig.automaticRules.values()) { if (rule.enabled && rule.condition.state == Condition.STATE_TRUE && !rule.snoozing) { - proto.write(ZenModeProto.ENABLED_ACTIVE_CONDITIONS, rule.toString()); + rule.writeToProto(proto, ZenModeProto.ENABLED_ACTIVE_CONDITIONS); } } mConfig.toNotificationPolicy().writeToProto(proto, ZenModeProto.POLICY); |