Update to use new UsageStats API
Change-Id: Ic6f9523c4c70f8b832d8f57551417f4f19ea144f
This commit is contained in:
@@ -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>
|
||||||
|
@@ -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,15 +49,15 @@ 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;
|
||||||
private LayoutInflater mInflater;
|
private LayoutInflater mInflater;
|
||||||
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,76 +65,87 @@ 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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// View Holder used when displaying views
|
// View Holder used when displaying views
|
||||||
static class AppViewHolder {
|
static class AppViewHolder {
|
||||||
TextView pkgName;
|
TextView pkgName;
|
||||||
TextView lastTimeUsed;
|
TextView lastTimeUsed;
|
||||||
TextView usageTime;
|
TextView usageTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
class UsageStatsAdapter extends BaseAdapter {
|
class UsageStatsAdapter extends BaseAdapter {
|
||||||
// Constants defining order for display order
|
// Constants defining order for display order
|
||||||
private static final int _DISPLAY_ORDER_USAGE_TIME = 0;
|
private static final int _DISPLAY_ORDER_USAGE_TIME = 0;
|
||||||
private static final int _DISPLAY_ORDER_LAST_TIME_USED = 1;
|
private static final int _DISPLAY_ORDER_LAST_TIME_USED = 1;
|
||||||
private static final int _DISPLAY_ORDER_APP_NAME = 2;
|
private static final int _DISPLAY_ORDER_APP_NAME = 2;
|
||||||
|
|
||||||
private int mDisplayOrder = _DISPLAY_ORDER_USAGE_TIME;
|
private int mDisplayOrder = _DISPLAY_ORDER_USAGE_TIME;
|
||||||
private LastTimeUsedComparator mLastTimeUsedComparator = new LastTimeUsedComparator();
|
private LastTimeUsedComparator mLastTimeUsedComparator = new LastTimeUsedComparator();
|
||||||
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,20 +189,20 @@ 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);
|
||||||
}
|
}
|
||||||
return convertView;
|
return convertView;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sortList(int sortOrder) {
|
void sortList(int sortOrder) {
|
||||||
if (mDisplayOrder == sortOrder) {
|
if (mDisplayOrder == sortOrder) {
|
||||||
// do nothing
|
// do nothing
|
||||||
@@ -226,7 +238,7 @@ public class UsageStats extends Activity implements OnItemSelectedListener {
|
|||||||
|
|
||||||
Spinner typeSpinner = (Spinner) findViewById(R.id.typeSpinner);
|
Spinner typeSpinner = (Spinner) findViewById(R.id.typeSpinner);
|
||||||
typeSpinner.setOnItemSelectedListener(this);
|
typeSpinner.setOnItemSelectedListener(this);
|
||||||
|
|
||||||
ListView listView = (ListView) findViewById(R.id.pkg_list);
|
ListView listView = (ListView) findViewById(R.id.pkg_list);
|
||||||
mAdapter = new UsageStatsAdapter();
|
mAdapter = new UsageStatsAdapter();
|
||||||
listView.setAdapter(mAdapter);
|
listView.setAdapter(mAdapter);
|
||||||
@@ -242,4 +254,3 @@ public class UsageStats extends Activity implements OnItemSelectedListener {
|
|||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue
Block a user