1e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey/*
2e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey * Copyright (C) 2017 The Android Open Source Project
3e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey *
4e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License");
5e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey * you may not use this file except in compliance with the License.
6e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey * You may obtain a copy of the License at
7e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey *
8e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey *      http://www.apache.org/licenses/LICENSE-2.0
9e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey *
10e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey * Unless required by applicable law or agreed to in writing, software
11e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS,
12e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey * See the License for the specific language governing permissions and
14e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey * limitations under the License.
15e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey */
16e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey
17e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkeypackage android.app.usage;
18e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey
19a4d34d971c9566a162a53e6b027ba2bc341ae5b4Jeff Sharkeyimport android.annotation.BytesLong;
20e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkeyimport android.content.Context;
21e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkeyimport android.os.Parcel;
22e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkeyimport android.os.Parcelable;
238dedad31f7fa604028ee6d28963bcc564e76c467Jeff Sharkeyimport android.os.UserHandle;
24e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey
25e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey/**
260034788844fd053f87beee60092c1dd44c7046e2Jeff Sharkey * Storage statistics for a UID, package, or {@link UserHandle} on a single
270034788844fd053f87beee60092c1dd44c7046e2Jeff Sharkey * storage volume.
28e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey *
29e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey * @see StorageStatsManager
30e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey */
31e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkeypublic final class StorageStats implements Parcelable {
32e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    /** {@hide} */ public long codeBytes;
33e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    /** {@hide} */ public long dataBytes;
34e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    /** {@hide} */ public long cacheBytes;
35e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey
36e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    /**
37a4d34d971c9566a162a53e6b027ba2bc341ae5b4Jeff Sharkey     * Return the size of app. This includes {@code APK} files, optimized
38a4d34d971c9566a162a53e6b027ba2bc341ae5b4Jeff Sharkey     * compiler output, and unpacked native libraries.
39e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey     * <p>
400034788844fd053f87beee60092c1dd44c7046e2Jeff Sharkey     * If the primary external/shared storage is hosted on this storage device,
410034788844fd053f87beee60092c1dd44c7046e2Jeff Sharkey     * then this includes files stored under {@link Context#getObbDir()}.
420034788844fd053f87beee60092c1dd44c7046e2Jeff Sharkey     * <p>
43e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey     * Code is shared between all users on a multiuser device.
44e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey     */
45a4d34d971c9566a162a53e6b027ba2bc341ae5b4Jeff Sharkey    public @BytesLong long getAppBytes() {
46e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey        return codeBytes;
47e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    }
48e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey
49a4d34d971c9566a162a53e6b027ba2bc341ae5b4Jeff Sharkey    /** @removed */
50a4d34d971c9566a162a53e6b027ba2bc341ae5b4Jeff Sharkey    @Deprecated
51a4d34d971c9566a162a53e6b027ba2bc341ae5b4Jeff Sharkey    public long getCodeBytes() {
52a4d34d971c9566a162a53e6b027ba2bc341ae5b4Jeff Sharkey        return getAppBytes();
53a4d34d971c9566a162a53e6b027ba2bc341ae5b4Jeff Sharkey    }
54a4d34d971c9566a162a53e6b027ba2bc341ae5b4Jeff Sharkey
55e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    /**
568dedad31f7fa604028ee6d28963bcc564e76c467Jeff Sharkey     * Return the size of all data. This includes files stored under
57e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey     * {@link Context#getDataDir()}, {@link Context#getCacheDir()},
58e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey     * {@link Context#getCodeCacheDir()}.
59e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey     * <p>
600034788844fd053f87beee60092c1dd44c7046e2Jeff Sharkey     * If the primary external/shared storage is hosted on this storage device,
610034788844fd053f87beee60092c1dd44c7046e2Jeff Sharkey     * then this includes files stored under
620034788844fd053f87beee60092c1dd44c7046e2Jeff Sharkey     * {@link Context#getExternalFilesDir(String)},
630034788844fd053f87beee60092c1dd44c7046e2Jeff Sharkey     * {@link Context#getExternalCacheDir()}, and
640034788844fd053f87beee60092c1dd44c7046e2Jeff Sharkey     * {@link Context#getExternalMediaDirs()}.
650034788844fd053f87beee60092c1dd44c7046e2Jeff Sharkey     * <p>
66e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey     * Data is isolated for each user on a multiuser device.
67e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey     */
68a4d34d971c9566a162a53e6b027ba2bc341ae5b4Jeff Sharkey    public @BytesLong long getDataBytes() {
69e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey        return dataBytes;
70e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    }
71e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey
72e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    /**
738dedad31f7fa604028ee6d28963bcc564e76c467Jeff Sharkey     * Return the size of all cached data. This includes files stored under
74e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey     * {@link Context#getCacheDir()} and {@link Context#getCodeCacheDir()}.
75e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey     * <p>
760034788844fd053f87beee60092c1dd44c7046e2Jeff Sharkey     * If the primary external/shared storage is hosted on this storage device,
770034788844fd053f87beee60092c1dd44c7046e2Jeff Sharkey     * then this includes files stored under
780034788844fd053f87beee60092c1dd44c7046e2Jeff Sharkey     * {@link Context#getExternalCacheDir()}.
790034788844fd053f87beee60092c1dd44c7046e2Jeff Sharkey     * <p>
80e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey     * Cached data is isolated for each user on a multiuser device.
81e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey     */
82a4d34d971c9566a162a53e6b027ba2bc341ae5b4Jeff Sharkey    public @BytesLong long getCacheBytes() {
83e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey        return cacheBytes;
84e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    }
85e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey
86e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    /** {@hide} */
878dedad31f7fa604028ee6d28963bcc564e76c467Jeff Sharkey    public StorageStats() {
88e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    }
89e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey
90e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    /** {@hide} */
91e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    public StorageStats(Parcel in) {
92e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey        this.codeBytes = in.readLong();
93e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey        this.dataBytes = in.readLong();
94e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey        this.cacheBytes = in.readLong();
95e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    }
96e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey
97e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    @Override
98e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    public int describeContents() {
99e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey        return 0;
100e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    }
101e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey
102e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    @Override
103e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    public void writeToParcel(Parcel dest, int flags) {
104e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey        dest.writeLong(codeBytes);
105e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey        dest.writeLong(dataBytes);
106e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey        dest.writeLong(cacheBytes);
107e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    }
108e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey
109e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    public static final Creator<StorageStats> CREATOR = new Creator<StorageStats>() {
110e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey        @Override
111e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey        public StorageStats createFromParcel(Parcel in) {
112e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey            return new StorageStats(in);
113e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey        }
114e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey
115e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey        @Override
116e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey        public StorageStats[] newArray(int size) {
117e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey            return new StorageStats[size];
118e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey        }
119e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey    };
120e8cece9f2010388e02d8f4b3150f25168f8b7d76Jeff Sharkey}
121