// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

syntax = "proto3";

package tools.android.avd.proto;

message CIPDPackage {
  // CIPD package name.
  string package_name = 1;
  // CIPD package version to use.
  // Ignored when creating AVD packages.
  string version = 2;
  // Path into which the package should be installed.
  // relative to pylib.local.emulator.avd.COMMON_CIPD_ROOT.
  //
  // When empty, the script will use the basename of the config file name
  optional string dest_path = 3;
}

message ScreenSettings {
  // Screen height in pixels.
  uint32 height = 1;

  // Screen width in pixels.
  uint32 width = 2;

  // Scren density in dpi.
  uint32 density = 3;
}

message SdcardSettings {
  // Size of the sdcard that should be created for this AVD.
  // Can be anything that `mksdcard` or `avdmanager -c` would accept:
  //   - a number of bytes
  //   - a number followed by K, M, or G, indicating that many
  //     KiB, MiB, or GiB, respectively.
  string size = 1;
}

// settings only used during AVD creation.
message AvdSettings {
  // Settings pertaining to the AVD's screen.
  ScreenSettings screen = 1;

  // Settings pertaining to the AVD's sdcard.
  SdcardSettings sdcard = 2;

  // Advanced Features for AVD. The <key,value> pairs here will override the
  // default ones in the given system image.
  // See https://bit.ly/2P1qK2X for all the available keys.
  // The values should be on, off, default, or null
  map<string, string> advanced_features = 3;

  // The physical RAM size on the device, in megabytes.
  uint32 ram_size = 4;

  // The properties for AVD. The <key,value> pairs here will override the
  // default ones in the given system image.
  // See https://bit.ly/3052c1V for all the available keys and values.
  //
  // Note the screen, sdcard, ram_size above are ultimately translated to
  // AVD properties and they won't be overwritten by values here.
  map<string, string> avd_properties = 5;
}

// settings used during AVD launch. Needed in both creation and deploy textpb.
message AvdLaunchSettings {
  // The mode of hardware OpenGL ES emulation.
  // See "emulator -help-gpu" for a full list of modes.
  string gpu_mode = 1;
}

message Avd {
  // Next ID: 14

  // The emulator to use in running the AVD.
  CIPDPackage emulator_package = 1;

  // The system image to use.
  oneof system_image {
    // system image fetched from android sdkmanager
    CIPDPackage system_image_package = 2;
    // The raw system image, fetched directly from android ci system
    CIPDPackage raw_system_image_package = 13;
  }
  // The name of the system image to use, as reported by sdkmanager.
  //
  // When empty, the script will parse the "package.xml" file from system image
  // and use the attribute value "path" from the element "localPackage".
  optional string system_image_name = 3;

  // The AVD to create or use.
  // (Only the package_name is used during AVD creation.)
  CIPDPackage avd_package = 4;
  // The name of the AVD to create or use.
  string avd_name = 5;

  // How to configure the AVD at creation.
  AvdSettings avd_settings = 6;

  // This includes additional AvdSettings so that we can create AVDs with
  // slightly different configs
  map<string, AvdSettings> avd_variants = 12;

  // min sdk level for emulator.
  uint32 min_sdk = 7;

  // The partition to install the privileged apk.
  // version 27 and below is /system. After that it can be
  // /system, /product, or /vendor
  string install_privileged_apk_partition = 8;

  // Needed for gmscore/phonesky support.
  repeated CIPDPackage privileged_apk = 9;
  repeated CIPDPackage additional_apk = 10;

  // AVD settings used during AVD launch.
  AvdLaunchSettings avd_launch_settings = 11;
}
