<?xml version="1.0" encoding="UTF-8"?>
<!--
 Copyright 2014 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>AppUsageStatistics</name>
    <group>System</group>
    <package>com.example.android.appusagestatistics</package>

    <minSdk>21</minSdk>

    <dependency>com.android.support:recyclerview-v7:+</dependency>
    <dependency>com.android.support:appcompat-v7:21.+</dependency>

    <strings>
        <intro>
            <![CDATA[
            This sample explains how to use App usage statistics API, which was introduced
            in Android 5.0.
            ]]>
        </intro>
    </strings>

    <template src="base" />

    <metadata>
        <status>DRAFT</status>
        <categories>System</categories>
        <technologies>Android</technologies>
        <languages>Java</languages>
        <solutions>Mobile</solutions>
        <level>INTERMEDIATE</level>
        <icon>screenshots/web-icon.png</icon>
        <screenshots>
            <img>screenshots/screenshot-1.png</img>
            <img>screenshots/screenshot-2.png</img>
        </screenshots>
        <api_refs>
            <android>android.app.usage.UsageStats</android>
            <android>android.app.usage.UsageStatsManager</android>
        </api_refs>

        <description>
<![CDATA[
A basic app showing how to use App usage statistics API to let users collect statistics related
to usage of the applications.
]]>
        </description>

        <intro>
<![CDATA[
The [App usage statistics][1] API allows app developers to collect statistics related to usage of
the applications. This API provides more detailed usage information than the deprecated
[getRecentTasks()][2] method.

This example illustrates how to use the App usage statistics API by showing the applications sorted
by the timestamp of the last time each app was used.

To use this API, you must first declare the `android.permission.PACKAGE_USAGE_STATS` permission
in your manifest. The user must also enable access for this app through
`Settings > Security > Apps with usage access`.

To collect the statistics of the app usage, you need to first get the instance of
[UsageStatsManager][3] by the following code:

```java
mUsageStatsManager = (UsageStatsManager) getActivity()
       .getSystemService(Context.USAGE_STATS_SERVICE);
```

Then you can retrieve the statistics of the app usage by the following method:

```java
Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, -1);
List<UsageStats> queryUsageStats = mUsageStatsManager
        .queryUsageStats(UsageStatsManager.INTERVAL_DAILY, cal.getTimeInMillis(),
                System.currentTimeMillis());
```

The first argument of the [queryUsageStats()][4] is used for the time interval by which the
stats are aggregated. The second and the third arguments are used for specifying the beginning
and the end of the range of the stats to include in the results.

[1]: https://developer.android.com/reference/android/app/usage/package-summary.html
[2]: https://developer.android.com/reference/android/app/ActivityManager.html#getRecentTasks(int%2C%20int)
[3]: https://developer.android.com/reference/android/app/usage/UsageStatsManager.html
[4]: https://developer.android.com/reference/android/app/usage/UsageStatsManager.html#queryUsageStats(int%2C%20long%2C%20long)
]]>
        </intro>
    </metadata>
</sample>
