Merge "Handle Activity Resume to Stop case for AppUsage logging" into rvc-qpr-dev

This commit is contained in:
TreeHugger Robot
2020-09-25 23:35:23 +00:00
committed by Android (Google) Code Review

View File

@@ -183,6 +183,7 @@ public class UsageStatsService extends SystemService implements
private static class ActivityData { private static class ActivityData {
private final String mTaskRootPackage; private final String mTaskRootPackage;
private final String mTaskRootClass; private final String mTaskRootClass;
public int lastEvent = Event.NONE;
private ActivityData(String taskRootPackage, String taskRootClass) { private ActivityData(String taskRootPackage, String taskRootClass) {
mTaskRootPackage = taskRootPackage; mTaskRootPackage = taskRootPackage;
mTaskRootClass = taskRootClass; mTaskRootClass = taskRootClass;
@@ -787,6 +788,7 @@ public class UsageStatsService extends SystemService implements
switch (event.mEventType) { switch (event.mEventType) {
case Event.ACTIVITY_RESUMED: case Event.ACTIVITY_RESUMED:
case Event.ACTIVITY_PAUSED: case Event.ACTIVITY_PAUSED:
case Event.ACTIVITY_STOPPED:
uid = mPackageManagerInternal.getPackageUid(event.mPackage, 0, userId); uid = mPackageManagerInternal.getPackageUid(event.mPackage, 0, userId);
break; break;
default: default:
@@ -819,8 +821,10 @@ public class UsageStatsService extends SystemService implements
.APP_USAGE_EVENT_OCCURRED__EVENT_TYPE__MOVE_TO_FOREGROUND); .APP_USAGE_EVENT_OCCURRED__EVENT_TYPE__MOVE_TO_FOREGROUND);
// check if this activity has already been resumed // check if this activity has already been resumed
if (mVisibleActivities.get(event.mInstanceId) != null) break; if (mVisibleActivities.get(event.mInstanceId) != null) break;
mVisibleActivities.put(event.mInstanceId, final ActivityData resumedData = new ActivityData(event.mTaskRootPackage,
new ActivityData(event.mTaskRootPackage, event.mTaskRootClass)); event.mTaskRootClass);
resumedData.lastEvent = Event.ACTIVITY_RESUMED;
mVisibleActivities.put(event.mInstanceId, resumedData);
try { try {
switch(mUsageSource) { switch(mUsageSource) {
case USAGE_SOURCE_CURRENT_ACTIVITY: case USAGE_SOURCE_CURRENT_ACTIVITY:
@@ -836,16 +840,17 @@ public class UsageStatsService extends SystemService implements
} }
break; break;
case Event.ACTIVITY_PAUSED: case Event.ACTIVITY_PAUSED:
if (event.mTaskRootPackage == null) { final ActivityData pausedData = mVisibleActivities.get(event.mInstanceId);
// Task Root info is missing. Repair the event based on previous data if (pausedData == null) {
final ActivityData prevData = mVisibleActivities.get(event.mInstanceId); Slog.w(TAG, "Unexpected activity event reported! (" + event.mPackage
if (prevData == null) { + "/" + event.mClass + " event : " + event.mEventType
Slog.w(TAG, "Unexpected activity event reported! (" + event.mPackage + " instanceId : " + event.mInstanceId + ")");
+ "/" + event.mClass + " event : " + event.mEventType } else {
+ " instanceId : " + event.mInstanceId + ")"); pausedData.lastEvent = Event.ACTIVITY_PAUSED;
} else { if (event.mTaskRootPackage == null) {
event.mTaskRootPackage = prevData.mTaskRootPackage; // Task Root info is missing. Repair the event based on previous data
event.mTaskRootClass = prevData.mTaskRootClass; event.mTaskRootPackage = pausedData.mTaskRootPackage;
event.mTaskRootClass = pausedData.mTaskRootClass;
} }
} }
FrameworkStatsLog.write( FrameworkStatsLog.write(
@@ -868,6 +873,16 @@ public class UsageStatsService extends SystemService implements
return; return;
} }
if (prevData.lastEvent != Event.ACTIVITY_PAUSED) {
FrameworkStatsLog.write(
FrameworkStatsLog.APP_USAGE_EVENT_OCCURRED,
uid,
event.mPackage,
event.mClass,
FrameworkStatsLog
.APP_USAGE_EVENT_OCCURRED__EVENT_TYPE__MOVE_TO_BACKGROUND);
}
ArraySet<String> tokens; ArraySet<String> tokens;
synchronized (mUsageReporters) { synchronized (mUsageReporters) {
tokens = mUsageReporters.removeReturnOld(event.mInstanceId); tokens = mUsageReporters.removeReturnOld(event.mInstanceId);