Handle Activity Resume to Stop case for AppUsage logging

Bug: 159165822
Test: atest UidAtomTests
Test: atest android.app.usage.cts.UsageStatsTest
Change-Id: I11cb12d248dd7fe2fb1a97af8cf30d6988a7697b
This commit is contained in:
Michael Wachenschwanz
2020-08-14 13:47:07 -07:00
parent 0c04c70178
commit 138ee976e7

View File

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