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

option java_package = "android";
option java_multiple_files = true;

import "google/protobuf/descriptor.proto";

package android;

// TODO: It's better to track this by semantic types and set policy for those.
// Do this for now to bootstrap the tools.
enum Destination {
    // Fields or messages annotated with DEST_LOCAL must never be
    // extracted from the device automatically. They can be accessed
    // by tools on the developer's workstation, and if they are sent
    // to another device that must be by the user, with a PII warning. (TBD)
    DEST_LOCAL = 0;

    // Fields or messages annotated with DEST_EXPLICIT can be sent
    // off the device with an explicit user action.
    DEST_EXPLICIT = 1;

    // Fields or messages annotated with DEST_LOCAL can be sent by
    // automatic means, without per-sending user consent. The user
    // still must have previously accepted a consent to share this
    // information.
    DEST_AUTOMATIC = 2;

    // There is no more permissive option than DEST_AUTOMATIC.
}

message PrivacyFlags {
  optional Destination dest = 1  [
      default = DEST_LOCAL
  ];
}

extend google.protobuf.FieldOptions {
    // Flags for automatically filtering statistics
    optional PrivacyFlags privacy = 102672883;
}
