OSDN Git Service

incidentd: creating PolicyProto for NotificationManager
authorKweku Adams <kwekua@google.com>
Mon, 25 Sep 2017 23:29:54 +0000 (16:29 -0700)
committerKweku Adams <kwekua@google.com>
Mon, 25 Sep 2017 23:33:44 +0000 (16:33 -0700)
The previous code saved a String in the proto like
"NotificationManager.Policy[priorityCategories=PRIORITY_CATEGORY_REMINDERS,PRIORITY_CATEGORY_EVENTS,PRIORITY_CATEGORY_MESSAGES,PRIORITY_CATEGORY_CALLS,PRIORITY_CATEGORY_REPEAT_CALLERS,priorityCallSenders=PRIORITY_SENDERS_STARRED,priorityMessageSenders=PRIORITY_SENDERS_STARRED,suppressedVisualEffects=SUPPRESSED_EFFECT_SCREEN_OFF]".
This unfortunately would mean that the String would have to be parsed on
the server-side, which kinda defeats the purpose of migrating to protos,
so I made a proto for this :)

BUG: 65750824
Test: flash device and check incident.proto output, comparing it to the previous output
Change-Id: I87607dc7b72ce3519132da23167b4bdce3b7ef4c

core/java/android/app/NotificationManager.java
core/proto/android/app/notificationmanager.proto [new file with mode: 0644]
core/proto/android/service/notification.proto
services/core/java/com/android/server/notification/ZenModeHelper.java

index 8fa7d6c..eb52cb7 100644 (file)
@@ -41,6 +41,7 @@ import android.provider.Settings.Global;
 import android.service.notification.StatusBarNotification;
 import android.service.notification.ZenModeConfig;
 import android.util.Log;
+import android.util.proto.ProtoOutputStream;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -1061,6 +1062,27 @@ public class NotificationManager {
                     + "]";
         }
 
+        /** @hide */
+        public void toProto(ProtoOutputStream proto, long fieldId) {
+            final long pToken = proto.start(fieldId);
+
+            bitwiseToProtoEnum(proto, PolicyProto.PRIORITY_CATEGORIES, priorityCategories);
+            proto.write(PolicyProto.PRIORITY_CALL_SENDER, priorityCallSenders);
+            proto.write(PolicyProto.PRIORITY_MESSAGE_SENDER, priorityMessageSenders);
+            bitwiseToProtoEnum(
+                    proto, PolicyProto.SUPPRESSED_VISUAL_EFFECTS, suppressedVisualEffects);
+
+            proto.end(pToken);
+        }
+
+        private static void bitwiseToProtoEnum(ProtoOutputStream proto, long fieldId, int data) {
+            for (int i = 1; data > 0; ++i, data >>>= 1) {
+                if ((data & 1) == 1) {
+                    proto.write(fieldId, i);
+                }
+            }
+        }
+
         public static String suppressedEffectsToString(int effects) {
             if (effects <= 0) return "";
             final StringBuilder sb = new StringBuilder();
diff --git a/core/proto/android/app/notificationmanager.proto b/core/proto/android/app/notificationmanager.proto
new file mode 100644 (file)
index 0000000..4dfd0cf
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * 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 = "proto3";
+
+option java_package = "android.app";
+option java_multiple_files = true;
+
+package android.app;
+
+/**
+ * An android.app.NotificationMananger.Policy object.
+ */
+message PolicyProto {
+    enum Category {
+        CATEGORY_UNKNOWN = 0;
+        // Reminder notifications are prioritized.
+        REMINDERS = 1;
+        // Event notifications are prioritized.
+        EVENTS = 2;
+        // Message notifications are prioritized.
+        MESSAGES = 3;
+        // Calls are prioritized.
+        CALLS = 4;
+        // Calls from repeat callers are prioritized.
+        REPEAT_CALLERS = 5;
+    }
+    repeated Category priority_categories = 1;
+
+    enum Sender {
+        // Any sender is prioritized.
+        ANY = 0;
+        // Saved contacts are prioritized.
+        CONTACTS = 1;
+        // Only starred contacts are prioritized.
+        STARRED = 2;
+    }
+    Sender priority_call_sender = 2;
+    Sender priority_message_sender = 3;
+
+    enum SuppressedVisualEffect {
+        SVE_UNKNOWN = 0;
+        // Whether notifications suppressed by DND should not interrupt visually
+        // (e.g. with notification lights or by turning the screen on) when the
+        // screen is off.
+        SCREEN_OFF = 1;
+        // Whether notifications suppressed by DND should not interrupt visually
+        // when the screen is on (e.g. by peeking onto the screen).
+        SCREEN_ON = 2;
+    }
+    repeated SuppressedVisualEffect suppressed_visual_effects = 4;
+}
index a8482a1..05afe52 100644 (file)
@@ -21,6 +21,7 @@ package android.service.notification;
 option java_multiple_files = true;
 option java_outer_classname = "NotificationServiceProto";
 
+import "frameworks/base/core/proto/android/app/notificationmanager.proto";
 import "frameworks/base/core/proto/android/content/component_name.proto";
 
 message NotificationServiceDumpProto {
@@ -98,7 +99,7 @@ message ZenModeProto {
     repeated string enabled_active_conditions = 2;
     int32 suppressed_effects = 3;
     repeated string suppressors = 4;
-    string policy = 5;
+    android.app.PolicyProto policy = 5;
 }
 
 enum ZenMode {
index ffdafc5..9fcc67d 100644 (file)
@@ -567,7 +567,7 @@ public class ZenModeHelper {
                     proto.write(ZenModeProto.ENABLED_ACTIVE_CONDITIONS, rule.toString());
                 }
             }
-            proto.write(ZenModeProto.POLICY, mConfig.toNotificationPolicy().toString());
+            mConfig.toNotificationPolicy().toProto(proto, ZenModeProto.POLICY);
             proto.write(ZenModeProto.SUPPRESSED_EFFECTS, mSuppressedEffects);
         }
     }