Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dc28eec9 authored by Xin Guan's avatar Xin Guan
Browse files

Support logging more usage event types.

Bug: 314503189
Test: build + manual test.

Change-Id: I579c745386147e23a9389820edcd35b1d0e0325e
parent 7493a09d
Loading
Loading
Loading
Loading
+54 −22
Original line number Diff line number Diff line
@@ -1121,13 +1121,8 @@ public class UsageStatsService extends SystemService implements

            switch (event.mEventType) {
                case Event.ACTIVITY_RESUMED:
                    FrameworkStatsLog.write(
                            FrameworkStatsLog.APP_USAGE_EVENT_OCCURRED,
                            uid,
                            event.mPackage,
                            "",
                            FrameworkStatsLog
                                    .APP_USAGE_EVENT_OCCURRED__EVENT_TYPE__MOVE_TO_FOREGROUND);
                    logAppUsageEventReportedAtomLocked(Event.ACTIVITY_RESUMED, uid, event.mPackage);

                    // check if this activity has already been resumed
                    if (mVisibleActivities.get(event.mInstanceId) != null) break;
                    final String usageSourcePackage = getUsageSourcePackage(event);
@@ -1172,13 +1167,8 @@ public class UsageStatsService extends SystemService implements
                                usageSourcePackage2);
                        mVisibleActivities.put(event.mInstanceId, pausedData);
                    } else {
                        FrameworkStatsLog.write(
                                FrameworkStatsLog.APP_USAGE_EVENT_OCCURRED,
                                uid,
                                event.mPackage,
                                "",
                                FrameworkStatsLog
                                        .APP_USAGE_EVENT_OCCURRED__EVENT_TYPE__MOVE_TO_BACKGROUND);
                        logAppUsageEventReportedAtomLocked(Event.ACTIVITY_PAUSED, uid,
                                event.mPackage);
                    }

                    pausedData.lastEvent = Event.ACTIVITY_PAUSED;
@@ -1203,13 +1193,8 @@ public class UsageStatsService extends SystemService implements
                    }

                    if (prevData.lastEvent != Event.ACTIVITY_PAUSED) {
                        FrameworkStatsLog.write(
                                FrameworkStatsLog.APP_USAGE_EVENT_OCCURRED,
                                uid,
                                event.mPackage,
                                "",
                                FrameworkStatsLog
                                        .APP_USAGE_EVENT_OCCURRED__EVENT_TYPE__MOVE_TO_BACKGROUND);
                        logAppUsageEventReportedAtomLocked(Event.ACTIVITY_PAUSED, uid,
                                event.mPackage);
                    }

                    ArraySet<String> tokens;
@@ -1244,11 +1229,19 @@ public class UsageStatsService extends SystemService implements
                    }
                    break;
                case Event.USER_INTERACTION:
                    // Fall through
                    logAppUsageEventReportedAtomLocked(Event.USER_INTERACTION, uid, event.mPackage);
                    // Fall through.
                case Event.APP_COMPONENT_USED:
                    convertToSystemTimeLocked(event);
                    mLastTimeComponentUsedGlobal.put(event.mPackage, event.mTimeStamp);
                    break;
                case Event.SHORTCUT_INVOCATION:
                case Event.CHOOSER_ACTION:
                case Event.STANDBY_BUCKET_CHANGED:
                case Event.FOREGROUND_SERVICE_START:
                case Event.FOREGROUND_SERVICE_STOP:
                    logAppUsageEventReportedAtomLocked(event.mEventType, uid, event.mPackage);
                    break;
            }

            final UserUsageStatsService service = getUserUsageStatsServiceLocked(userId);
@@ -1261,6 +1254,45 @@ public class UsageStatsService extends SystemService implements
        mIoHandler.obtainMessage(MSG_NOTIFY_USAGE_EVENT_LISTENER, userId, 0, event).sendToTarget();
    }

    @GuardedBy("mLock")
    private void logAppUsageEventReportedAtomLocked(int eventType, int uid, String packageName) {
        FrameworkStatsLog.write(FrameworkStatsLog.APP_USAGE_EVENT_OCCURRED, uid, packageName,
                "", getAppUsageEventOccurredAtomEventType(eventType));
    }

    /** Make sure align with the EventType defined in the AppUsageEventOccurred atom. */
    private int getAppUsageEventOccurredAtomEventType(int eventType) {
        switch (eventType) {
            case Event.ACTIVITY_RESUMED:
                return FrameworkStatsLog
                        .APP_USAGE_EVENT_OCCURRED__EVENT_TYPE__MOVE_TO_FOREGROUND;
            case Event.ACTIVITY_PAUSED:
                return FrameworkStatsLog
                        .APP_USAGE_EVENT_OCCURRED__EVENT_TYPE__MOVE_TO_BACKGROUND;
            case Event.USER_INTERACTION:
                return FrameworkStatsLog
                        .APP_USAGE_EVENT_OCCURRED__EVENT_TYPE__USER_INTERACTION;
            case Event.SHORTCUT_INVOCATION:
                return FrameworkStatsLog
                        .APP_USAGE_EVENT_OCCURRED__EVENT_TYPE__SHORTCUT_INVOCATION;
            case Event.CHOOSER_ACTION:
                return FrameworkStatsLog
                        .APP_USAGE_EVENT_OCCURRED__EVENT_TYPE__CHOOSER_ACTION;
            case Event.STANDBY_BUCKET_CHANGED:
                return FrameworkStatsLog
                        .APP_USAGE_EVENT_OCCURRED__EVENT_TYPE__STANDBY_BUCKET_CHANGED;
            case Event.FOREGROUND_SERVICE_START:
                return FrameworkStatsLog
                        .APP_USAGE_EVENT_OCCURRED__EVENT_TYPE__FOREGROUND_SERVICE_START;
            case Event.FOREGROUND_SERVICE_STOP:
                return FrameworkStatsLog
                        .APP_USAGE_EVENT_OCCURRED__EVENT_TYPE__FOREGROUND_SERVICE_STOP;
            default:
                Slog.w(TAG, "Unsupported usage event logging: " + eventType);
                return -1;
        }
    }

    private String getUsageSourcePackage(Event event) {
        switch(mUsageSource) {
            case USAGE_SOURCE_CURRENT_ACTIVITY: