<?xml version="1.0" encoding="utf-8"?>
<!--
/*
** Copyright 2013, 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">
    <!-- Hardware keys present on the device, stored as a bit field.
         This integer should equal the sum of the corresponding value for each
         of the following keys present:
             1 - Home
             2 - Back
             4 - Menu
             8 - Assistant (search)
            16 - App switch
            32 - Camera
            64 - Volume rocker
         For example, a device with Home, Back and Menu keys would set this
         config to 7. -->
<!--    <integer name="config_deviceHardwareKeys">96</integer> -->

    <!-- Whether a software navigation bar should be shown. NOTE: in the future this may be
         autodetected from the Configuration. -->
    <bool name="config_showNavigationBar">true</bool>

    <!-- 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 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>

    <!-- 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>

    <!-- Array of light sensor LUX values to define our levels for auto backlight brightness support.
         The N entries of this array define N  1 zones as follows:

         Zone 0:        0 <= LUX < array[0]
         Zone 1:        array[0] <= LUX < array[1]
         ...
         Zone N:        array[N - 1] <= LUX < array[N]
         Zone N + 1     array[N] <= LUX < infinity

         Must be overridden in platform specific overlays -->
    <integer-array name="config_autoBrightnessLevels">
        <item>5</item>
        <item>15</item>
        <item>50</item>
        <item>100</item>
        <item>200</item>
        <item>400</item>
        <item>1000</item>
        <item>2000</item>
        <item>3000</item>
        <item>5000</item>
        <item>10000</item>
        <item>30000</item>
    </integer-array>

    <!-- Array of output values for LCD backlight corresponding to the LUX values
         in the config_autoBrightnessLevels array.  This array should have size one greater
         than the size of the config_autoBrightnessLevels array.
         This must be overridden in platform specific overlays -->
    <integer-array name="config_autoBrightnessLcdBacklightValues">
        <item>11</item>   <!-- 0-5 -->
        <item>18</item>   <!-- 5-15 -->
        <item>27</item>   <!-- 15-50 -->
        <item>38</item>   <!-- 50-100 -->
        <item>48</item>   <!-- 100-200 -->
        <item>55</item>   <!-- 200-400 -->
        <item>64</item>   <!-- 400-1000 -->
        <item>74</item>   <!-- 1000-2000 -->
        <item>120</item>  <!-- 2000-3000 -->
        <item>164</item>  <!-- 3000-5000 -->
        <item>225</item>  <!-- 5000-10000 -->
        <item>255</item>  <!-- 10000-30000 -->
        <item>255</item>  <!-- 30000+ -->
    </integer-array>

    <!-- 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,4,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>
    </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>
    </string-array>

    <!-- 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>"wlan0"</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>"bnep\\d"</item>
        <item>"bt-pan"</item>
    </string-array>

    <!-- Array of ConnectivityManager.TYPE_xxxx values allowable for tethering -->
    <!-- Common options are [1, 4] for TYPE_WIFI and TYPE_MOBILE_DUN or
    <!== [0,1,5,7] for TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI and TYPE_BLUETOOTH -->
    <integer-array translatable="false" name="config_tether_upstream_types">
        <item>0</item>
        <item>1</item>
        <item>4</item>
        <item>5</item>
        <item>7</item>
    </integer-array>

    <!-- Boolean indicddating 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 this is true, the screen will come on when you unplug usb/power/whatever. -->
    <bool name="config_unplugTurnsOnScreen">true</bool>

    <bool name="config_enableWifiDisplay">true</bool>

    <!-- Set to true if the wifi display supports compositing content stored
         in gralloc protected buffers.  For this to be true, there must exist
         a protected hardware path for surface flinger to composite and send
         protected buffers to the wifi display video encoder.

         If this flag is false, we advise applications not to use protected
         buffers (if possible) when presenting content to a wifi display because
         the content may be blanked.

         This flag controls whether the {@link Display#FLAG_SUPPORTS_PROTECTED_BUFFERS}
         flag is set for wifi displays.
    -->
    <bool name="config_wifiDisplaySupportsProtectedBuffers">true</bool>

    <!-- Is the notification LED intrusive? Used to decide if there should be a disable option -->
    <bool name="config_intrusiveNotificationLed">true</bool>

    <!-- Is the battery LED intrusive? Used to decide if there should be a disable option -->
<!--    <bool name="config_intrusiveBatteryLed">true</bool> -->

    <!-- Setting this true forces the headset jack switches to use the/dev/input/event subsystem
         rather than the uevent framework. -->
    <bool name="config_useDevInputEventForAudioJack">true</bool>

    <!-- Indicate whether to allow the device to suspend when the screen is off
         due to the proximity sensor.  This resource should only be set to true
         if the sensor HAL correctly handles the proximity sensor as a wake-up source.
         Otherwise, the device may fail to wake out of suspend reliably.
         The default is false. -->
    <bool name="config_suspendWhenScreenOffDueToProximity">true</bool>

    <!--  Maximum number of supported users -->
    <integer name="config_multiuserMaximumUsers">4</integer>
    <!--  Whether Multiuser UI should be shown -->
    <bool name="config_enableMultiUserUI">true</bool>

    <string-array name="config_mobile_tcp_buffers">
        <item>"lte:2097152,4194304,8388608,262144,524288,1048576"</item>
        <item>"lte_ca:2097152,4194304,8388608,262144,524288,1048576"</item>
        <item>"umts:4094,87380,1220608,4096,16384,1220608"</item>
        <item>"hspa:4094,87380,1220608,4096,16384,1220608"</item>
        <item>"hsupa:4094,87380,1220608,4096,16384,1220608"</item>
        <item>"hsdpa:4094,87380,2441216,4096,16384,2441216"</item>
        <item>"hspap:4094,87380,1220608,4096,16384,1220608"</item>
        <item>"edge:4093,26280,35040,4096,16384,35040"</item>
        <item>"gprs:4092,8760,11680,4096,8760,11680"</item>
        <item>"evdo:4094,87380,1048576,4096,16384,262144"</item>
        <item>"ehrpd:4094,87380,1048576,4096,16384,262144"</item>
    </string-array>

    <!-- Doze mode -->
    <string name="config_dozeComponent">com.android.systemui/com.android.systemui.doze.DozeService</string>
    <integer name="config_screenBrightnessDoze">5</integer>
    <bool name="config_dozeAfterScreenOff">true</bool>
    <bool name="config_powerDecoupleInteractiveModeFromDisplay">true</bool>

    <!-- Enable doze powersaving -->
    <bool name="config_enableAutoPowerModes">true</bool>

    <!-- Control whether Night display is available. This should only be enabled on devices
         with HWC 2.0 or higher. -->
    <bool name="config_nightDisplayAvailable">true</bool>

    <!-- 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,4194304,262144,524288,1048576</string>

    <!-- Operating voltage for bluetooth controller. 0 by default-->
    <integer translatable="false" name="config_bluetooth_operating_voltage_mv">3700</integer>

    <!-- Configuration to support SIM contact batch operation -->
<!--    <bool name="config_sim_phonebook_batch_operation">false</bool> -->

    <!-- The RadioAccessFamilies supported by the device.
         Empty is viewed as "all".  Only used on devices which
         don't support RIL_REQUEST_GET_RADIO_CAPABILITY
         format is UMTS|LTE|... -->
    <string name="config_radio_access_family">GPRS|EDGE|UMTS|HSDPA|HSUPA|HSPA|LTE|HSPAP|GSM|TD_SCDMA|WCDMA|LTE_CA</string>

    <!-- 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>

    <!-- MMS user agent string -->
    <string name="config_mms_user_agent" translatable="false">Android-Mms/2.0</string>

    <!-- MMS user agent prolfile url -->
    <string name="config_mms_user_agent_profile_url" translatable="false"
            >http://www.google.com/oha/rdf/ua-profile-kila.xml</string>

    <!-- Defines the default set of global actions. Actions may still be disabled or hidden based
         on the current state of the device.
         Each item must be one of the following strings:
         "power" = Power off
         "settings" = An action to launch settings
         "airplane" = Airplane mode toggle
         "bugreport" = Take bug report, if available
         "silent" = silent mode
         "users" = list of users
         "restart" = restart device
         -->
    <string-array translatable="false" name="config_globalActionsList">
        <item>power</item>
        <item>restart</item>
    </string-array>

    <!-- Values for GPS configuration -->
    <string-array translatable="false" name="config_gpsParameters">
        <item>XTRA_SERVER_1=https://xtrapath1.izatcloud.net/xtra3grc.bin</item>
        <item>XTRA_SERVER_2=https://xtrapath2.izatcloud.net/xtra3grc.bin</item>
        <item>XTRA_SERVER_3=https://xtrapath3.izatcloud.net/xtra3grc.bin</item>
        <item>NTP_SERVER=pool.ntp.org</item>
        <item>SUPL_ES=0</item>
        <item>SUPL_HOST=supl.google.com</item>
        <item>SUPL_PORT=7275</item>
        <item>SUPL_MODE=1</item>
        <item>LPP_PROFILE=0</item>
    </string-array>
</resources>
