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

        optional string url_legal = 39;
        optional string url_legal_android_privacy = 40;

        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
}

