<?xml version="1.0" encoding="utf-8"?>
<!--
/**
 * Copyright (c) 2010, 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">
    <!-- Label for this package -->
    <string
        name="label">Sample SyncAdapter</string>

    <!-- Permission label -->
    <string
        name="permlab_samplesyncadapterAuthPassword">access to passwords for Sample SyncAdapter accounts</string>
    <!-- Permission description -->
    <string
        name="permdesc_samplesyncadapterAuthPassword">Allows applications direct access to the passwords for the
        Sample SyncAdapter account(s) you have configured.</string>

    <!-- Permission label -->
    <string
        name="permlab_samplesyncadapterAuth">view configured accounts</string>
    <!-- Permission description -->
    <string
        name="permdesc_samplesyncadapterAuth">Allows applications to see the usernames (email addresses) of
        the Sample SyncAdapter account(s) you have configured.</string>
    <string
        name="notification_login_error">Touch to sign into your Sample SyncAdapter account.</string>

    <!-- Title string for Login activity-->
    <string
        name="ui_activity_title">Sign-in</string>
    <!-- Message shown in progress dialog while app connects to the server -->
    <string
        name="ui_activity_authenticating">Authenticating\u2026</string>

    <!-- AuthenticatorActivity -->
    <skip />
    <!-- Label above username EditText -->
    <string
        name="login_activity_username_label">Username</string>
    <!-- Label above password EditText -->
    <string
        name="login_activity_password_label">Password</string>
    <!-- Button to sign in after entering username and password -->
    <string
        name="login_activity_ok_button">Sign in</string>

    <!-- Message shown in dialog if the username or password is invalid. -->
    <string
        name="login_activity_loginfail_text_both">The username or password isn\'t valid. A Sample SyncAdapter account is
        required. Please try again. </string>
    <!-- Message shown in dialog if the password is invalid -->
    <string
        name="login_activity_loginfail_text_pwonly">You entered the wrong password or your account has changed.
        Please re-enter your password.</string>
    <!-- Message shown in dialog to prompt the user for their password -->
    <string
        name="login_activity_loginfail_text_pwmissing">Type the password for this account.</string>
    <!--
        Message shown if the provided account doesn't support the current
        activity.
    -->
    <string
        name="login_activity_newaccount_text">Sign in to your Sample SyncAdapter account. </string>

    <!-- Button that takes the user to the "sign in" screen -->
    <string
        name="sign_in_button_label">Sign in</string>
    <!-- Button for going to the previous screen or step -->
    <string
        name="back_button_label">Back</string>
    <!-- Button to cancel the current operation -->
    <string
        name="cancel_button_label">Cancel</string>
    <string
        name="profile_action">Sample profile</string>
    <string
        name="view_profile">View Profile</string>

    <string name="header_account_type">SampleSync contact</string>

    <string name="label_name">Name</string>
    <string name="label_phone_home">Home Phone</string>
    <string name="label_phone_mobile">Mobile Phone</string>
    <string name="label_phone_work">Work Phone</string>
    <string name="label_email">Email</string>
    <string
        name="menu_done">Done</string>
    <string
        name="menu_cancel">Cancel</string>

    <!-- Strings for contacts.xml -->
    <skip />

    <!-- The label of the button to add contact to this contact provider  -->
    <string name="invite_action_label">Add to Sample SyncAdaper</string>

    <!-- The description for the invite contact flow -->
    <string name="invite_contact_description">Congratulations! The user wants to add the contact
        to the amazing Sample SyncAdapter social network. If this was a real app, it should now
        make best efforts to add the contact to this network. This would probably involve
        looking up the person on the network, inviting if he is not there already and syncing
        the new contact down.

        Ideally, when the user gets back to the People app, the new contact should already
        be there, enriching the original contact.

        This is the information we got to lookup the contact:</string>

    <!-- The label of the button to view a group -->
    <string name="view_group_action_label">Show sample group details</string>

    <!-- The description for the view group button -->
    <string name="view_group_description">This would now show the details of the group.

        This is the group uri:</string>

    <!-- The description for the view stream item -->
    <string name="view_stream_item_description">This would now show the details of the stream item.

        This is the uri of the stream item:</string>

    <!-- The description for the view stream item photo -->
    <string name="view_stream_item_photo_description">This would now show the details of the stream item photo.

        This is the uri of the photo:</string>

</resources>