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

option java_multiple_files = true;

import "frameworks/base/core/proto/android/privacy.proto";

package android.os;

// Android Platform Exported System Properties
// TODO: This is not the completed list, new properties need to be whitelisted.
message SystemPropertiesProto {

    // Properties that are not specified below would be appended here.
    // These values stay on device only.
    message Property {
        option (android.msg_privacy).dest = DEST_LOCAL;

        optional string name = 1;
        optional string value = 2;
    }
    repeated Property extra_properties = 1;

    message AacDrc {
        optional int32  boost = 1;
        optional int32  cut = 2;
        optional int32  enc_target_level = 3;
        optional int32  heavy = 4;
        optional int32  reference_level = 5;
    }
    optional AacDrc aac_drc = 2;

    message Aaudio {
        optional int32  hw_burst_min_usec = 1;
        optional int32  minimum_sleep_usec = 2;
        optional int32  mixer_bursts = 3;
        optional int32  mmap_exclusive_policy = 4;
        optional int32  mmap_policy = 5;
        optional int32  wakeup_delay_usec = 6;

        // Next Tag: 7
    }
    optional Aaudio aaudio = 3;

    optional int32  af_fast_track_multiplier = 4;

    message Camera {
        optional bool   disable_zsl_mode = 1;
        optional int32  fifo_disable = 2;

        // Next Tag: 3
    }
    optional Camera camera = 5;

    message DalvikVm {
        optional string appimageformat = 1;
        optional string backgroundgctype = 2;
        optional bool   checkjni = 3;
        optional string dex2oat_filter = 4;
        optional string dex2oat_flags = 5;
        optional int32  dex2oat_threads = 6;
        optional string dex2oat_Xms = 7;
        optional string dex2oat_Xmx = 8;
        optional bool   dexopt_secondary = 9;
        optional string execution_mode = 10;
        optional string extra_opts = 11;
        optional string gctype = 12;
        optional string heapgrowthlimit = 13;
        optional string heapmaxfree = 14;
        optional string heapminfree = 15;
        optional string heapsize = 16;
        optional string heapstartsize = 17;
        optional double heaptargetutilization = 18;
        optional int32  hot_startup_method_samples = 19;
        optional string image_dex2oat_filter = 20;
        optional string image_dex2oat_flags = 21;
        optional int32  image_dex2oat_threads = 22;
        optional string image_dex2oat_Xms = 23;
        optional string image_dex2oat_Xmx = 24;
        optional string isa_arm_features = 25;
        optional string isa_arm_variant = 26;
        optional string isa_arm64_features = 27;
        optional string isa_arm64_variant = 28;
        optional string isa_mips_features = 29;
        optional string isa_mips_variant = 30;
        optional string isa_mips64_features = 31;
        optional string isa_mips64_variant = 32;
        optional string isa_unknown_features = 33;
        optional string isa_unknown_variant = 34;
        optional string isa_x86_64_features = 35;
        optional string isa_x86_64_variant = 36;
        optional string isa_x86_features = 37;
        optional string isa_x86_variant = 38;
        optional string jitinitialsize = 39;
        optional string jitmaxsize = 40;
        optional int32  jitprithreadweight = 41;
        optional int32  jitthreshold = 42;
        optional int32  jittransitionweight = 43;
        optional string jniopts = 44;
        optional int32  lockprof_threshold = 45;
        optional bool   method_trace = 46;
        optional string method_trace_file = 47;
        optional int32  method_trace_file_siz = 48;
        optional bool   method_trace_stream = 49;
        optional bool   profilesystemserver = 50;
        optional string stack_trace_dir = 51;
        optional bool   usejit = 52;
        optional bool   usejitprofiles = 53;
        optional int32  zygote_max_boot_retry = 54;

        // Next Tag: 55
    }
    optional DalvikVm dalvik_vm = 6;

    optional bool   drm_64bit_enabled = 7;
    optional bool   drm_service_enabled = 8;
    optional bool   dumpstate_dry_run = 9;
    optional string gsm_sim_operator_numeric = 10;
    optional bool   hal_instrumentation_enable = 11;

    message InitSvc {
        option (android.msg_privacy).dest = DEST_AUTOMATIC;

        enum Status {
            STATUS_UNKNOWN = 0;
            STATUS_RUNNING = 1;
            STATUS_STOPPED = 2;
        }
        optional Status adbd = 1;
        optional Status audioserver = 2;
        optional Status bootanim = 3;
        optional Status bufferhubd = 4;
        optional Status cameraserver = 5;
        optional Status clear_bcb = 6;
        optional Status drm = 7;
        optional Status gatekeeperd = 8;
        optional Status healthd = 9;
        optional Status hidl_memory = 10;
        optional Status hostapd = 11;
        optional Status hwservicemanager = 12;
        optional Status installd = 13;
        optional Status keystore = 14;
        optional Status lmkd = 15;
        optional Status logd = 16;
        optional Status logd_reinit = 17;
        optional Status media = 18;
        optional Status mediadrm = 19;
        optional Status mediaextractor = 20;
        optional Status mediametrics = 21;
        optional Status netd = 22;
        optional Status performanced = 23;
        optional Status ril_daemon = 24;
        optional Status servicemanager = 25;
        optional Status storaged = 26;
        optional Status surfaceflinger = 27;
        optional Status thermalservice = 28;
        optional Status tombstoned = 29;
        optional Status ueventd = 30;
        optional Status update_engine = 31;
        optional Status update_verifier_nonencrypted = 32;
        optional Status virtual_touchpad = 33;
        optional Status vndservicemanager = 34;
        optional Status vold = 35;
        optional Status vr_hwc = 36;
        optional Status webview_zygote32 = 37;
        optional Status wificond = 38;
        optional Status wpa_supplicant = 39;
        optional Status zygote = 40;
        optional Status zygote_secondary = 41;

        // Next Tag: 42
    }
    optional InitSvc init_svc = 12;

    optional bool   keyguard_no_require_sim = 13;
    optional string libc_debug_malloc_options = 14;
    optional string libc_debug_malloc_program = 15;

    message Log {
        option (android.msg_privacy).dest = DEST_AUTOMATIC;

        optional string tag_wifi_hal = 1;
        optional string tag_stats_log = 2;

        // Next Tag: 3
    }
    optional Log log = 16;

    optional bool   media_mediadrmservice_enable = 17;
    optional bool   media_recorder_show_manufacturer_and_model = 18;

    message Persist {
        optional string config_calibration_fac = 1;
        optional int32  dbg_volte_avail_ovr = 2;
        optional int32  dbg_vt_avail_ovr = 3;
        optional int32  dbg_wfc_avail_ovr = 4;
        optional int32  radio_airplane_mode_on = 5;
        optional string radio_multisim_config = 6;
        optional int32  rcs_supported = 7;
        optional bool   sys_crash_rcu = 8;
        optional string sys_dalvik_vm_lib_2 = 9;
        optional float  sys_sf_color_saturation = 10;
        optional string sys_timezone = 11;

        // Next Tag: 12
    }
    optional Persist persist = 19;

    message PmDexopt {
        optional string ab_ota = 1;
        optional string bg_dexopt = 2;
        optional string boot = 3;
        optional string first_boot = 4;
        optional string install = 5;

        // Next Tag: 6
    }
    optional PmDexopt pm_dexopt = 20;

    // Read only properites on the device.
    message Ro {
        optional bool  adb_secure = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional string arch = 2;
        optional bool   audio_ignore_effects = 3;
        optional bool   audio_monitor_rotation = 4;
        optional string baseband = 5;
        optional string board_platform = 6;

        message Boot {
            optional string avb_version = 1;
            optional string baseband = 2;
            optional string bootdevice = 3;
            optional string bootloader = 4;
            repeated string boottime = 5;
            optional string console = 6;
            optional int32  fake_battery = 7;
            // The name of the hardware (from the kernel command line or /proc). It
            // SHOULD be reasonably human-readable.
            optional string hardware = 8;
            optional string hardware_color = 9;
            optional string hardware_revision = 10;
            // SKU is for small variants such as device color, targeted market,
            // ram/rom size, etc.
            optional string hardware_sku = 11;
            optional string keymaster = 12;
            optional string mode = 13;
            optional string revision = 14;
            optional string slot_suffix = 15;
            optional string vbmeta_avb_version = 16;
            optional string vendor_overlay_theme = 17;
            optional string verifiedbootstate = 18;
            optional string veritymode = 19;
            optional string wificountrycode = 20;

            // Next Tag: 21
        }
        optional Boot boot = 7;

        // boot.img's properties.
        message BootImage {
            option (android.msg_privacy).dest = DEST_AUTOMATIC;

            // When the boot.img is built.
            optional string build_date = 1;
            // UTC timestamp of build date.
            optional int64 build_date_utc = 2;
            // Android Build fingerprint of the build, e.g.
            // google/marlin/marlin:P/MASTER/android-build/dev-keys
            optional string build_fingerprint = 3;

            // Next Tag: 4
        }
        optional BootImage bootimage = 8;

        // Version of bootloader on device.
        optional string bootloader = 9  [ (android.privacy).dest = DEST_AUTOMATIC ];
        // Kernel bootmode, e.g. charger.
        optional string bootmode = 10  [ (android.privacy).dest = DEST_AUTOMATIC ];

        // Android Platform build metadata.
        message Build {
            option (android.msg_privacy).dest = DEST_AUTOMATIC;

            // Date of the platform build.
            optional string date = 1;
            // UTC timstamp of build data.
            optional int64  date_utc = 2;
            optional string description = 3;
            // A build ID string meant for displaying to the user.
            optional string display_id = 4;
            // A string that uniquely identifies the host the build was built on, in
            // human-readable format. Only makes sense for internal engineering
            // builds.
            optional string host = 5;
            // Unique id of this android platform build. An identifier chosen by the
            // device implementer to refer to a specific release, in human-readable
            // format. This field can be the same as
            // android.os.Build.VERSION.INCREMENTAL, but SHOULD be a value
            // sufficiently meaningful for end users to distinguish between software
            // builds.
            optional string id = 6;
            // Product name.
            optional string product = 7;
            optional bool   system_root_image = 8;
            // Tags of the buid, e.g. dev-keys, release-keys.
            optional string tags = 9;
            // Type of the build, e.g. eng, userdebug, user.
            optional string type = 10;
            // Name of the user (an engineer or a build bot) that built the image. For
            // production builds, this is from the build bot but some OEMs might use a
            // real username. Only makes sense for internal engineering builds.
            optional string user = 11;

            message Version {
                option (android.msg_privacy).dest = DEST_AUTOMATIC;

                // The base OS build the product is based on. A value representing the
                // FINGERPRINT parameter of the build that is otherwise identical to
                // this build except for the patches provided in the Android Public
                // Security Bulletin.
                optional string base_os = 1;
                optional string codename = 2;
                // A value chosen by the device implementer designating the specific
                // build of the currently-executing Android system, in human-readable
                // format. This value MUST NOT be reused for different builds made
                // available to end users. A typical use of this field is to indicate
                // which build number or source-control change identifier was used to
                // generate the build.
                optional string incremental = 3;
                optional int32  preview_sdk = 4;
                // The version of the currently-executing Android system, in
                // human-readable format.
                optional string release = 5;
                // The version of the currently-executing Android system, in a format
                // accessible to third-party application code.
                optional int32  sdk = 6;
                // A value indicating the security patch level of a build.
                optional string security_patch = 7;

                // Next Tag: 8
            }
            optional Version version = 12;

            // Next Tag: 13
        }
        optional Build build = 11;

        optional bool   camera_notify_nfc = 12  [ (android.privacy).dest = DEST_AUTOMATIC ];
        // Carrier name on the phone.
        optional string carrier = 13;
        // Is dataroaming enabled.
        optional bool   com_android_dataroaming = 14  [ (android.privacy).dest = DEST_AUTOMATIC ];
        // does it provide mobiledata.
        optional bool   com_android_prov_mobiledata = 15  [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional string com_google_clientidbase = 16;

        message Config {
            optional string alarm_alert = 1;
            optional int32  media_vol_steps = 2;
            optional string notification_sound = 3;
            optional string ringtone = 4;
            optional int32  vc_call_vol_steps = 5;

            // Next Tag: 6
        }
        optional Config config = 17;

        optional string control_privapp_permissions = 18;
        optional int32  cp_system_other_odex = 19;
        optional string crypto_scrypt_params = 20;
        optional string crypto_state = 21;
        optional string crypto_type = 22;
        optional string dalvik_vm_native_bridge = 23;
        // Is this build debuggable.
        optional bool   debuggable = 24;
        optional string frp_pst = 25;
        optional string gfx_driver_0 = 26;

        message Hardware {
            option (android.msg_privacy).dest = DEST_LOCAL;

            // value of ro.hardware itself
            optional string value = 1;
            optional string activity_recognition = 2;
            optional string audio = 3;
            optional string audio_policy = 4;
            optional string audio_a2dp = 5;
            optional string audio_primary = 6;
            optional string audio_usb = 7;
            optional string bootctrl = 8;
            optional string camera = 9;
            optional string consumerir = 10;
            optional string context_hub = 11;
            optional string egl = 12;
            optional string fingerprint = 13;
            optional string flp = 14;
            optional string gatekeeper = 15;
            optional string gps = 16;
            optional string gralloc = 17;
            optional string hdmi_cec = 18;
            optional string hwcomposer = 19;
            optional string input = 20;
            optional string keystore = 21;
            optional string lights = 22;
            optional string local_time = 23;
            optional string memtrack = 24;
            optional string nfc = 25;
            optional string nfc_nci = 26;
            optional string nfc_tag = 27;
            optional string nvram = 28;
            optional string power = 29;
            optional string radio = 30;
            optional string sensors = 31;
            optional string sound_trigger = 32;
            optional string thermal = 33;
            optional string tv_input = 34;
            optional string type = 35;
            optional string vehicle = 36;
            optional string vibrator = 37;
            optional string virtual_device = 38;
            optional string vulkan = 39;

            // Next Tag: 40
        }
        optional Hardware hardware = 27;

        optional int32  kernel_qemu = 28;
        optional int32  kernel_qemu_gles = 29;
        optional int32  oem_unlock_supported = 30;
        optional int32  opengles_version = 31;

        // The product of the device.
        message Product {
            option (android.msg_privacy).dest = DEST_AUTOMATIC;

            // Name of the product.
            optional string board = 1;
            // Brand of the product.
            optional string brand = 2;
            optional string cpu_abi = 3;
            repeated string cpu_abilist = 4;
            repeated string cpu_abilist32 = 5;
            repeated string cpu_abilist64 = 6;
            // Device name.
            optional string device = 7;
            // The first api level when the phone is launched.
            optional int32  first_api_level = 8;
            // Manufacturer of the product.
            optional string manufacturer = 9;
            // Marketing name of the phone.
            optional string model = 10;
            // Name of the product.
            optional string name = 11;

            // Vendor related information about the product.
            message Vendor {
                option (android.msg_privacy).dest = DEST_AUTOMATIC;

                optional string brand = 1;
                optional string device = 2;
                optional string manufacturer = 3;
                optional string model = 4;
                optional string name = 5;
            }
            optional Vendor vendor = 12;

            // Next Tag: 13
        }
        optional Product product = 32;

        optional int32  property_service_version = 33;
        reserved 34; // Removed retaildemo_video_path.
        optional string revision = 35;
        optional int32  sf_lcd_density = 36;
        optional bool   storage_manager_enabled = 37;

        message Telephony {
            optional bool  call_ring_multiple = 1;
            // CDMA subscription number.
            optional int32 default_cdma_sub = 2;
            optional int32 default_network = 3;
        }
        optional Telephony telephony = 38;

        reserved 39, 40; // Removed url_legal* props

        message Vendor {
            optional string build_date = 1;
            optional int64  build_date_utc = 2;
            optional string build_fingerprint = 3;
        }
        optional Vendor vendor = 41;

        // Vendor Native Development Kit version.
        optional string vndk_version = 42;
        optional int32  vts_coverage = 43;
        optional string zygote = 44;

        optional string gfx_driver_whitelist_0 = 45;

        // Next Tag: 46
    }
    optional Ro ro = 21;

    optional string sendbug_preferred_domain = 22;
    optional int32  service_bootanim_exit = 23;

    message Sys {
        optional int32  boot_completed = 1;
        optional int32  boot_from_charger_mode = 2;
        optional int32  retaildemo_enabled = 3;
        optional string shutdown_requested = 4;

        message Usb {
            optional string config = 1;
            optional int32  configfs = 2;
            optional string controller = 3;
            optional int32  ffs_max_read = 4;
            optional int32  ffs_max_write = 5;
            optional int32  ffs_mtp_ready = 6;
            optional int32  ffs_ready = 7;
            optional int32  mtp_device_type = 8;
            optional string state = 9;

            // Next Tag: 10
        }
        optional Usb usb = 5;

        // Next Tag: 6
    }
    optional Sys sys = 24;

    optional int32  telephony_lte_on_cdma_device = 25;
    optional int32  tombstoned_max_tombstone_count = 26;
    optional string vold_decrypt = 27;
    optional int32  vold_post_fs_data_done = 28;
    optional int32  vts_native_server_on = 29;
    optional string wifi_direct_interface = 30;
    optional string wifi_interface = 31;

    // Next Tag: 32
}

