/*
 * 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";

package android.service.notification;

option java_multiple_files = true;
option java_outer_classname = "NotificationServiceProto";

message NotificationServiceDumpProto {
    repeated NotificationRecordProto records = 1;

    ZenModeProto zen = 2;
}

message NotificationRecordProto {
    string key = 1;
    State state = 2;
    int32 flags = 3;
    string channelId = 4;
    string sound = 5;
    int32 sound_usage = 6;
    bool can_vibrate = 7;
    bool can_show_light = 8;
    string group_key = 9;
    int32 importance = 10;
}

enum State {
    ENQUEUED = 0;

    POSTED = 1;

    SNOOZED = 2;
}

message ZenModeProto {
    ZenMode zen_mode = 1;
    repeated string enabled_active_conditions = 2;
    int32 suppressed_effects = 3;
    repeated string suppressors = 4;
    string policy = 5;
}

enum ZenMode {
    ZEN_MODE_OFF = 0;
    ZEN_MODE_IMPORTANT_INTERRUPTIONS = 1;
    ZEN_MODE_NO_INTERRUPTIONS = 2;
    ZEN_MODE_ALARMS = 3;
}