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
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;
+ "]";
}
+ /** @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();
--- /dev/null
+/*
+ * 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;
+}
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 {
repeated string enabled_active_conditions = 2;
int32 suppressed_effects = 3;
repeated string suppressors = 4;
- string policy = 5;
+ android.app.PolicyProto policy = 5;
}
enum ZenMode {
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);
}
}