/*
 * 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/libs/incident/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 SecureSettingsProto {
    option (android.msg_privacy).dest = DEST_EXPLICIT;

    repeated SettingsOperationProto historical_operations = 1;

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

        optional SettingProto enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // List of the enabled accessibility providers.
        optional SettingProto enabled_accessibility_services = 2;
        optional SettingProto autoclick_enabled = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto autoclick_delay = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // Setting specifying the accessibility service or feature to be toggled via
        // the accessibility button in the navigation bar. This is either a
        // flattened ComponentName or the class name of a system class implementing
        // a supported accessibility feature.
        optional SettingProto button_target_component = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto captioning_enabled = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto captioning_locale = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto captioning_preset = 8 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto captioning_background_color = 9 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto captioning_foreground_color = 10 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto captioning_edge_type = 11 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto captioning_edge_color = 12 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto captioning_window_color = 13 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto captioning_typeface = 14 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto captioning_font_scale = 15 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto display_daltonizer_enabled = 16 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // Integer property that specifies the type of color space adjustment to perform.
        optional SettingProto display_daltonizer = 17 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto display_inversion_enabled = 18 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto display_magnification_enabled = 19 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto display_magnification_navbar_enabled = 20 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto display_magnification_scale = 21 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto high_text_contrast_enabled = 22 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto large_pointer_icon = 23 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto shortcut_enabled = 24 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto shortcut_on_lock_screen = 25 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto shortcut_dialog_shown = 26 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto shortcut_target_service = 27 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto soft_keyboard_mode = 28 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // Whether to speak passwords while in accessibility mode.
        optional SettingProto speak_password = 29 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto touch_exploration_enabled = 30 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // List of the accessibility services to which the user has granted
        // permission to put the device into touch exploration mode.
        optional SettingProto touch_exploration_granted_accessibility_services = 31;
        // Settings for accessibility timeout
        optional SettingProto non_interactive_ui_timeout_ms = 32 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto interactive_ui_timeout_ms = 33 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Accessibility accessibility = 2;

    // Origins for which browsers should allow geolocation by default.
    // The value is a space-separated list of origins.
    optional SettingProto allowed_geolocation_origins = 3;

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

        optional SettingProto app = 1;
        optional SettingProto lockdown = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional AlwaysOnVpn always_on_vpn = 4;

    optional SettingProto android_id = 5;
    optional SettingProto anr_show_background = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];

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

        // The current assistant component. It could be a voice interaction service,
        // or an activity that handles ACTION_ASSIST, or empty, which means using
        // the default handling.
        optional SettingProto assistant = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto structure_enabled = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto screenshot_enabled = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto disclosure_enabled = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto gesture_enabled = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto gesture_sensitivity = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto gesture_silence_alerts_enabled = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto gesture_wake_enabled = 8 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto gesture_setup_complete = 9 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Assist assist = 7;

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

        // The currently selected autofill service flattened ComponentName.
        optional SettingProto service = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // Boolean indicating if Autofill supports field classification.
        optional SettingProto feature_field_classification = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto user_data_max_user_data_size = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto user_data_max_field_classification_ids_size = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto user_data_max_category_count = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto user_data_max_value_length = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto user_data_min_value_length = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // The query URI to find an auto fill service to install.
        optional SettingProto service_search_uri = 8 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Autofill autofill = 8;

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

        optional SettingProto enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto days_to_retain = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto bytes_cleared = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto last_run = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto turned_off_by_policy = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional AutomaticStorageManager automatic_storage_manager = 9;

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

        optional SettingProto enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto auto_restore = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto provisioned = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto transport = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto manager_constants = 5;
        // Local transport parameters so we can configure it for tests.
        // This is encoded as a key=value list, separated by commas.
        // The following keys are supported:
        //   fake_encryption_flag  (boolean)
        optional SettingProto local_transport_parameters = 6;
        optional SettingProto packages_to_clear_data_before_full_restore = 7;
    }
    optional Backup backup = 10;

    optional SettingProto bluetooth_on_while_driving = 11 [ (android.privacy).dest = DEST_AUTOMATIC ];

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

        optional SettingProto gesture_disabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto double_tap_power_gesture_disabled = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto double_twist_to_flip_enabled = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto lift_trigger_enabled = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Camera camera = 12;

    optional SettingProto carrier_apps_handled = 13 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto cmas_additional_broadcast_pkg = 14 [ (android.privacy).dest = DEST_AUTOMATIC ];
    repeated SettingProto completed_categories = 15;
    optional SettingProto connectivity_release_pending_intent_delay_ms = 16 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto device_paired = 17 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto dialer_default_application = 18 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto display_density_forced = 19 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto double_tap_to_wake = 20 [ (android.privacy).dest = DEST_AUTOMATIC ];

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

        optional SettingProto enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto always_on = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto pulse_on_pick_up = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto pulse_on_long_press = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto pulse_on_double_tap = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto pulse_on_tap = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Doze doze = 21;

    optional SettingProto emergency_assistance_application = 22 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto enhanced_voice_privacy_enabled = 23 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto immersive_mode_confirmations = 24 [ (android.privacy).dest = DEST_AUTOMATIC ];

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

        optional SettingProto power_button_behavior = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto back_button_behavior = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Incall incall = 25;

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

        optional SettingProto default_input_method = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto disabled_system_input_methods = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto enabled_input_methods = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto method_selector_visibility = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto subtype_history = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto selected_input_method_subtype = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto show_ime_with_hard_keyboard = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional InputMethods input_methods = 26;

    optional SettingProto install_non_market_apps = 27 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto instant_apps_enabled = 28 [ (android.privacy).dest = DEST_AUTOMATIC ];
    // Uri of the slice that's presented on the keyguard. Defaults to a slice
    // with the date and next alarm.
    optional SettingProto keyguard_slice_uri = 29;
    optional SettingProto last_setup_shown = 30 [ (android.privacy).dest = DEST_AUTOMATIC ];

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

        optional SettingProto swipe_up_to_switch_apps_enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Launcher launcher = 70;

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

        // The degree of location access enabled by the user.
        optional SettingProto mode = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // The App or module that changes the location mode.
        optional SettingProto changer = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Location location = 31;

    // How frequently will the user be reminded about location permission grants
    message LocationAccessCheck {
        option (android.msg_privacy).dest = DEST_EXPLICIT;

        // Time in between periodic checks
        optional SettingProto interval_millis = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];

        // Time in between the user granting a location permission and a check
        optional SettingProto delay_millis = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional LocationAccessCheck location_access_check = 73;

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

        optional SettingProto lock_after_timeout = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto allow_private_notifications = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto allow_remote_input = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto show_notifications = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional LockScreen lock_screen = 32;

    // Whether lock-to-app will lock the keyguard when exiting.
    optional SettingProto lock_to_app_exit_locked = 33 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto lockdown_in_power_menu = 34 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto long_press_timeout = 35 [ (android.privacy).dest = DEST_AUTOMATIC ];

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

        optional SettingProto contact_remote_search = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional ManagedProfile managed_profile = 36;

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

        // Whether or not alert sounds are played on StorageManagerService events.
        optional SettingProto play_notification_snd = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto ums_autostart = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto ums_prompt = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto ums_notify_enabled = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Mount mount = 37;

    optional SettingProto multi_press_timeout = 38 [ (android.privacy).dest = DEST_AUTOMATIC ];

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

        optional SettingProto default_component = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // Whether NFC payment is handled by the foreground application or a default.
        optional SettingProto foreground = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // The query URI to find an NFC service to install.
        optional SettingProto payment_service_search_uri = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional NfcPayment nfc_payment = 39;

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

        optional SettingProto activated = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto auto_mode = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto color_temperature = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto custom_start_time = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto custom_end_time = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto last_activated_time = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional NightDisplay night_display = 40;

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

        // Read only list of the service components that the current user has
        // explicitly allowed to see and assist with all of the user's
        // notifications.
        // "enabled_notification_assistant" in code.
        optional SettingProto enabled_assistant = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto enabled_listeners = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto enabled_policy_access_packages = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto badging = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto show_note_about_notification_hiding = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto in_call_notification_enabled = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto bubbles = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Notification notification = 41;

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

        optional SettingProto user_consent = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto state = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional PackageVerifier package_verifier = 42;

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

        optional SettingProto enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto last_update = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto redirect_url = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional ParentalControl parental_control = 43;

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

        // The query URI to find a print service to install.
        optional SettingProto search_uri = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto disabled_print_services = 2;
        optional SettingProto enabled_print_services = 3;
    }
    optional PrintService print_service = 44;

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

        // Holds comma-separated list of ordering of QuickSettings tiles.
        optional SettingProto tiles = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto auto_added_tiles = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional QuickSettings qs = 45;

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

        optional SettingProto show_rotation_suggestions = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto num_rotation_suggestions_accepted = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Rotation rotation = 46;

    // User-selected RTT mode. When on, outgoing and incoming calls will be
    // answered as RTT calls when supported by the device and carrier. Boolean
    // value.
    optional SettingProto rtt_calling_mode = 69 [ (android.privacy).dest = DEST_AUTOMATIC ];

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

        optional SettingProto enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto components = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto activate_on_dock = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto activate_on_sleep = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto default_component = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Screensaver screensaver = 47;

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

        optional SettingProto global_search_activity = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto num_promoted_sources = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto max_results_to_display = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto max_results_per_source = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto web_results_override_limit = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto promoted_source_deadline_millis = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto source_timeout_millis = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto prefill_millis = 8 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto max_stat_age_millis = 9 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto max_source_event_age_millis = 10 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto min_impressions_for_source_ranking = 11 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto min_clicks_for_source_ranking = 12 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto max_shortcuts_returned = 13 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto query_thread_core_pool_size = 14 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto query_thread_max_pool_size = 15 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto shortcut_refresh_core_pool_size = 16 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto shortcut_refresh_max_pool_size = 17 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto thread_keepalive_seconds = 18 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto per_source_concurrent_query_limit = 19 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Search search = 48;

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

        optional SettingProto enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // "selected_spell_checker" in code.
        optional SettingProto selected = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // "selected_spell_checker_subtype" in code.
        optional SettingProto selected_subtype = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional SpellChecker spell_checker = 49;

    optional SettingProto settings_classname = 50 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto show_first_crash_dialog_dev_option = 51 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto skip_first_use_hints = 52 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto sleep_timeout = 53 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto sms_default_application = 54 [ (android.privacy).dest = DEST_AUTOMATIC ];

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

        optional SettingProto charging_sounds_enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto charging_vibration_enabled = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Sounds sounds = 72;

    // Defines whether managed profile ringtones should be synced from its
    // parent profile.
    optional SettingProto sync_parent_sounds = 55 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto system_navigation_keys_enabled = 56 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto trust_agents_initialized = 57 [ (android.privacy).dest = DEST_AUTOMATIC ];

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

        optional SettingProto default_rate = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto default_pitch = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto default_synth = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto default_locale = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto enabled_plugins = 5;
    }
    optional Tts tts = 58;

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

        optional SettingProto tty_mode_enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // The preferred TTY mode:
        // 0 = TTy Off, CDMA default
        // 1 = TTY Full
        // 2 = TTY HCO
        // 3 = TTY VCO
        optional SettingProto preferred_tty_mode = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Tty tty = 59;

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

        // Whether the current user has been set up via setup wizard (0 = false,
        // 1 = true). This value differs from USER_SETUP_COMPLETE in that it can be
        // reset back to 0 in case SetupWizard has been re-enabled on TV devices.
        optional SettingProto user_setup_complete = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto input_hidden_inputs = 2;
        optional SettingProto input_custom_labels = 3;
    }
    optional Tv tv = 60;

    optional SettingProto ui_night_mode = 61 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto unknown_sources_default_reversed = 62 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto usb_audio_automatic_routing_disabled = 63 [ (android.privacy).dest = DEST_AUTOMATIC ];
    // Whether the current user has been set up via setup wizard (0 = false, 1 = true)
    optional SettingProto user_setup_complete = 64 [ (android.privacy).dest = DEST_AUTOMATIC ];

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

        // The currently selected voice interaction service flattened ComponentName.
        optional SettingProto interaction_service = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // The ComponentName string of the service to be used as the voice
        // recognition service.
        optional SettingProto recognition_service = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Voice voice = 65;

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

        // What behavior should be invoked when the volume hush gesture is triggered
        // One of VOLUME_HUSH_OFF, VOLUME_HUSH_VIBRATE, VOLUME_HUSH_MUTE.
        optional SettingProto hush_gesture = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        // Persisted playback time after a user confirmation of an unsafe volume level.
        optional SettingProto unsafe_volume_music_active_ms = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Volume volume = 66;

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

        optional SettingProto display_mode = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto enabled_listeners = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Vr vr = 67;

    optional SettingProto wake_gesture_enabled = 68 [ (android.privacy).dest = DEST_AUTOMATIC ];

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

        // If 0, turning on dnd manually will last indefinitely. Else if
        // non-negative, turning on dnd manually will last for this many minutes.
        // Else (if negative), turning on dnd manually will surface a dialog that
        // prompts user to specify a duration.
        optional SettingProto duration = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto show_zen_upgrade_notification = 2 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto show_zen_settings_suggestion = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto settings_updated = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
        optional SettingProto settings_suggestion_viewed = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
    }
    optional Zen zen = 71;

    optional SettingProto skip_gesture_enabled = 74 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto silence_gesture_enabled = 75 [ (android.privacy).dest = DEST_AUTOMATIC ];
    optional SettingProto theme_customization_overlay_packages = 76 [ (android.privacy).dest = DEST_AUTOMATIC ];

    optional SettingProto aware_enabled = 77 [ (android.privacy).dest = DEST_AUTOMATIC ];

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