<!--
  ~ Copyright (C) 2012 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>
    <!-- Flag indicating whether Contacts app is allowed to import contacts from SDCard -->
    <bool name="config_allow_import_from_sdcard">true</bool>
    <!-- If true, all vcard files are imported from SDCard without asking a user.
    If not, dialog shows to let the user to select whether all vcard files are imported or not.
    If the user selects "not", then the application ask the user to select a file.-->
    <bool name="config_import_all_vcard_from_sdcard_automatically">false</bool>
    <!-- If true, vcard importer shows a dialog which asks the user whether the user wants
    to import all vcard files in SDCard or select one vcard file. If false, the dialog is
    skipped and the importer asks the user to choose one vcard file.
    If config_import_all_vcard_from_sdcard_automatically is set true, this configuration
    is ignored. -->
    <bool name="config_allow_users_select_all_vcard_import">true</bool>

    <!-- If true, an option is shown in Display Options UI to choose a sort order -->
    <bool name="config_sort_order_user_changeable">true</bool>

    <!-- If true, the default sort order is primary (i.e. by given name) -->
    <bool name="config_default_sort_order_primary">true</bool>

    <!-- If true, an option is shown in Display Options UI to choose a name display order -->
    <bool name="config_display_order_user_changeable">true</bool>

    <!-- If true, the default sort order is primary (i.e. by given name) -->
    <bool name="config_default_display_order_primary">true</bool>

    <!-- If true, the order of name fields in the editor is primary (i.e. given name first) -->
    <bool name="config_editor_field_order_primary">true</bool>

    <!-- The type of VCard for export. If you want to let the app emit vCard which is
    specific to some vendor (like DoCoMo), specify this type (e.g. "docomo") -->
    <string name="config_export_vcard_type" translatable="false">default</string>

    <!-- The type of vcard for improt. If the vcard importer cannot guess the exact type
    of a vCard type, the improter uses this type. -->
    <string name="config_import_vcard_type" translatable="false">default</string>

    <!-- Prefix of exported VCard file -->
    <string name="config_export_file_prefix" translatable="false"></string>

    <!-- Suffix of exported VCard file. Attached before an extension -->
    <string name="config_export_file_suffix" translatable="false"></string>

    <!-- Extension for exported VCard files -->
    <string name="config_export_file_extension" translatable="false">vcf</string>

    <!-- Minimum number of exported VCard file index -->
    <integer name="config_export_file_min_index">1</integer>

    <!-- Maximum number of exported VCard file index -->
    <integer name="config_export_file_max_index">99999</integer>

    <!-- The list (separated by ',') of extensions should be checked in addition to
     config_export_extension. e.g. If "aaa" is added to here and 00001.vcf and 00002.aaa
     exist in a target directory, 00003.vcf becomes a next file name candidate.
     Without this configuration, 00002.vcf becomes the candidate.-->
    <string name="config_export_extensions_to_consider" translatable="false"></string>

    <!-- If true, enable the "import contacts from SIM" feature if the device
         has an appropriate SIM or ICC card.
         Setting this flag to false in a resource overlay allows you to
         entirely disable SIM import on a per-product basis. -->
    <bool name="config_allow_sim_import">true</bool>

    <!-- Flag indicating whether Contacts app is allowed to export contacts to SDCard -->
    <bool name="config_allow_export_to_sdcard">true</bool>

    <!-- Flag indicating whether Contacts app is allowed to share contacts with devices outside -->
    <bool name="config_allow_share_visible_contacts">true</bool>

</resources>
