Merge "Keep history of standby bucket changes."

This commit is contained in:
TreeHugger Robot
2018-01-24 04:33:46 +00:00
committed by Android (Google) Code Review
5 changed files with 66 additions and 1 deletions

View File

@@ -106,6 +106,12 @@ public final class UsageEvents implements Parcelable {
*/
public static final int NOTIFICATION_SEEN = 10;
/**
* An event type denoting a change in App Standby Bucket.
* @hide
*/
public static final int STANDBY_BUCKET_CHANGED = 11;
/** @hide */
public static final int FLAG_IS_PACKAGE_INSTANT_APP = 1 << 0;
@@ -170,6 +176,13 @@ public final class UsageEvents implements Parcelable {
*/
public String[] mContentAnnotations;
/**
* The app standby bucket assigned.
* Only present for {@link #STANDBY_BUCKET_CHANGED} event types
* {@hide}
*/
public int mBucket;
/** @hide */
@EventFlags
public int mFlags;
@@ -189,6 +202,7 @@ public final class UsageEvents implements Parcelable {
mContentType = orig.mContentType;
mContentAnnotations = orig.mContentAnnotations;
mFlags = orig.mFlags;
mBucket = orig.mBucket;
}
/**
@@ -399,6 +413,9 @@ public final class UsageEvents implements Parcelable {
p.writeString(event.mContentType);
p.writeStringArray(event.mContentAnnotations);
break;
case Event.STANDBY_BUCKET_CHANGED:
p.writeInt(event.mBucket);
break;
}
}
@@ -442,6 +459,9 @@ public final class UsageEvents implements Parcelable {
eventOut.mContentType = p.readString();
eventOut.mContentAnnotations = p.createStringArray();
break;
case Event.STANDBY_BUCKET_CHANGED:
eventOut.mBucket = p.readInt();
break;
}
}

View File

@@ -92,6 +92,17 @@ class IntervalStats {
return false;
}
/**
* Returns whether the event type is one caused by user visible
* interaction. Excludes those that are internally generated.
* @param eventType
* @return
*/
private boolean isUserVisibleEvent(int eventType) {
return eventType != UsageEvents.Event.SYSTEM_INTERACTION
&& eventType != UsageEvents.Event.STANDBY_BUCKET_CHANGED;
}
void update(String packageName, long timeStamp, int eventType) {
UsageStats usageStats = getOrCreateUsageStats(packageName);
@@ -109,7 +120,7 @@ class IntervalStats {
usageStats.mLastEvent = eventType;
}
if (eventType != UsageEvents.Event.SYSTEM_INTERACTION) {
if (isUserVisibleEvent(eventType)) {
usageStats.mLastTimeUsed = timeStamp;
}
usageStats.mEndTimeStamp = timeStamp;

View File

@@ -115,6 +115,26 @@ public class UsageStatsService extends SystemService implements
AppStandbyController mAppStandby;
private UsageStatsManagerInternal.AppIdleStateChangeListener mStandbyChangeListener =
new UsageStatsManagerInternal.AppIdleStateChangeListener() {
@Override
public void onAppIdleStateChanged(String packageName, int userId, boolean idle,
int bucket) {
Event event = new Event();
event.mEventType = Event.STANDBY_BUCKET_CHANGED;
event.mBucket = bucket;
event.mPackage = packageName;
// This will later be converted to system time.
event.mTimeStamp = SystemClock.elapsedRealtime();
mHandler.obtainMessage(MSG_REPORT_EVENT, userId, 0, event).sendToTarget();
}
@Override
public void onParoleStateChanged(boolean isParoleOn) {
}
};
public UsageStatsService(Context context) {
super(context);
}
@@ -129,6 +149,7 @@ public class UsageStatsService extends SystemService implements
mAppStandby = new AppStandbyController(getContext(), BackgroundThread.get().getLooper());
mAppStandby.addListener(mStandbyChangeListener);
File systemDataDir = new File(Environment.getDataDirectory(), "system");
mUsageStatsDir = new File(systemDataDir, "usagestats");
mUsageStatsDir.mkdirs();

View File

@@ -64,6 +64,7 @@ final class UsageStatsXmlV1 {
private static final String LAST_EVENT_ATTR = "lastEvent";
private static final String TYPE_ATTR = "type";
private static final String SHORTCUT_ID_ATTR = "shortcutId";
private static final String STANDBY_BUCKET_ATTR = "standbyBucket";
// Time attributes stored as an offset of the beginTime.
private static final String LAST_TIME_ACTIVE_ATTR = "lastTimeActive";
@@ -173,6 +174,9 @@ final class UsageStatsXmlV1 {
final String id = XmlUtils.readStringAttribute(parser, SHORTCUT_ID_ATTR);
event.mShortcutId = (id != null) ? id.intern() : null;
break;
case UsageEvents.Event.STANDBY_BUCKET_CHANGED:
event.mBucket = XmlUtils.readIntAttribute(parser, STANDBY_BUCKET_ATTR, 0);
break;
}
if (statsOut.events == null) {
@@ -276,6 +280,10 @@ final class UsageStatsXmlV1 {
XmlUtils.writeStringAttribute(xml, SHORTCUT_ID_ATTR, event.mShortcutId);
}
break;
case UsageEvents.Event.STANDBY_BUCKET_CHANGED:
if (event.mBucket != 0) {
XmlUtils.writeIntAttribute(xml, STANDBY_BUCKET_ATTR, event.mBucket);
}
}
xml.endTag(null, EVENT_TAG);

View File

@@ -599,6 +599,9 @@ class UserUsageStatsService {
if (event.mShortcutId != null) {
pw.printPair("shortcutId", event.mShortcutId);
}
if (event.mEventType == UsageEvents.Event.STANDBY_BUCKET_CHANGED) {
pw.printPair("standbyBucket", event.mBucket);
}
pw.printHexPair("flags", event.mFlags);
pw.println();
}
@@ -645,6 +648,8 @@ class UserUsageStatsService {
return "CHOOSER_ACTION";
case UsageEvents.Event.NOTIFICATION_SEEN:
return "NOTIFICATION_SEEN";
case UsageEvents.Event.STANDBY_BUCKET_CHANGED:
return "STANDBY_BUCKET_CHANGED";
default:
return "UNKNOWN";
}