<?xml version="1.0" encoding="UTF-8"?>
<!--
 Copyright 2013 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>SpeedTracker</name>
    <group>Wearable</group>
    <package>com.example.android.wearable.speedtracker</package>

    <minSdk>18</minSdk>

    <minSdkVersionWear>23</minSdkVersionWear>
    <multiDexEnabled>true</multiDexEnabled>

    <wearable>
        <has_handheld_app>true</has_handheld_app>
    </wearable>

    <dependency>com.android.support:design:27.1.1</dependency>
    <dependency_wearable>com.android.support:wear:27.1.1</dependency_wearable>

    <dependency>com.google.android.gms:play-services-maps</dependency>
    <dependency>com.google.android.gms:play-services-location</dependency>
    <dependency_wearable>com.google.android.gms:play-services-location</dependency_wearable>

    <strings>
        <intro>
            <![CDATA[
This sample uses the FusedLocation APIs of Google Play Services
to gather location and speed. The sample provides a simple screen that shows the
current speed of the device on the watch. User can set a speed
limit and if the speed approaches that limit, it changes the
color to yellow and if it exceeds the limit, it turns red. User
can also enable recording of coordinates and when it pairs back
with the phone, this data will be synced with the phone
component of the app and user can see a track made of those
coordinates on a map on the phone.
            ]]>
        </intro>
    </strings>

    <template src="base"/>
    <template src="WearPlusShared"/>

    <metadata>
        <!-- Values: {DRAFT | PUBLISHED | INTERNAL | DEPRECATED | SUPERCEDED} -->
        <status>PUBLISHED</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>GPS, 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 -->

        <!-- 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>com.google.android.gms.maps.MapFragment</android>
            <android>com.google.android.gms.common.ConnectionResult</android>
            <android>com.google.android.gms.common.api.GoogleApiClient</android>
            <android>com.google.android.gms.common.api.ResultCallback</android>
            <android>com.google.android.gms.common.api.Status</android>
            <android>com.google.android.gms.location.LocationListener</android>
            <android>com.google.android.gms.location.LocationRequest</android>
            <android>com.google.android.gms.location.LocationServices</android>
            <android>com.google.android.gms.wearable.DataApi</android>
            <android>com.google.android.gms.wearable.PutDataMapRequest</android>
            <android>com.google.android.gms.wearable.PutDataRequest</android>
            <android>com.google.android.gms.wearable.Wearable</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>
            Sample demonstrates recording location and speed with a Wear device in mind. Location is
            retrieved via FusedLocatinProvider which retrieves coordinates from the phone or Wear
            depending on whether the phone is disconnected or not and whether the Wear device has a
            GPS chip.
        </description>

        <!-- Multi-paragraph introduction to sample, from an educational point-of-view.
        Markdown formatting allowed. This will be used to generate a mini-article for the
        sample on DAC. -->
        <intro>
<![CDATA[

Steps for trying out this sample:
* Compile and install the mobile app onto your mobile device or emulator.
* Compile and install the wearable app onto your Wear device or emulator.
(**Note:** wearable apps are not automatically pushed from your mobile device
unless you build a production release, see [here][1] for more info).

Sample demonstrates retrieving location and speed samples on Wear using the FusedLocationProvider.
It also passes GPS location information back to the mobile device via the Data Layer to be rendered
on a Map Fragment.

[1]: https://developer.android.com/training/wearables/apps/creating.html#Install
]]>
        </intro>
    </metadata>

</sample>
