<!--
   Copyright 2015, 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">

    <!-- This is the name of the keyboard updater service. It is shown in
         Settings > Apps and when the user activates the Recents view while in the
         installation confirmation screen.
    -->
    <string name="app_name"><xliff:g id="product_name">Pixel C</xliff:g> Keyboard Firmware Updater</string>

    <!-- Static information of the target keyboard. (for service use) -->
    <string name="target_keyboard_name" translatable="false">Pixel C Keyboard</string>
    <string name="target_manufacturer" translatable="false">Google</string>
    <string name="target_battery_level" translatable="false">20</string>
    <string name="target_firmware_version" translatable="false">0.151104</string>
    <string name="target_min_updatable_firmware_version" translatable="false">0.151020</string>

    <!-- File names of the firmware images in raw resource (for service use)-->
    <string name="target_firmware_init_file_name" translatable="false">init_151104_mp_signed</string>
    <string name="target_firmware_image_file_name" translatable="false">image_151104_mp_signed</string>

    <!-- The update notification message title shown when a keyboard update is
         available. Users are given the option to install or postpone the update.
    -->
    <string name="notification_update_title">Keyboard update available</string>

    <!-- The update notification message subtitle shown when a keyboard update
         is available. It elaborates more on the title of the notification
         ("Keyboard update available") by specifying the product name. Users are
         given the option to install or postpone the update.
    -->
    <string name="notification_update_text"><xliff:g id="product_name">Pixel C</xliff:g> Keyboard update is ready</string>

    <!-- One of the two options provided by the "keyboard update available"
         notification. Tapping on this option will dismiss the notification, and
         the notification is expected to resurface again some time later.
    -->
    <string name="notification_update_later">LATER</string>

    <!-- One of the two options provided by the "keyboard update available"
         notification. Tapping on this option will send users to the
         installation screen.
    -->
    <string name="notification_update_install">INSTALL</string>

    <!-- The battery warning notification message title shown when the battery
         level of a keyboard is low.
    -->
    <string name="notification_battery_warning_title"><xliff:g id="product_name">Pixel C</xliff:g> Keyboard battery low</string>

    <!-- The battery warning notification message subtitle shown when the
         battery level of a keyboard is low. It gives the users an instruction
         on how they charge the keyboard. The most important points to convey to
         the users are that the Pixel C has to be charged face down on the
         keyboard, otherwise the keyboard won't charge.
    -->
    <string name="notification_battery_warning_text">Charge your <xliff:g id="product_name">Pixel C</xliff:g> while it is face down on the keyboard</string>

    <!-- The text shown in the installation confirmation screen. The most
         important points to convey to the user are that the keyboard will not work
         during the update, and that they should not disconnect it during the
         process.
    -->
    <string name="confirmation_update_info">The keyboard will not work while it is updating.\nThis will take about 3 minutes.\n\nPlease do not disconnect the keyboard before the update completes.\n</string>

    <!-- A button provided on the installation confirmation screen. Tapping on
         this will begin the installation process.
    -->
    <string name="confirmation_install">INSTALL</string>

</resources>
