/*
 * Copyright (C) 2016 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_multiple_files = true;
option java_outer_classname = "IncidentProtoMetadata";

import "frameworks/base/libs/incident/proto/android/privacy.proto";
import "frameworks/base/core/proto/android/service/appwidget.proto";
import "frameworks/base/core/proto/android/service/battery.proto";
import "frameworks/base/core/proto/android/service/graphicsstats.proto";
import "frameworks/base/core/proto/android/service/fingerprint.proto";
import "frameworks/base/core/proto/android/service/diskstats.proto";
import "frameworks/base/core/proto/android/service/netstats.proto";
import "frameworks/base/core/proto/android/service/notification.proto";
import "frameworks/base/core/proto/android/service/package.proto";
import "frameworks/base/core/proto/android/service/power.proto";
import "frameworks/base/core/proto/android/providers/settings.proto";

package android.os;

message IncidentHeaderProto {
    enum Cause {
        CAUSE_UNKNOWN = 0;
        CAUSE_USER = 1;
        CAUSE_ANR = 2;
        CAUSE_CRASH = 3;
    }

    Cause cause = 1;
}

message IncidentProto {
    // Incident header
    repeated IncidentHeaderProto header = 1;

    // Device information
    //SystemProperties system_properties = 1000;

    // Linux services
    //Procrank procrank = 2000;
    //PageTypeInfo page_type_info = 2001;
    //KernelWakeSources kernel_wake_sources = 2002;

    // System Services
    android.service.fingerprint.FingerprintServiceDumpProto fingerprint = 3000;
    android.service.NetworkStatsServiceDumpProto netstats = 3001;
    android.providers.settings.SettingsServiceDumpProto settings = 3002;
    android.service.appwidget.AppWidgetServiceDumpProto appwidget = 3003;
    android.service.battery.BatteryServiceDumpProto battery = 3006;
    android.service.diskstats.DiskStatsServiceDumpProto diskstats = 3007;
    android.service.notification.NotificationServiceDumpProto notification = 3004;
    android.service.pm.PackageServiceDumpProto package = 3008;
    android.service.power.PowerServiceDumpProto power = 3009;
    android.service.GraphicsStatsServiceDumpProto graphicsstats = 3005;
}
