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

package android.os.incidentd;

import "frameworks/base/core/proto/android/os/metadata.proto";

message ReportFileProto {
    /**
     * Metadata about each of the calls to reportIncident that
     * initiated the incident report.
     */
    message Report {
        /**
         * Package name for broadcast receiver to be told when
         * the report is complete.
         */
        optional string pkg = 1;

        /**
         * Class name for broadcast receiver to be told when
         * the report is complete.
         */
        optional string cls = 2;

        /**
         * Privacy policy at which this report should be shared.
         */
        optional uint32 privacy_policy = 4;

        /**
         * Whether all available sections should be returned.
         */
        optional bool all_sections = 5;

        /**
         * If all_sections is not true, then this is the
         * list of sections that were requested.
         */
        repeated int32 section = 6;

        /**
         * Flattened IncidentHeaderProto that was passed with this
         * request.
         */
        repeated bytes header = 7;

        /**
         * Whether the user has approved this report to be shared with
         * the given client.
         */
        optional bool share_approved = 8;

        /**
         * Whether the report is gzipped.
         */
        optional bool gzip = 9;
    }

    /**
     * Metadata section recorded while the incident report
     * was taken.
     */
    optional android.os.IncidentMetadata metadata = 1;

    /**
     * Report data structures for the incident reports.
     */
    repeated Report report = 2;

    /**
     * The file name, relative to the work directory where
     * the data file is stored. The content of the data file
     * is an android.os.IncidentProto, without the metadata
     * or header sections.
     */
    optional string data_file = 3;

    /**
     * The privacy policy to which the file is already filtered.
     */
    optional uint32 privacy_policy = 4;

    /**
     * How big the data file is expected to be.  If the size
     * recorded here and the size on disk mismatch, then we
     * know there was an error.
     */
    optional int64 data_file_size = 5;

    /**
     * Whether this report has been finished, and is now
     * ready for broadcast / dropbox / etc.
     */
    optional bool completed = 6;
}

