/** * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ package android.app.usage; import android.os.Parcel; import android.os.Parcelable; /** * Contains usage statistics for an event type for a specific * time range. */ public final class EventStats implements Parcelable { /** * {@hide} */ public int mEventType; /** * {@hide} */ public long mBeginTimeStamp; /** * {@hide} */ public long mEndTimeStamp; /** * {@hide} */ public long mLastEventTime; /** * {@hide} */ public long mTotalTime; /** * {@hide} */ public int mCount; /** * {@hide} */ public EventStats() { } public EventStats(EventStats stats) { mEventType = stats.mEventType; mBeginTimeStamp = stats.mBeginTimeStamp; mEndTimeStamp = stats.mEndTimeStamp; mLastEventTime = stats.mLastEventTime; mTotalTime = stats.mTotalTime; mCount = stats.mCount; } /** * Return the type of event this is usage for. May be one of the event * constants in {@link UsageEvents.Event}. */ public int getEventType() { return mEventType; } /** * Get the beginning of the time range this {@link android.app.usage.EventStats} represents, * measured in milliseconds since the epoch. *

* See {@link System#currentTimeMillis()}. */ public long getFirstTimeStamp() { return mBeginTimeStamp; } /** * Get the end of the time range this {@link android.app.usage.EventStats} represents, * measured in milliseconds since the epoch. *

* See {@link System#currentTimeMillis()}. */ public long getLastTimeStamp() { return mEndTimeStamp; } /** * Get the last time this event triggered, measured in milliseconds since the epoch. *

* See {@link System#currentTimeMillis()}. */ public long getLastEventTime() { return mLastEventTime; } /** * Return the number of times that this event occurred over the interval. */ public int getCount() { return mCount; } /** * Get the total time this event was active, measured in milliseconds. */ public long getTotalTime() { return mTotalTime; } /** * Add the statistics from the right {@link EventStats} to the left. The event type for * both {@link UsageStats} objects must be the same. * @param right The {@link EventStats} object to merge into this one. * @throws java.lang.IllegalArgumentException if the event types of the two * {@link UsageStats} objects are different. */ public void add(EventStats right) { if (mEventType != right.mEventType) { throw new IllegalArgumentException("Can't merge EventStats for event #" + mEventType + " with EventStats for event #" + right.mEventType); } // We use the mBeginTimeStamp due to a bug where UsageStats files can overlap with // regards to their mEndTimeStamp. if (right.mBeginTimeStamp > mBeginTimeStamp) { mLastEventTime = Math.max(mLastEventTime, right.mLastEventTime); } mBeginTimeStamp = Math.min(mBeginTimeStamp, right.mBeginTimeStamp); mEndTimeStamp = Math.max(mEndTimeStamp, right.mEndTimeStamp); mTotalTime += right.mTotalTime; mCount += right.mCount; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mEventType); dest.writeLong(mBeginTimeStamp); dest.writeLong(mEndTimeStamp); dest.writeLong(mLastEventTime); dest.writeLong(mTotalTime); dest.writeInt(mCount); } public static final @android.annotation.NonNull Creator CREATOR = new Creator() { @Override public EventStats createFromParcel(Parcel in) { EventStats stats = new EventStats(); stats.mEventType = in.readInt(); stats.mBeginTimeStamp = in.readLong(); stats.mEndTimeStamp = in.readLong(); stats.mLastEventTime = in.readLong(); stats.mTotalTime = in.readLong(); stats.mCount = in.readInt(); return stats; } @Override public EventStats[] newArray(int size) { return new EventStats[size]; } }; }