<?xml version="1.0" encoding="utf-8"?>
<!--
/*
** Copyright 2018, 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.
*/
-->

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">

    <!-- Flag indicating whether the we should enable the automatic brightness in Settings.
         Software implementation will be used if config_hardware_auto_brightness_available is not set -->
    <bool name="config_automatic_brightness_available">true</bool>

    <!-- Stability requirements in milliseconds for accepting a new brightness level.  This is used
     for debouncing the light sensor.  Different constants are used to debounce the light sensor
     when adapting to brighter or darker environments.  This parameter controls how quickly
     brightness changes occur in response to an observed change in light level that exceeds the
     hysteresis threshold. -->
    <integer name="config_autoBrightnessBrighteningLightDebounce">2000</integer>
    <integer name="config_autoBrightnessDarkeningLightDebounce">4000</integer>

    <!-- Auto-brightness sensor type string -->
    <string name="config_displayLightSensorType">"com.google.sensor.combo_light"</string>

    <!-- If this is true, the screen will come on when you unplug usb/power/whatever. -->
    <bool name="config_unplugTurnsOnScreen">true</bool>

    <!-- Enable Night display, which requires HWC 2.0. -->
    <bool name="config_nightDisplayAvailable">true</bool>

    <!-- Boolean indicating whether display white balance is supported. -->
    <bool name="config_displayWhiteBalanceAvailable">true</bool>

    <!-- Boolean indicating whether display white balance should be enabled by default. -->
    <bool name="config_displayWhiteBalanceEnabledDefault">true</bool>

    <!-- Minimum color temperature, in Kelvin, supported by display white balance. -->
    <integer name="config_displayWhiteBalanceColorTemperatureMin">6300</integer>

    <!-- Maximum color temperature, in Kelvin, supported by display white balance. -->
    <integer name="config_displayWhiteBalanceColorTemperatureMax">7450</integer>

    <!-- Default color temperature, in Kelvin, used by display white balance. -->
    <integer name="config_displayWhiteBalanceColorTemperatureDefault">6500</integer>

    <!-- The nominal white coordinates, in CIE1931 XYZ color space, for Display White Balance to
         use in its calculations. AWB will adapt this white point to the target ambient white
         point. The array must include a total of 3 float values (X, Y, Z) -->
    <string-array name="config_displayWhiteBalanceDisplayNominalWhite">
        <!-- Nominal White X --> <item>0.950000</item>
        <!-- Nominal White Y --> <item>1.000000</item>
        <!-- Nominal White Z --> <item>1.117485</item>
    </string-array>

    <!-- See DisplayWhiteBalanceThrottler.
         The debounce time (in milliseconds) for increasing the screen color temperature, throttled
         if time > lastTime + debounce. Must be non-negative. -->
    <integer name="config_displayWhiteBalanceIncreaseDebounce">2000</integer>

    <!-- See DisplayWhiteBalanceThrottler.
         The debounce time (in milliseconds) for decreasing the screen color tempearture, throttled
         if time < lastTime - debounce. Must be non-negative. -->
    <integer name="config_displayWhiteBalanceDecreaseDebounce">3000</integer>

    <!-- See DisplayWhiteBalanceThrottler.
         The ambient color temperature values used to determine the threshold as the corresponding
         value in config_displayWhiteBalance{Increase,Decrease}Threholds. Must be non-empty, the
         same length as config_displayWhiteBalance{Increase,Decrease}Thresholds, and contain
         non-negative, strictly increasing numbers.

         For example, if:

         - baseThresolds = [0, 100, 1000];
         - increaseThresholds = [0.1, 0.15, 0.2];
         - decreaseThresholds = [0.1, 0.05, 0.0];

         Then, given the ambient color temperature INCREASED from X to Y (so X < Y):
         - If 0 <= Y < 100, we require Y > (1 + 0.1) * X = 1.1X;
         - If 100 <= Y < 1000, we require Y > (1 + 0.15) * X = 1.15X;
         - If 1000 <= Y, we require Y > (1 + 0.2) * X = 1.2X.

         Or, if the ambient color temperature DECREASED from X to Y (so X > Y):
         - If 0 <= Y < 100, we require Y < (1 - 0.1) * X = 0.9X;
         - If 100 <= Y < 1000, we require Y < (1 - 0.05) * X = 0.95X;
         - If 1000 <= Y, we require Y < (1 - 0) * X = X. -->
    <array name="config_displayWhiteBalanceBaseThresholds">
        <item>6300</item>
        <item>6400</item>
        <item>6850</item>
        <item>7450</item>
    </array>

    <!-- See DisplayWhiteBalanceThrottler.
         The increase threshold values, throttled if value < value * (1 + threshold). Must be
         non-empty, the same length as config_displayWhiteBalanceBaseThresholds, and contain
         non-negative numbers. -->
    <array name="config_displayWhiteBalanceIncreaseThresholds">
        <item>0.0078740</item>
        <item>0.0075472</item>
        <item>0.0069930</item>
        <item>0.0067114</item>
    </array>

    <!-- See DisplayWhiteBalanceThrottler.
         The decrease threshold values, throttled if value > value * (1 - threshold). Must be
         non-empty, the same length as config_displayWhiteBalanceBaseThresholds, and contain
         non-negative numbers. -->
    <array name="config_displayWhiteBalanceDecreaseThresholds">
        <item>0.0078740</item>
        <item>0.0075472</item>
        <item>0.0069930</item>
        <item>0.0067114</item>
    </array>

    <!-- See DisplayWhiteBalanceController.
         A float array containing a list of ambient brightnesses, in Lux. This array,
         together with config_displayWhiteBalanceLowLightAmbientBiases, is used to generate a
         lookup table used in DisplayWhiteBalanceController. This lookup table is used to map
         ambient brightness readings to a bias, where the bias is used to linearly interpolate
         between ambient color temperature and
         config_displayWhiteBalanceLowLightAmbientColorTemperature.
         This table is optional. If used, this array must,
         1) Contain at least two entries
         2) Be the same length as config_displayWhiteBalanceLowLightAmbientBiases. -->
    <array name ="config_displayWhiteBalanceLowLightAmbientBrightnesses">
        <item>10.0</item>
        <item>50.0</item>
    </array>

    <!-- See DisplayWhiteBalanceController.
         An array containing a list of biases. See
         config_displayWhiteBalanceLowLightAmbientBrightnesses for additional details.
         This array must be in the range of [0.0, 1.0]. -->
    <array name ="config_displayWhiteBalanceLowLightAmbientBiases">
        <item>0.0</item>
        <item>1.0</item>
    </array>

    <!-- See DisplayWhiteBalanceController.
         The ambient color temperature (in cct) to which we interpolates towards to when the
         ambient brightness is within the low light range, see
         config_displayWhiteBalanceLowLightAmbientBrightnesses. -->
    <item name="config_displayWhiteBalanceLowLightAmbientColorTemperature" format="float" type="dimen">6300.0</item>

    <!-- See DisplayWhiteBalanceController.
         A float array containing a list of ambient brightnesses, in Lux. This array,
         together with config_displayWhiteBalanceHighLightAmbientBiases, is used to generate a
         lookup table used in DisplayWhiteBalanceController. This lookup table is used to map
         ambient brightness readings to a bias, where the bias is used to linearly interpolate
         between ambient color temperature and
         config_displayWhiteBalanceHighLightAmbientColorTemperature.
         This table is optional. If used, this array must,
         1) Contain at least two entries
         2) Be the same length as config_displayWhiteBalanceHighLightAmbientBiases. -->
    <array name ="config_displayWhiteBalanceHighLightAmbientBrightnesses">
        <item>3000.0</item>
        <item>5000.0</item>
    </array>

    <!-- See DisplayWhiteBalanceController.
         An array containing a list of biases. See
         config_displayWhiteBalanceHighLightAmbientBrightnesses for additional details.
         This array must be in the range of [0.0, 1.0]. -->
    <array name ="config_displayWhiteBalanceHighLightAmbientBiases">
        <item>0.0</item>
        <item>1.0</item>
    </array>

    <!-- See DisplayWhiteBalanceController.
         The ambient color temperature (in cct) to which we interpolates towards to when the
         ambient brightness is within the high light range, see
         config_displayWhiteBalanceHighLightAmbientBrightnesses. -->
    <item name="config_displayWhiteBalanceHighLightAmbientColorTemperature" format="float" type="dimen">6500.0</item>

    <!-- See DisplayWhiteBalanceController.
         A float array containing a list of ambient color temperatures, in Kelvin. This array,
         together with config_displayWhiteBalanceDisplayColorTemperatures, is used to generate a
         lookup table used in DisplayWhiteBalanceController. This lookup table is used to map
         ambient color temperature readings to a target color temperature for the display.
         This table is optional. If used, this array must,
         1) Contain at least two entries
         2) Be the same length as config_displayWhiteBalanceDisplayColorTemperatures. -->
    <array name="config_displayWhiteBalanceAmbientColorTemperatures">
        <item>5300</item>
        <item>6000</item>
        <item>7000</item>
        <item>8000</item>
    </array>

    <!-- See DisplayWhiteBalanceController.
         An array containing a list of display color temperatures, in Kelvin. See
         config_displayWhiteBalanceAmbientColorTemperatures for additional details.
         The same restrictions apply to this array. -->
    <array name="config_displayWhiteBalanceDisplayColorTemperatures">
        <item>6300</item>
        <item>6400</item>
        <item>6850</item>
        <item>7450</item>
    </array>

    <!-- List supported color modes. -->
    <integer-array name="config_availableColorModes">
        <item>0</item> <!-- COLOR_MODE_NATURAL -->
        <item>1</item> <!-- COLOR_MODE_BOOSTED -->
        <item>3</item> <!-- COLOR_MODE_AUTOMATIC -->
    </integer-array>

    <!-- Color mode to use when accessibility transforms are enabled. This color mode must be
     supported by the device, but not necessarily appear in config_availableColorModes. The
     regularly selected color mode will be used if this value is negative. -->
    <integer name="config_accessibilityColorMode">2</integer>

    <!-- The following two arrays specify which color space to use for display composition when a
         certain color mode is active.
         Composition color spaces are defined in android.view.Display.COLOR_MODE_xxx, and color
         modes are defined in ColorDisplayManager.COLOR_MODE_xxx and
         ColorDisplayManager.VENDOR_COLOR_MODE_xxx.
         The color space COLOR_MODE_DEFAULT (0) lets the system select the most appropriate
         composition color space for currently displayed content. Other values (e.g.,
         COLOR_MODE_SRGB) override system selection; these other color spaces must be supported by
         the device for for display composition.
         If a color mode does not have a corresponding color space specified in this array, the
         currently set composition color space will not be modified.-->
    <integer-array name="config_displayCompositionColorModes">
        <item>0</item> <!-- COLOR_MODE_NATURAL   -->
        <item>1</item> <!-- COLOR_MODE_BOOSTED   -->
        <item>2</item> <!-- COLOR_MODE_SATURATED -->
        <item>3</item> <!-- COLOR_MODE_AUTOMATIC -->
    </integer-array>
    <integer-array name="config_displayCompositionColorSpaces">
        <item>0</item> <!-- COLOR_MODE_DEFAULT    -->
        <item>0</item> <!-- COLOR_MODE_DEFAULT    -->
        <item>0</item> <!-- COLOR_MODE_DEFAULT    -->
        <item>9</item> <!-- COLOR_MODE_DISPLAY_P3 -->
    </integer-array>

    <!-- Boolean indicating whether the HWC setColorTransform function can be performed efficiently
         in hardware. -->
    <bool name="config_setColorTransformAccelerated">true</bool>

    <!-- Boolean indicating if restoring network selection should be skipped -->
    <!-- The restoring is handled by modem if it is true -->
    <bool translatable="false" name="skip_restoring_network_selection">true</bool>

    <!-- If device has a sensor that can wake-up the lock screen -->
    <bool name="config_dozeWakeLockScreenSensorAvailable">true</bool>

    <!-- If device supports pickup/lift gesture -->
    <bool name="config_dozePulsePickup">true</bool>

    <!-- Set to true to add links to Cell Broadcast app from Settings and MMS app. -->
    <bool name="config_cellBroadcastAppLinks">true</bool>

    <!--  Whether Multiuser UI should be shown -->
    <bool name="config_enableMultiUserUI">true</bool>

    <!--  Maximum number of supported users -->
    <integer name="config_multiuserMaximumUsers">4</integer>

    <!-- Whether Hearing Aid profile is supported -->
    <bool name="config_hearing_aid_profile_supported">true</bool>

    <!-- List of regexpressions describing the interface (if any) that represent tetherable
         USB interfaces.  If the device doesn't want to support tething over USB this should
         be empty.  An example would be "usb.*" -->
    <string-array translatable="false" name="config_tether_usb_regexs">
        <item>"usb\\d"</item>
        <item>"rndis\\d"</item>
    </string-array>

    <!-- List of regexpressions describing the interface (if any) that represent tetherable
         Wifi interfaces.  If the device doesn't want to support tethering over Wifi this
         should be empty.  An example would be "softap.*" -->
    <string-array translatable="false" name="config_tether_wifi_regexs">
        <item>"wlan\\d"</item>
    </string-array>

    <!-- List of regexpressions describing the interface (if any) that represent tetherable
         bluetooth interfaces.  If the device doesn't want to support tethering over bluetooth this
         should be empty. -->
    <string-array translatable="false" name="config_tether_bluetooth_regexs">
           <item>"bt-pan"</item>
    </string-array>

    <!-- Boolean indicating if current platform supports HFP inband ringing -->
    <bool name="config_bluetooth_hfp_inband_ringing_support">true</bool>

    <bool translatable="false" name="config_tether_upstream_automatic">true</bool>

    <!-- This string array should be overridden by the device to present a list of network
         attributes.  This is used by the connectivity manager to decide which networks can coexist
         based on the hardware -->
    <!-- An Array of "[Connection name],[ConnectivityManager.TYPE_xxxx],
         [associated radio-type],[priority],[restoral-timer(ms)],[dependencyMet]  -->
    <!-- the 5th element "resore-time" indicates the number of milliseconds to delay
         before automatically restore the default connection.  Set -1 if the connection
         does not require auto-restore. -->
    <!-- the 6th element indicates boot-time dependency-met value. -->
    <string-array translatable="false" name="networkAttributes">
        <item>"wifi,1,1,1,-1,true"</item>
        <item>"mobile,0,0,0,-1,true"</item>
        <item>"mobile_mms,2,0,2,60000,true"</item>
        <item>"mobile_supl,3,0,2,60000,true"</item>
        <item>"mobile_dun,4,0,2,60000,true"</item>
        <item>"mobile_hipri,5,0,3,60000,true"</item>
        <item>"mobile_fota,10,0,2,60000,true"</item>
        <item>"mobile_ims,11,0,2,60000,true"</item>
        <item>"mobile_cbs,12,0,2,60000,true"</item>
        <item>"mobile_ia,14,0,2,-1,true"</item>
        <item>"bluetooth,7,7,2,-1,true"</item>
        <item>"ethernet,9,9,9,-1,true"</item>
        <item>"mobile_emergency,15,0,2,-1,true</item>
    </string-array>

    <!-- This string array should be overridden by the device to present a list of radio
         attributes.  This is used by the connectivity manager to decide which networks can coexist
         based on the hardware -->
    <!-- An Array of "[ConnectivityManager connectionType],
                      [# simultaneous connection types]"  -->
    <string-array translatable="false" name="radioAttributes">
        <item>"1,1"</item>
        <item>"0,1"</item>
        <item>"7,1"</item>
        <item>"9,1"</item>
    </string-array>

    <!-- If the hardware supports specially marking packets that caused a wakeup of the
         main CPU, set this value to the mark used. -->
    <integer name="config_networkWakeupPacketMark">0x80000000</integer>

    <!-- Mask to use when checking skb mark defined in config_networkWakeupPacketMark above. -->
    <integer name="config_networkWakeupPacketMask">0x80000000</integer>

    <!-- Boolean indicating whether the wifi chipset has dual frequency band support -->
    <bool translatable="false" name="config_wifi_dual_band_support">true</bool>

    <!-- Boolean indicating whether the wifi chipset requires the softap band be -->
    <!-- converted from 5GHz to ANY due to hardware restrictions -->
    <bool translatable="false" name="config_wifi_convert_apband_5ghz_to_any">true</bool>

    <!-- Boolean indicating whether 802.11r Fast BSS Transition is enabled on this platform -->
    <bool translatable="false" name="config_wifi_fast_bss_transition_enabled">true</bool>

    <!-- Boolean indicating whether the wifi chipset has background scan support -->
    <bool translatable="false" name="config_wifi_background_scan_support">true</bool>


    <!-- Wifi driver supports batched scan -->
    <bool translatable="false" name="config_wifi_batched_scan_supported">true</bool>

    <!-- Boolean indicating whether or not to revert to default country code when cellular
    radio is unable to find any MCC information to infer wifi country code from -->
    <bool translatable="false" name="config_wifi_revert_country_code_on_cellular_loss">false</bool>

    <!-- Array indicating wifi fatal firmware alert error code list from driver -->
    <integer-array translatable="false" name="config_wifi_fatal_firmware_alert_error_code_list">
        <item>1</item>      <!-- WLAN_LOG_REASON_ROAM_FAIL -->
        <item>256</item>    <!-- DATA_STALL_LOG_NONE -->
        <item>257</item>    <!-- DATA_STALL_LOG_FW_VDEV_PAUSE -->
        <item>258</item>    <!-- DATA_STALL_LOG_HWSCHED_CMD_FILTER -->
        <item>259</item>    <!-- DATA_STALL_LOG_HWSCHED_CMD_FLUSH -->
        <item>260</item>    <!-- DATA_STALL_LOG_FW_RX_REFILL_FAILED -->
        <item>261</item>    <!-- DATA_STALL_LOG_FW_RX_FCS_LEN_ERROR -->
        <item>262</item>    <!-- DATA_STALL_LOG_FW_WDOG_ERRORS -->
        <item>263</item>    <!-- DATA_STALL_LOG_BB_WDOG_ERROR -->
        <item>264</item>    <!-- DATA_STALL_LOG_POST_TIM_NO_TXRX_ERROR -->
        <item>512</item>    <!-- DATA_STALL_LOG_HOST_STA_TX_TIMEOUT -->
        <item>513</item>    <!-- DATA_STALL_LOG_HOST_SOFTAP_TX_TIMEOUT -->
        <item>514</item>    <!-- DATA_STALL_LOG_NUD_FAILURE -->
    </integer-array>

    <!-- Boolean indicating whether or not wifi should turn off when emergency call is made -->
    <bool translatable="false" name="config_wifi_turn_off_during_emergency_call">true</bool>

    <!-- ImsService package name to bind to by default, if config_dynamic_bind_ims is true -->
    <string name="config_ims_package">org.codeaurora.ims</string>

    <!-- Flag specifying whether or not IMS will use the ImsResolver dynamically -->
    <bool name="config_dynamic_bind_ims">true</bool>

    <!-- Specifies whether to decouple the auto-suspend state of the device from the display on/off state. -->
    <bool name="config_powerDecoupleAutoSuspendModeFromDisplay">true</bool>

    <!-- Specifies whether to decouple the interactive state of the device from the display on/off state. -->
    <bool name="config_powerDecoupleInteractiveModeFromDisplay">true</bool>

    <!-- Is the device capable of hot swapping an UICC Card -->
    <bool name="config_hotswapCapable">true</bool>

    <!-- Flag specifying whether VoLTE is availasble on device -->
    <bool name="config_device_volte_available">true</bool>

    <!-- Flag specifying whether VoLTE is available on device -->
    <bool name="config_device_vt_available">true</bool>

    <!-- Enable video pause workaround when enabling/disabling the camera. -->
    <bool name="config_useVideoPauseWorkaround">true</bool>

    <!-- Flag specifying whether WFC over IMS is availasble on device -->
    <bool name="config_device_wfc_ims_available">true</bool>

    <!-- Configure mobile tcp buffer sizes in the form:
         rat-name:rmem_min,rmem_def,rmem_max,wmem_min,wmem_def,wmem_max
         If no value is found for the rat-name in use, the system default will be applied.
    -->
    <string-array name="config_mobile_tcp_buffers">
        <item>umts:131072,262144,1452032,4096,16384,399360</item>
        <item>hspa:131072,262144,2441216,4096,16384,399360</item>
        <item>hsupa:131072,262144,2441216,4096,16384,399360</item>
        <item>hsdpa:131072,262144,2441216,4096,16384,399360</item>
        <item>hspap:131072,262144,2441216,4096,16384,399360</item>
        <item>edge:16384,32768,131072,4096,16384,65536</item>
        <item>gprs:4096,8192,24576,4096,8192,24576</item>
        <item>1xrtt:16384,32768,131070,4096,16384,102400</item>
        <item>evdo:131072,262144,1048576,4096,16384,524288</item>
        <item>lte:524288,1048576,8388608,262144,524288,4194304</item>
    </string-array>

    <!-- Configure wifi tcp buffersizes in the form:
         rmem_min,rmem_def,rmem_max,wmem_min,wmem_def,wmem_max -->
    <string name="config_wifi_tcp_buffers" translatable="false">524288,2097152,8388608,262144,524288,4194304</string>

    <!-- Idle Receive current for wifi radio. 0 by default-->
    <integer translatable="false" name="config_wifi_idle_receive_cur_ma">1</integer>

    <!-- Rx current for wifi radio. 0 by default-->
    <integer translatable="false" name="config_wifi_active_rx_cur_ma">100</integer>

    <!-- Tx current for wifi radio. 0 by default-->
    <integer translatable="false" name="config_wifi_tx_cur_ma">250</integer>

    <!-- Operating volatage for wifi radio. 0 by default-->
    <integer translatable="false" name="config_wifi_operating_voltage_mv">3800</integer>

    <!-- Config SoftAP 2G channel list -->
    <string  translatable="false" name="config_wifi_framework_sap_2G_channel_list">6</string>

    <!-- Config determines whether to update phone object when voice registration
         state changes. Voice radio tech change will always trigger an update of
         phone object irrespective of this config -->
    <bool name="config_switch_phone_on_voice_reg_state_change">false</bool>

    <!-- Number of physical SIM slots on the device. This includes both eSIM and pSIM slots, and
         is not necessarily the same as the number of phones/logical modems supported by the device.
         For example, a multi-sim device can have 2 phones/logical modems, but 3 physical slots,
         or a single SIM device can have 1 phones/logical modems, but 2 physical slots (one eSIM
         and one pSIM) -->
    <integer name="config_num_physical_slots">2</integer>

    <!-- Disables compatibility WAL mode.
    In this mode, only database journal mode will be changed, connection pool
    size will still be limited to a single connection. -->
    <bool name="db_compatibility_wal_supported">false</bool>

    <!-- Use ERI text for network name on CDMA LTE -->
        <bool name="config_LTE_eri_for_network_name">false</bool>

    <!-- Default list of files pinned by the Pinner Service -->
    <string-array translatable="false" name="config_defaultPinnerServiceFiles">
        <item>"/system/framework/arm64/boot-framework.oat"</item>
        <item>"/system/framework/framework.jar"</item>
        <item>"/system/framework/oat/arm64/services.odex"</item>
        <item>"/system/framework/services.jar"</item>
        <item>"/system/framework/arm64/boot.oat"</item>
        <item>"/system/framework/arm64/boot-core-libart.oat"</item>
        <item>"/apex/com.android.runtime/javalib/core-oj.jar"</item>
        <item>"/apex/com.android.runtime/javalib/core-libart.jar"</item>
        <item>"/apex/com.android.media/javalib/updatable-media.jar"</item>
        <item>"/product/priv-app/SystemUIGoogle/SystemUIGoogle.apk"</item>
        <item>"/product/priv-app/SystemUIGoogle/oat/arm64/SystemUIGoogle.odex"</item>
        <item>"/system/lib64/libsurfaceflinger.so"</item>
    </string-array>

    <!-- Should the pinner service pin the Camera application? -->
    <bool name="config_pinnerCameraApp">true</bool>

    <!-- Should the pinner service pin the Home application? -->
    <bool name="config_pinnerHomeApp">true</bool>

    <!-- List of files pinned by the Pinner Service with the apex boot image b/119800099 -->
    <string-array translatable="false" name="config_apexBootImagePinnerServiceFiles">
        <item>"/system/framework/framework.jar"</item>
        <item>"/system/framework/services.jar"</item>
        <item>"/system/framework/arm64/apex.oat"</item>
        <item>"/system/framework/arm64/apex-core-libart.oat"</item>
        <item>"/apex/com.android.runtime/javalib/core-oj.jar"</item>
        <item>"/apex/com.android.runtime/javalib/core-libart.jar"</item>
        <item>"/apex/com.android.media/javalib/updatable-media.jar"</item>
        <item>"/system/priv-app/SystemUIGoogle/SystemUIGoogle.apk"</item>
        <item>"/system/lib64/libsurfaceflinger.so"</item>
    </string-array>

    <!-- An array of device capabilities defined by GSMA SGP.22 v2.0, and their corresponding major
         version. -->
    <string-array translatable="false" name="config_telephonyEuiccDeviceCapabilities">
        <item>"gsm,11"</item>
        <item>"utran,11"</item>
        <item>"cdma1x,1"</item>
        <item>"hrpd,3"</item>
        <item>"ehrpd,12"</item>
        <item>"eutran,11"</item>
    </string-array>

    <!-- Whether the new Auto Selection Network UI should be shown -->
    <bool name="config_enableNewAutoSelectNetworkUI">true</bool>

    <!-- Enable ACS (auto channel selection) for Wifi hotspot (SAP) -->
    <bool translatable="false" name="config_wifi_softap_acs_supported">true</bool>

    <!-- Enable 802.11ac for Wifi hotspot (SAP) -->
    <bool translatable="false" name="config_wifi_softap_ieee80211ac_supported">true</bool>

    <!-- Integer thresholds, do not connect to APs with RSSI lower than these values  -->
    <integer translatable="false" name="config_wifi_framework_wifi_score_entry_rssi_threshold_5GHz">-77</integer>
    <integer translatable="false" name="config_wifi_framework_wifi_score_entry_rssi_threshold_24GHz">-80</integer>
    <!-- Integer thresholds for low network score, should be somewhat less than the entry threshholds -->
    <integer translatable="false" name="config_wifi_framework_wifi_score_bad_rssi_threshold_5GHz">-80</integer>
    <integer translatable="false" name="config_wifi_framework_wifi_score_bad_rssi_threshold_24GHz">-83</integer>

    <string name="config_wlan_data_service_package">vendor.qti.iwlan</string>
    <string name="config_wlan_network_service_package">vendor.qti.iwlan</string>
    <string name="config_qualified_networks_service_package">vendor.qti.iwlan</string>

    <!-- Enables or disables haptic effect when the text insertion/selection handle is moved
          manually by the user. Off by default, since the expected haptic feedback may not be
          available on some devices. -->
    <bool name="config_enableHapticTextHandle">true</bool>
    <!-- Enable Zram writeback feature to allow unused pages in zram be written to flash. -->
    <bool name="config_zramWriteback">true</bool>

    <!-- True if the firmware supports connected MAC randomization -->
    <bool name="config_wifi_connected_mac_randomization_supported">true</bool>

    <!-- True if the firmware supports p2p MAC randomization -->
    <bool name="config_wifi_p2p_mac_randomization_supported">true</bool>

    <!-- True if the firmware supports Wi-Fi link probing -->
    <bool name="config_wifi_link_probing_supported">true</bool>

    <!-- The default intensity level for haptic feedback. See
         Settings.System.HAPTIC_FEEDBACK_INTENSITY more details on the constant values and
         meanings. -->
    <integer name="config_defaultHapticFeedbackIntensity">3</integer>
    <!-- The default intensity level for notification vibrations. See
         Settings.System.NOTIFICATION_VIBRATION_INTENSITY more details on the constant values and
         meanings. -->
    <integer name="config_defaultNotificationVibrationIntensity">3</integer>
    <!-- The default intensity level for notification vibrations. See
         Settings.System.RING_VIBRATION_INTENSITY more details on the constant values and
         meanings. -->
    <integer name="config_defaultRingVibrationIntensity">3</integer>
    <!-- Integer delay in milliseconds before set wlan interface up during watchdog recovery -->
    <integer name="config_wifi_framework_recovery_timeout_delay">3000</integer>
    <!-- User activity timeout: Minimum screen off timeout in milliseconds.

         Sets a lower bound for the {@link Settings.System#SCREEN_OFF_TIMEOUT} setting
         which determines how soon the device will go to sleep when there is no
         user activity.

         This value must be greater than zero, otherwise the device will immediately
         fall asleep again as soon as it is awoken.
    -->
    <integer name="config_minimumScreenOffTimeout">7000</integer>

    <!-- An array describing the screen's backlight values corresponding to the brightness
         values in the config_screenBrightnessNits array.

         This array should be equal in size to config_screenBrightnessBacklight. -->
    <integer-array name="config_screenBrightnessBacklight">
        <item>1</item>
        <item>255</item>
    </integer-array>

    <!-- An array of floats describing the screen brightness in nits corresponding to the backlight
         values in the config_screenBrightnessBacklight array.  On OLED displays these  values
         should be measured with an all white image while the display is in the fully on state.
         Note that this value should *not* reflect the maximum brightness value for any high
         brightness modes but only the maximum brightness value obtainable in a sustainable manner.

         This array should be equal in size to config_screenBrightnessBacklight -->
    <array name="config_screenBrightnessNits">
        <item>2.0</item>
        <item>450.0</item>
    </array>

    <!-- Display 90Hz blacklist. Apps that do not work well when the display refreshes at 90Hz.
         When these apps are visible, the display's refresh rate gets fixed to 60Hz. -->
    <string-array name="config_highRefreshRateBlacklist">
        <item>com.google.android.apps.maps</item>
        <item>com.nianticlabs.pokemongo</item>
        <item>com.waze</item>
        <item>com.tencent.mm</item>
    </string-array>

</resources>
