Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1789f7d2 authored by Adam Lesinski's avatar Adam Lesinski
Browse files

Update to use new UsageStats API

Change-Id: Ic6f9523c4c70f8b832d8f57551417f4f19ea144f
parent 911de7fa
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1507,7 +1507,7 @@
            </intent-filter>
        </activity>

        <activity android:name="UsageStats" android:label="@string/usage_stats_label"
        <activity android:name="UsageStatsActivity" android:label="@string/usage_stats_label"
                  android:taskAffinity="com.android.settings"
                  android:parentActivityName="Settings">
            <intent-filter>
+41 −30
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@
package com.android.settings;

import android.app.Activity;
import android.app.usage.PackageUsageStats;
import android.app.usage.UsageStats;
import android.app.usage.UsageStatsManager;
import android.content.Context;
import android.content.pm.ApplicationInfo;
@@ -30,6 +30,7 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;

import android.text.format.DateUtils;
@@ -48,7 +49,7 @@ import android.widget.AdapterView.OnItemSelectedListener;
/**
 * Activity to display package usage statistics.
 */
public class UsageStats extends Activity implements OnItemSelectedListener {
public class UsageStatsActivity extends Activity implements OnItemSelectedListener {
    private static final String TAG = "UsageStatsActivity";
    private static final boolean localLOGV = false;
    private UsageStatsManager mUsageStatsManager;
@@ -56,7 +57,7 @@ public class UsageStats extends Activity implements OnItemSelectedListener {
    private UsageStatsAdapter mAdapter;
    private PackageManager mPm;

    public static class AppNameComparator implements Comparator<PackageUsageStats> {
    public static class AppNameComparator implements Comparator<UsageStats> {
        private Map<String, String> mAppLabelList;

        AppNameComparator(Map<String, String> appList) {
@@ -64,25 +65,25 @@ public class UsageStats extends Activity implements OnItemSelectedListener {
        }

        @Override
        public final int compare(PackageUsageStats a, PackageUsageStats b) {
        public final int compare(UsageStats a, UsageStats b) {
            String alabel = mAppLabelList.get(a.getPackageName());
            String blabel = mAppLabelList.get(b.getPackageName());
            return alabel.compareTo(blabel);
        }
    }

    public static class LastTimeUsedComparator implements Comparator<PackageUsageStats> {
    public static class LastTimeUsedComparator implements Comparator<UsageStats> {
        @Override
        public final int compare(PackageUsageStats a, PackageUsageStats b) {
        public final int compare(UsageStats a, UsageStats b) {
            // return by descending order
            return (int)(b.getLastTimeUsed() - a.getLastTimeUsed());
        }
    }

    public static class UsageTimeComparator implements Comparator<PackageUsageStats> {
    public static class UsageTimeComparator implements Comparator<UsageStats> {
        @Override
        public final int compare(PackageUsageStats a, PackageUsageStats b) {
            return (int)(b.getTotalTimeSpent() - a.getTotalTimeSpent());
        public final int compare(UsageStats a, UsageStats b) {
            return (int)(b.getTotalTimeInForeground() - a.getTotalTimeInForeground());
        }
    }

@@ -104,32 +105,43 @@ public class UsageStats extends Activity implements OnItemSelectedListener {
        private UsageTimeComparator mUsageTimeComparator = new UsageTimeComparator();
        private AppNameComparator mAppLabelComparator;
        private final ArrayMap<String, String> mAppLabelMap = new ArrayMap<>();
        private final ArrayList<PackageUsageStats> mPackageStats = new ArrayList<>();
        private final ArrayList<UsageStats> mPackageStats = new ArrayList<>();

        UsageStatsAdapter() {
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.DAY_OF_YEAR, -5);

            final android.app.usage.UsageStats stats =
                    mUsageStatsManager.getRecentStatsSince(cal.getTimeInMillis());
            final List<UsageStats> stats =
                    mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST,
                            cal.getTimeInMillis(), System.currentTimeMillis());
            if (stats == null) {
                return;
            }

            final int pkgCount = stats.getPackageCount();
            for (int i = 0; i < pkgCount; i++) {
                final PackageUsageStats pkgStats = stats.getPackage(i);
            ArrayMap<String, UsageStats> map = new ArrayMap<>();
            final int statCount = stats.size();
            for (int i = 0; i < statCount; i++) {
                final android.app.usage.UsageStats pkgStats = stats.get(i);

                // load application labels for each application
                try {
                    ApplicationInfo appInfo = mPm.getApplicationInfo(pkgStats.getPackageName(), 0);
                    String label = appInfo.loadLabel(mPm).toString();
                    mAppLabelMap.put(pkgStats.getPackageName(), label);
                    mPackageStats.add(pkgStats);

                    UsageStats existingStats =
                            map.get(pkgStats.getPackageName());
                    if (existingStats == null) {
                        map.put(pkgStats.getPackageName(), pkgStats);
                    } else {
                        existingStats.add(pkgStats);
                    }

                } catch (NameNotFoundException e) {
                    // This package may be gone.
                }
            }
            mPackageStats.addAll(map.values());

            // Sort list
            mAppLabelComparator = new AppNameComparator(mAppLabelMap);
@@ -177,14 +189,14 @@ public class UsageStats extends Activity implements OnItemSelectedListener {
            }

            // Bind the data efficiently with the holder
            PackageUsageStats pkgStats = mPackageStats.get(position);
            UsageStats pkgStats = mPackageStats.get(position);
            if (pkgStats != null) {
                String label = mAppLabelMap.get(pkgStats.getPackageName());
                holder.pkgName.setText(label);
                holder.lastTimeUsed.setText(DateUtils.formatSameDayTime(pkgStats.getLastTimeUsed(),
                        System.currentTimeMillis(), DateFormat.MEDIUM, DateFormat.MEDIUM));
                holder.usageTime.setText(
                        DateUtils.formatElapsedTime(pkgStats.getTotalTimeSpent() / 1000));
                        DateUtils.formatElapsedTime(pkgStats.getTotalTimeInForeground() / 1000));
            } else {
                Log.w(TAG, "No usage stats info for package:" + position);
            }
@@ -242,4 +254,3 @@ public class UsageStats extends Activity implements OnItemSelectedListener {
        // do nothing
    }
}