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

Commit bfc4bf5f authored by Amith Yamasani's avatar Amith Yamasani
Browse files

Keep history of standby bucket changes.

Push standby bucket changes into UsageStats as events.
Don't use the event for aggregation.

Bug: 63527785
Test: atest CtsUsageStatsTestCases:UsageStatsTest
Change-Id: Icd152b21935e3ef73aaa1a62f09574e51ce921bd
parent 3733b8ed
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -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;
        }
    }

+12 −1
Original line number Diff line number Diff line
@@ -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;
+21 −0
Original line number Diff line number Diff line
@@ -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();
+8 −0
Original line number Diff line number Diff line
@@ -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);
+5 −0
Original line number Diff line number Diff line
@@ -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";
        }