UsageStats.java revision 0debc9aff4c0cbc28e083a948081d91b0f171319
10debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski/**
20debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski * Copyright (C) 2014 The Android Open Source Project
30debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski *
40debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); you may not
50debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski * use this file except in compliance with the License. You may obtain a copy
60debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski * of the License at
70debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski *
80debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski * http://www.apache.org/licenses/LICENSE-2.0
90debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski *
100debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski * Unless required by applicable law or agreed to in writing, software
110debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
120debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
130debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski * License for the specific language governing permissions and limitations
140debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski * under the License.
150debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski */
160debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
170debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinskipackage android.app.usage;
180debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
190debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinskiimport android.os.Parcel;
200debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinskiimport android.os.Parcelable;
210debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinskiimport android.util.ArrayMap;
220debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
230debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinskipublic final class UsageStats implements Parcelable {
240debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    public static class Event implements Parcelable {
250debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        /**
260debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski         * {@hide}
270debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski         */
280debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        public static final Event[] EMPTY_EVENTS = new Event[0];
290debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
300debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        public static final int NONE = 0;
310debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        public static final int MOVE_TO_FOREGROUND = 1;
320debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        public static final int MOVE_TO_BACKGROUND = 2;
330debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
340debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        /**
350debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski         * {@hide}
360debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski         */
370debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        public static final int END_OF_DAY = 3;
380debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
390debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        /**
400debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski         * {@hide}
410debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski         */
420debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        public static final int CONTINUE_PREVIOUS_DAY = 4;
430debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
440debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        public Event() {}
450debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
460debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        /**
470debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski         * {@hide}
480debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski         */
490debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        public Event(String packageName, long timeStamp, int eventType) {
500debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            this.packageName = packageName;
510debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            this.timeStamp = timeStamp;
520debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            this.eventType = eventType;
530debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        }
540debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
550debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        public String packageName;
560debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        public long timeStamp;
570debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        public int eventType;
580debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
590debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        @Override
600debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        public int describeContents() {
610debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            return 0;
620debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        }
630debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
640debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        @Override
650debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        public void writeToParcel(Parcel dest, int flags) {
660debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            dest.writeLong(timeStamp);
670debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            dest.writeInt(eventType);
680debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            dest.writeString(packageName);
690debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        }
700debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
710debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        public static final Creator<Event> CREATOR = new Creator<Event>() {
720debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            @Override
730debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            public Event createFromParcel(Parcel source) {
740debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski                final long time = source.readLong();
750debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski                final int type = source.readInt();
760debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski                final String name = source.readString();
770debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski                return new Event(name, time, type);
780debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            }
790debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
800debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            @Override
810debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            public Event[] newArray(int size) {
820debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski                return new Event[size];
830debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            }
840debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        };
850debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    }
860debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
870debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    /**
880debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski     * {@hide}
890debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski     */
900debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    public static final UsageStats[] EMPTY_STATS = new UsageStats[0];
910debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
920debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    /**
930debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski     * {@hide}
940debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski     */
950debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    public long mBeginTimeStamp;
960debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
970debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    /**
980debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski     * {@hide}
990debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski     */
1000debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    public long mEndTimeStamp;
1010debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
1020debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    /**
1030debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski     * {@hide}
1040debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski     */
1050debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    public long mLastTimeSaved;
1060debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
1070debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    private ArrayMap<String, PackageUsageStats> mPackageStats = new ArrayMap<>();
1080debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
1090debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    /**
1100debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski     * Can be null
1110debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski     * {@hide}
1120debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski     */
1130debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    public TimeSparseArray<Event> mEvents;
1140debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
1150debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    /**
1160debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski     * {@hide}
1170debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski     */
1180debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    public static UsageStats create(long beginTimeStamp, long endTimeStamp) {
1190debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        UsageStats stats = new UsageStats();
1200debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        stats.mBeginTimeStamp = beginTimeStamp;
1210debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        stats.mEndTimeStamp = endTimeStamp;
1220debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        return stats;
1230debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    }
1240debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
1250debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    /**
1260debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski     * {@hide}
1270debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski     */
1280debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    public UsageStats() {
1290debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    }
1300debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
1310debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    public UsageStats(UsageStats stats) {
1320debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        mBeginTimeStamp = stats.mBeginTimeStamp;
1330debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        mEndTimeStamp = stats.mEndTimeStamp;
1340debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        mLastTimeSaved = stats.mLastTimeSaved;
1350debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
1360debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        final int pkgCount = stats.mPackageStats.size();
1370debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        for (int i = 0; i < pkgCount; i++) {
1380debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            PackageUsageStats pkgStats = stats.mPackageStats.valueAt(i);
1390debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            mPackageStats.append(stats.mPackageStats.keyAt(i), new PackageUsageStats(pkgStats));
1400debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        }
1410debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
1420debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        final int eventCount = stats.mEvents == null ? 0 : stats.mEvents.size();
1430debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        if (eventCount > 0) {
1440debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            mEvents = new TimeSparseArray<>();
1450debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            for (int i = 0; i < eventCount; i++) {
1460debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski                mEvents.append(stats.mEvents.keyAt(i), stats.mEvents.valueAt(i));
1470debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            }
1480debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        }
1490debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    }
1500debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
1510debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    public long getFirstTimeStamp() {
1520debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        return mBeginTimeStamp;
1530debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    }
1540debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
1550debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    public long getLastTimeStamp() {
1560debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        return mEndTimeStamp;
1570debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    }
1580debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
1590debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    public int getPackageCount() {
1600debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        return mPackageStats.size();
1610debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    }
1620debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
1630debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    public PackageUsageStats getPackage(int index) {
1640debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        return mPackageStats.valueAt(index);
1650debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    }
1660debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
1670debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    public PackageUsageStats getPackage(String packageName) {
1680debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        return mPackageStats.get(packageName);
1690debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    }
1700debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
1710debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    /**
1720debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski     * {@hide}
1730debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski     */
1740debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    public PackageUsageStats getOrCreatePackageUsageStats(String packageName) {
1750debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        PackageUsageStats pkgStats = mPackageStats.get(packageName);
1760debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        if (pkgStats == null) {
1770debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            pkgStats = new PackageUsageStats();
1780debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            pkgStats.mPackageName = packageName;
1790debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            mPackageStats.put(packageName, pkgStats);
1800debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        }
1810debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        return pkgStats;
1820debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    }
1830debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
1840debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    @Override
1850debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    public int describeContents() {
1860debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        return 0;
1870debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    }
1880debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
1890debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    @Override
1900debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    public void writeToParcel(Parcel dest, int flags) {
1910debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        dest.writeLong(mBeginTimeStamp);
1920debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        dest.writeLong(mEndTimeStamp);
1930debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        dest.writeLong(mLastTimeSaved);
1940debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
1950debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        int size = mPackageStats.size();
1960debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        dest.writeInt(size);
1970debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        for (int i = 0; i < size; i++) {
1980debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            mPackageStats.valueAt(i).writeToParcel(dest, flags);
1990debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        }
2000debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
2010debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        size = mEvents == null ? 0 : mEvents.size();
2020debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        dest.writeInt(size);
2030debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        for (int i = 0; i < size; i++) {
2040debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            mEvents.valueAt(i).writeToParcel(dest, flags);
2050debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        }
2060debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    }
2070debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
2080debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    public static final Creator<UsageStats> CREATOR = new Creator<UsageStats>() {
2090debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        @Override
2100debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        public UsageStats createFromParcel(Parcel in) {
2110debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            UsageStats stats = new UsageStats();
2120debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            stats.mBeginTimeStamp = in.readLong();
2130debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            stats.mEndTimeStamp = in.readLong();
2140debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            stats.mLastTimeSaved = in.readLong();
2150debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
2160debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            int size = in.readInt();
2170debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            stats.mPackageStats.ensureCapacity(size);
2180debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            for (int i = 0; i < size; i++) {
2190debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski                final PackageUsageStats pkgStats = PackageUsageStats.CREATOR.createFromParcel(in);
2200debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski                stats.mPackageStats.put(pkgStats.mPackageName, pkgStats);
2210debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            }
2220debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
2230debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            size = in.readInt();
2240debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            if (size > 0) {
2250debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski                stats.mEvents = new TimeSparseArray<>(size);
2260debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski                for (int i = 0; i < size; i++) {
2270debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski                    final Event event = Event.CREATOR.createFromParcel(in);
2280debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski                    stats.mEvents.put(event.timeStamp, event);
2290debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski                }
2300debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            }
2310debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
2320debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            return stats;
2330debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        }
2340debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski
2350debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        @Override
2360debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        public UsageStats[] newArray(int size) {
2370debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski            return new UsageStats[size];
2380debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski        }
2390debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski    };
2400debc9aff4c0cbc28e083a948081d91b0f171319Adam Lesinski}
241