/*
 * 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.providers.settings;

option java_multiple_files = true;

import "frameworks/base/core/proto/android/providers/settings/common.proto";
import "frameworks/base/core/proto/android/privacy.proto";

// Note: it's a conscious decision to add each setting as a separate field. This
// allows annotating each setting with its own privacy tag.
message SystemSettingsProto {
    option (android.msg_privacy).dest = DEST_EXPLICIT;

    repeated SettingsOperationProto historical_operations = 1;

    optional SettingProto advanced_settings = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];

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

        optional SettingProto accessibility_force_invert_color_override_packages_to_enable = 1 [ (android.privacy).dest = DEST_EXPLICIT ];
        optional SettingProto accessibility_force_invert_color_override_packages_to_disable = 2 [ (android.privacy).dest = DEST_EXPLICIT ];
    }
    optional Accessibility accessibility = 40;

    message Alarm {
        option (android.msg_privacy).dest = DEST_EXPLICIT;

        // "alarm_alert" in code.
        optional SettingProto default_uri = 1;
        optional SettingProto alert_cache = 2;
    }
    optional Alarm alarm = 3;

    message Bluetooth {
        option (android.msg_privacy).dest = DEST_EXPLICIT;

        // Whether remote devices may discover and/or connect to this device:
        // 2 -- discoverable and connectable
        // 1 -- connectable but not discoverable
        // 0 -- neither connectable nor discoverable
        optional SettingProto discoverability = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto discoverability_timeout_secs = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Bluetooth bluetooth = 4;

    reserved 5; // date_format is not used

    optional SettingProto display_color_mode = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];

    message DevOptions {
        option (android.msg_privacy).dest = DEST_EXPLICIT;

        // Show pointer location on screen? 0 = no, 1 = yes. "pointer_location
        // in code.
        optional SettingProto pointer_location = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto show_touches = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // Log raw orientation data from {@link
        // com.android.server.policy.WindowOrientationListener} for use with the
        // orientationplot.py tool.
        // 0 = no, 1 = yes
        optional SettingProto window_orientation_listener_log = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto show_key_presses = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto touchpad_visualizer = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional DevOptions developer_options = 7;

    message DtmfTone {
        option (android.msg_privacy).dest = DEST_EXPLICIT;

        // "dtmf_tone_when_dialing" in code.
        optional SettingProto play_when_dialing = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // "dtmf_tone_type_when_dialing" in code.
        optional SettingProto type_played_when_dialing = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional DtmfTone dtmf_tone = 8;

    optional SettingProto egg_mode = 9 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto end_button_behavior = 10 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto font_scale = 11 [ (android.privacy).dest = DEST_AUTOMATIC ];

    message HapticFeedback {
        option (android.msg_privacy).dest = DEST_EXPLICIT;

        optional SettingProto enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto intensity = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional HapticFeedback haptic_feedback = 12;

    // Whether the hearing aid is enabled. The value is boolean (1 or 0).
    optional SettingProto hearing_aid_compatibility = 13 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto lock_to_app_enabled = 14 [ (android.privacy).dest = DEST_AUTOMATIC ];

    message Lockscreen {
        option (android.msg_privacy).dest = DEST_EXPLICIT;

        optional SettingProto sounds_enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto disabled = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Lockscreen lockscreen = 15;

    // The system default media button event receiver.
    optional SettingProto media_button_receiver = 16;

    message Notification {
        option (android.msg_privacy).dest = DEST_EXPLICIT;

        optional SettingProto sound = 1;
        optional SettingProto sound_cache = 2;
        optional SettingProto light_pulse = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto vibration_intensity = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto camera_flash_notification = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto screen_flash_notification = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto screen_flash_notification_color_global = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Notification notification = 17;

    message Pointer {
        option (android.msg_privacy).dest = DEST_EXPLICIT;

        optional SettingProto pointer_fill_style = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto pointer_stroke_style = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto pointer_scale = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Pointer pointer = 37;
    optional SettingProto pointer_speed = 18 [ (android.privacy).dest = DEST_AUTOMATIC ];

    message Ringtone {
        option (android.msg_privacy).dest = DEST_EXPLICIT;

        // "ringtone" in code. The system-wide default ringtone URI.
        optional SettingProto default_uri = 1;
        optional SettingProto cache = 2;
    }
    optional Ringtone ringtone = 19;

    message Rotation {
        option (android.msg_privacy).dest = DEST_EXPLICIT;

        // Control whether the accelerometer will be used to change screen
        // orientation.  If 0, it will not be used unless explicitly requested
        // by the application; if 1, it will be used by default unless
        // explicitly disabled by the application.
        optional SettingProto accelerometer_rotation = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // Default screen rotation when no other policy applies.
        // When accelerometer_rotation is zero and no on-screen Activity expresses a
        // preference, this rotation value will be used. Must be one of the
        // {@link android.view.Surface#ROTATION_0 Surface rotation constants}.
        optional SettingProto user_rotation = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // Control whether the rotation lock toggle in the System UI should be hidden.
        // Typically this is done for accessibility purposes to make it harder for
        // the user to accidentally toggle the rotation lock while the display rotation
        // has been locked for accessibility.
        // If 0, then rotation lock toggle is not hidden for accessibility (although it may be
        // unavailable for other reasons).  If 1, then the rotation lock toggle is hidden.
        optional SettingProto hide_rotation_lock_toggle_for_accessibility = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Rotation rotation = 20;

    reserved 21; // rtt_calling_mode moved to Settings.Secure

    message Screen {
        option (android.msg_privacy).dest = DEST_EXPLICIT;

        optional SettingProto off_timeout = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto brightness = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto brightness_for_vr = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto brightness_mode = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto auto_brightness_adj = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto brightness_float = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto brightness_for_vr_float = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Screen screen = 22;

    optional SettingProto setup_wizard_has_run = 23 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto show_battery_percent = 24 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto show_gtalk_service_status = 25 [ (android.privacy).dest = DEST_AUTOMATIC ];

    message Sip {
        option (android.msg_privacy).dest = DEST_EXPLICIT;

        optional SettingProto receive_calls = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto call_options = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto always = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto address_only = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Sip sip = 26;

    optional SettingProto sound_effects_enabled = 27 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto system_locales = 28 [ (android.privacy).dest = DEST_AUTOMATIC ];

    message Text {
        option (android.msg_privacy).dest = DEST_EXPLICIT;

        optional SettingProto auto_replace = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto auto_caps = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto auto_punctuate = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto show_password = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Text text = 29;

    optional SettingProto time_12_24 = 30 [ (android.privacy).dest = DEST_AUTOMATIC ];

    message Touchpad {
        option (android.msg_privacy).dest = DEST_EXPLICIT;

        optional SettingProto natural_scrolling = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto pointer_speed = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto right_click_zone = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto tap_to_click = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto tap_dragging = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto three_finger_tap_customization = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto system_gestures = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto acceleration_enabled = 8 [ (android.privacy).dest = DEST_AUTOMATIC ];;
    }
    optional Touchpad touchpad = 36;

    message Mouse {
        option (android.msg_privacy).dest = DEST_EXPLICIT;

        optional SettingProto reverse_vertical_scrolling = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto swap_primary_button = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto scrolling_acceleration = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto pointer_acceleration_enabled = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto scrolling_speed = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }

    optional Mouse mouse = 38;

    optional SettingProto tty_mode = 31 [ (android.privacy).dest = DEST_AUTOMATIC ];

    message Vibrate {
        option (android.msg_privacy).dest = DEST_EXPLICIT;

        optional SettingProto on = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto input_devices = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // Whether silent mode should allow vibration feedback. This is used
        // internally in AudioService and the Sound settings activity to coordinate
        // decoupling of vibrate and silent modes. This setting will likely be
        // removed in a future release with support for audio/vibe feedback
        // profiles.
        // Not used anymore. On devices with vibrator, the user explicitly selects
        // silent or vibrate mode. Kept for use by legacy database upgrade code in
        // DatabaseHelper.
        optional SettingProto in_silent = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto when_ringing = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];

        optional SettingProto alarm_intensity = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto media_intensity = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto ring_intensity = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // notification_intensity is already logged at Notification.vibration_intensity
        // haptic_feedback_intensity is already logged at HapticFeedback.intensity
    }
    optional Vibrate vibrate = 32;

    message Volume {
        option (android.msg_privacy).dest = DEST_EXPLICIT;

        optional SettingProto ring = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto system = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto voice = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto music = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto alarm = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto notification = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto bluetooth_sco = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto accessibility = 8 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto master = 9 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto master_mono = 10 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // Determines which streams are affected by ringer mode changes. The stream
        // type's bit will be set to 1 if it should be muted when going into an
        // inaudible ringer mode.
        optional SettingProto mode_ringer_streams_affected = 11 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // Which streams are affected by mute. The stream type's bit should be set
        // to 1 if it should be muted when a mute request is received.
        optional SettingProto mute_streams_affected = 12 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // Master balance (float -1.f = 100% left, 0.f = dead center, 1.f = 100% right).
        optional SettingProto master_balance = 13 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Volume volume = 33;

    optional SettingProto when_to_make_wifi_calls = 34 [ (android.privacy).dest = DEST_AUTOMATIC ];

    optional SettingProto apply_ramping_ringer = 35 [ (android.privacy).dest = DEST_AUTOMATIC ];

    message Display {
        option (android.msg_privacy).dest = DEST_EXPLICIT;

        optional SettingProto cv_enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];

        optional SettingProto cv_dynamic_enabled = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];

        optional SettingProto cv_preferred_intensity = 3 [ (android.privacy).dest = DEST_AUTOMATIC] ;
    }
    optional Display display = 39;



    // Please insert fields in alphabetical order and group them into messages
    // if possible (to avoid reaching the method limit).
    // Next tag = 41;
}
