Update to use new UsageStats API

Change-Id: Ic6f9523c4c70f8b832d8f57551417f4f19ea144f
This commit is contained in:
Adam Lesinski
2014-08-06 17:53:38 -07:00
parent 911de7fa85
commit 1789f7d236
2 changed files with 42 additions and 31 deletions

View File

@@ -1507,7 +1507,7 @@
</intent-filter> </intent-filter>
</activity> </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:taskAffinity="com.android.settings"
android:parentActivityName="Settings"> android:parentActivityName="Settings">
<intent-filter> <intent-filter>

View File

@@ -17,7 +17,7 @@
package com.android.settings; package com.android.settings;
import android.app.Activity; import android.app.Activity;
import android.app.usage.PackageUsageStats; import android.app.usage.UsageStats;
import android.app.usage.UsageStatsManager; import android.app.usage.UsageStatsManager;
import android.content.Context; import android.content.Context;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
@@ -30,6 +30,7 @@ import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.List;
import java.util.Map; import java.util.Map;
import android.text.format.DateUtils; import android.text.format.DateUtils;
@@ -48,7 +49,7 @@ import android.widget.AdapterView.OnItemSelectedListener;
/** /**
* Activity to display package usage statistics. * 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 String TAG = "UsageStatsActivity";
private static final boolean localLOGV = false; private static final boolean localLOGV = false;
private UsageStatsManager mUsageStatsManager; private UsageStatsManager mUsageStatsManager;
@@ -56,7 +57,7 @@ public class UsageStats extends Activity implements OnItemSelectedListener {
private UsageStatsAdapter mAdapter; private UsageStatsAdapter mAdapter;
private PackageManager mPm; private PackageManager mPm;
public static class AppNameComparator implements Comparator<PackageUsageStats> { public static class AppNameComparator implements Comparator<UsageStats> {
private Map<String, String> mAppLabelList; private Map<String, String> mAppLabelList;
AppNameComparator(Map<String, String> appList) { AppNameComparator(Map<String, String> appList) {
@@ -64,25 +65,25 @@ public class UsageStats extends Activity implements OnItemSelectedListener {
} }
@Override @Override
public final int compare(PackageUsageStats a, PackageUsageStats b) { public final int compare(UsageStats a, UsageStats b) {
String alabel = mAppLabelList.get(a.getPackageName()); String alabel = mAppLabelList.get(a.getPackageName());
String blabel = mAppLabelList.get(b.getPackageName()); String blabel = mAppLabelList.get(b.getPackageName());
return alabel.compareTo(blabel); return alabel.compareTo(blabel);
} }
} }
public static class LastTimeUsedComparator implements Comparator<PackageUsageStats> { public static class LastTimeUsedComparator implements Comparator<UsageStats> {
@Override @Override
public final int compare(PackageUsageStats a, PackageUsageStats b) { public final int compare(UsageStats a, UsageStats b) {
// return by descending order // return by descending order
return (int)(b.getLastTimeUsed() - a.getLastTimeUsed()); return (int)(b.getLastTimeUsed() - a.getLastTimeUsed());
} }
} }
public static class UsageTimeComparator implements Comparator<PackageUsageStats> { public static class UsageTimeComparator implements Comparator<UsageStats> {
@Override @Override
public final int compare(PackageUsageStats a, PackageUsageStats b) { public final int compare(UsageStats a, UsageStats b) {
return (int)(b.getTotalTimeSpent() - a.getTotalTimeSpent()); return (int)(b.getTotalTimeInForeground() - a.getTotalTimeInForeground());
} }
} }
@@ -104,36 +105,47 @@ public class UsageStats extends Activity implements OnItemSelectedListener {
private UsageTimeComparator mUsageTimeComparator = new UsageTimeComparator(); private UsageTimeComparator mUsageTimeComparator = new UsageTimeComparator();
private AppNameComparator mAppLabelComparator; private AppNameComparator mAppLabelComparator;
private final ArrayMap<String, String> mAppLabelMap = new ArrayMap<>(); private final ArrayMap<String, String> mAppLabelMap = new ArrayMap<>();
private final ArrayList<PackageUsageStats> mPackageStats = new ArrayList<>(); private final ArrayList<UsageStats> mPackageStats = new ArrayList<>();
UsageStatsAdapter() { UsageStatsAdapter() {
Calendar cal = Calendar.getInstance(); Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_YEAR, -5); cal.add(Calendar.DAY_OF_YEAR, -5);
final android.app.usage.UsageStats stats = final List<UsageStats> stats =
mUsageStatsManager.getRecentStatsSince(cal.getTimeInMillis()); mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST,
cal.getTimeInMillis(), System.currentTimeMillis());
if (stats == null) { if (stats == null) {
return; return;
} }
final int pkgCount = stats.getPackageCount(); ArrayMap<String, UsageStats> map = new ArrayMap<>();
for (int i = 0; i < pkgCount; i++) { final int statCount = stats.size();
final PackageUsageStats pkgStats = stats.getPackage(i); for (int i = 0; i < statCount; i++) {
final android.app.usage.UsageStats pkgStats = stats.get(i);
// load application labels for each application // load application labels for each application
try { try {
ApplicationInfo appInfo = mPm.getApplicationInfo(pkgStats.getPackageName(), 0); ApplicationInfo appInfo = mPm.getApplicationInfo(pkgStats.getPackageName(), 0);
String label = appInfo.loadLabel(mPm).toString(); String label = appInfo.loadLabel(mPm).toString();
mAppLabelMap.put(pkgStats.getPackageName(), label); 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) { } catch (NameNotFoundException e) {
// This package may be gone. // This package may be gone.
} }
} }
mPackageStats.addAll(map.values());
// Sort list // Sort list
mAppLabelComparator = new AppNameComparator(mAppLabelMap); mAppLabelComparator = new AppNameComparator(mAppLabelMap);
sortList(); sortList();
} }
@Override @Override
@@ -177,14 +189,14 @@ public class UsageStats extends Activity implements OnItemSelectedListener {
} }
// Bind the data efficiently with the holder // Bind the data efficiently with the holder
PackageUsageStats pkgStats = mPackageStats.get(position); UsageStats pkgStats = mPackageStats.get(position);
if (pkgStats != null) { if (pkgStats != null) {
String label = mAppLabelMap.get(pkgStats.getPackageName()); String label = mAppLabelMap.get(pkgStats.getPackageName());
holder.pkgName.setText(label); holder.pkgName.setText(label);
holder.lastTimeUsed.setText(DateUtils.formatSameDayTime(pkgStats.getLastTimeUsed(), holder.lastTimeUsed.setText(DateUtils.formatSameDayTime(pkgStats.getLastTimeUsed(),
System.currentTimeMillis(), DateFormat.MEDIUM, DateFormat.MEDIUM)); System.currentTimeMillis(), DateFormat.MEDIUM, DateFormat.MEDIUM));
holder.usageTime.setText( holder.usageTime.setText(
DateUtils.formatElapsedTime(pkgStats.getTotalTimeSpent() / 1000)); DateUtils.formatElapsedTime(pkgStats.getTotalTimeInForeground() / 1000));
} else { } else {
Log.w(TAG, "No usage stats info for package:" + position); Log.w(TAG, "No usage stats info for package:" + position);
} }
@@ -242,4 +254,3 @@ public class UsageStats extends Activity implements OnItemSelectedListener {
// do nothing // do nothing
} }
} }