<?xml version="1.0" encoding="UTF-8"?>
<!--
 Copyright 2017 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.
-->
<sample>
    <name>WearComplicationProvidersTestSuite</name>
    <group>Wearable</group>
    <package>com.example.android.wearable.wear.wearcomplicationproviderstestsuite</package>

    <minSdk>18</minSdk>
    <targetSdkVersion>28</targetSdkVersion>

    <minSdkVersionWear>23</minSdkVersionWear>
    <targetSdkVersionWear>28</targetSdkVersionWear>

    <wearable>
        <has_handheld_app>false</has_handheld_app>
    </wearable>

    <androidX>true</androidX>

    <dependency_wearable>androidx.appcompat:appcompat:1.0.2</dependency_wearable>
    <dependency_wearable>androidx.legacy:legacy-support-v13:1.0.0</dependency_wearable>

    <strings>
        <intro>
<![CDATA[
Complication Test Suite is a set of complication providers that provide dummy data and it can be
used to test how different types of complications render on a watch face.
]]>
        </intro>
    </strings>

    <template src="base-build" />
    <template src="Wear" />

    <metadata>
        <!-- Values: {DRAFT | PUBLISHED | INTERNAL | DEPRECATED | SUPERCEDED} -->
        <status>DEPRECATED</status>
        <!-- See http://go/sample-categories for details on the next 4 fields. -->
        <!-- Most samples just need to udpate the Categories field. This is a comma-
             seperated list of topic tags. Unlike the old category system, samples
             may have multiple categories, so feel free to add extras. Try to avoid
             simply tagging everything with "UI". :)-->
        <categories>Wearable</categories>
        <technologies>Android</technologies>
        <languages>Java</languages>
        <solutions>Mobile</solutions>
        <!-- Values: {BEGINNER | INTERMEDIATE | ADVANCED | EXPERT} -->
        <!-- Beginner is for "getting started" type content, or essential content.
             (e.g. "Hello World", activities, intents)

             Intermediate is for content that covers material a beginner doesn't need
             to know, but that a skilled developer is expected to know.
             (e.g. services, basic styles and theming, sync adapters)

             Advanced is for highly technical content geared towards experienced developers.
             (e.g. performance optimizations, custom views, bluetooth)

             Expert is reserved for highly technical or specialized content, and should
             be used sparingly. (e.g. VPN clients, SELinux, custom instrumentation runners) -->
        <level>INTERMEDIATE</level>
        <!-- Dimensions: 512x512, PNG fomrat -->
        <icon>screenshots/icon-web.png</icon>
        <!-- Path to screenshots. Use <img> tags for each. -->
        <screenshots>
            <img>screenshots/wear-1.png</img>
            <img>screenshots/wear-2.png</img>
        </screenshots>
        <!-- List of APIs that this sample should be cross-referenced under. Use <android>
        for fully-qualified Framework class names ("android:" namespace).

        Use <ext> for custom namespaces, if needed. See "Samples Index API" documentation
        for more details. -->
        <api_refs>
            <android>android.support.wearable.complications.ComplicationData</android>
            <android>android.support.wearable.complications.ComplicationManager</android>
            <android>android.support.wearable.complications.ComplicationProviderService</android>
            <android>android.support.wearable.complications.ComplicationText</android>
            <android>android.support.wearable.complications.ProviderUpdateRequester</android>
        </api_refs>

        <!-- 1-3 line description of the sample here.

            Avoid simply rearranging the sample's title. What does this sample actually
            accomplish, and how does it do it? -->
        <description>
            <![CDATA[
Sample moved to [github.com/android/wear-os][1].

[1]: https://github.com/android/wear-os
]]>
        </description>

        <intro>
            <![CDATA[
This repo and all Wear OS samples have been moved to [github.com/android/wear-os][1]. Please check out the code there. Thank you!

[1]: https://github.com/android/wear-os
]]>
        </intro>
    </metadata>
</sample>
