<!--
  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>
    <!-- For vcard.ImportVCardActivity -->
    <item type="id" name="dialog_searching_vcard"/>
    <item type="id" name="dialog_sdcard_not_found"/>
    <item type="id" name="dialog_vcard_not_found"/>
    <item type="id" name="dialog_select_import_type"/>
    <item type="id" name="dialog_select_one_vcard"/>
    <item type="id" name="dialog_select_multiple_vcard"/>
    <item type="id" name="dialog_cache_vcard"/>
    <item type="id" name="dialog_io_exception"/>
    <item type="id" name="dialog_error_with_message"/>

    <!-- For vcard.CancelActivity -->
    <item type="id" name="dialog_cancel_confirmation"/>
    <item type="id" name="dialog_cancel_failed"/>

    <!-- For ExportVCardActivity -->
    <item type="id" name="dialog_export_confirmation"/>
    <item type="id" name="dialog_exporting_vcard"/>
    <item type="id" name="dialog_fail_to_export_with_reason"/>
</resources>
