blob: b92d538ce28168c69eaa752f1ffa8b567014f103 [file] [log] [blame]
Daniel Nishicf9d19e2017-01-23 14:33:42 -08001/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.app.usage;
18
19import android.annotation.NonNull;
20import android.annotation.Nullable;
21import android.annotation.SystemApi;
22import android.os.Parcel;
23import android.os.Parcelable;
24
25import com.android.internal.util.Preconditions;
26
Daniel Nishie40da3c2017-02-13 17:19:43 -080027import java.util.Objects;
28
Daniel Nishicf9d19e2017-01-23 14:33:42 -080029/**
Daniel Nishie40da3c2017-02-13 17:19:43 -080030 * CacheQuotaHint represents a triplet of a uid, the volume UUID it is stored upon, and
Daniel Nishicf9d19e2017-01-23 14:33:42 -080031 * its usage stats. When processed, it obtains a cache quota as defined by the system which
32 * allows apps to understand how much cache to use.
33 * {@hide}
34 */
35@SystemApi
36public final class CacheQuotaHint implements Parcelable {
37 public static final long QUOTA_NOT_SET = -1;
38 private final String mUuid;
39 private final int mUid;
40 private final UsageStats mUsageStats;
41 private final long mQuota;
42
43 /**
44 * Create a new request.
45 * @param builder A builder for this object.
46 */
47 public CacheQuotaHint(Builder builder) {
48 this.mUuid = builder.mUuid;
49 this.mUid = builder.mUid;
50 this.mUsageStats = builder.mUsageStats;
51 this.mQuota = builder.mQuota;
52 }
53
54 public String getVolumeUuid() {
55 return mUuid;
56 }
57
58 public int getUid() {
59 return mUid;
60 }
61
62 public long getQuota() {
63 return mQuota;
64 }
65
66 public UsageStats getUsageStats() {
67 return mUsageStats;
68 }
69
70 @Override
71 public void writeToParcel(Parcel dest, int flags) {
72 dest.writeString(mUuid);
73 dest.writeInt(mUid);
74 dest.writeLong(mQuota);
75 dest.writeParcelable(mUsageStats, 0);
76 }
77
78 @Override
79 public int describeContents() {
80 return 0;
81 }
82
Daniel Nishie40da3c2017-02-13 17:19:43 -080083 @Override
84 public boolean equals(Object o) {
85 if (o instanceof CacheQuotaHint) {
86 final CacheQuotaHint other = (CacheQuotaHint) o;
87 return Objects.equals(mUuid, other.mUuid)
88 && Objects.equals(mUsageStats, other.mUsageStats)
89 && mUid == other.mUid && mQuota == other.mQuota;
90 }
91
92 return false;
93 }
94
95 @Override
96 public int hashCode() {
97 return Objects.hash(this.mUuid, this.mUid, this.mUsageStats, this.mQuota);
98 }
99
Daniel Nishicf9d19e2017-01-23 14:33:42 -0800100 public static final class Builder {
101 private String mUuid;
102 private int mUid;
103 private UsageStats mUsageStats;
104 private long mQuota;
105
106 public Builder() {
107 }
108
109 public Builder(CacheQuotaHint hint) {
110 setVolumeUuid(hint.getVolumeUuid());
111 setUid(hint.getUid());
112 setUsageStats(hint.getUsageStats());
113 setQuota(hint.getQuota());
114 }
115
116 public @NonNull Builder setVolumeUuid(@Nullable String uuid) {
117 mUuid = uuid;
118 return this;
119 }
120
121 public @NonNull Builder setUid(int uid) {
Daniel Nishie40da3c2017-02-13 17:19:43 -0800122 Preconditions.checkArgumentNonnegative(uid, "Proposed uid was negative.");
Daniel Nishicf9d19e2017-01-23 14:33:42 -0800123 mUid = uid;
124 return this;
125 }
126
127 public @NonNull Builder setUsageStats(@Nullable UsageStats stats) {
128 mUsageStats = stats;
129 return this;
130 }
131
132 public @NonNull Builder setQuota(long quota) {
133 Preconditions.checkArgument((quota >= QUOTA_NOT_SET));
134 mQuota = quota;
135 return this;
136 }
137
138 public @NonNull CacheQuotaHint build() {
Daniel Nishicf9d19e2017-01-23 14:33:42 -0800139 return new CacheQuotaHint(this);
140 }
141 }
142
Jeff Sharkey9e8f83d2019-02-28 12:06:45 -0700143 public static final @android.annotation.NonNull Parcelable.Creator<CacheQuotaHint> CREATOR =
Daniel Nishicf9d19e2017-01-23 14:33:42 -0800144 new Creator<CacheQuotaHint>() {
145 @Override
146 public CacheQuotaHint createFromParcel(Parcel in) {
147 final Builder builder = new Builder();
148 return builder.setVolumeUuid(in.readString())
149 .setUid(in.readInt())
150 .setQuota(in.readLong())
151 .setUsageStats(in.readParcelable(UsageStats.class.getClassLoader()))
152 .build();
153 }
154
155 @Override
156 public CacheQuotaHint[] newArray(int size) {
157 return new CacheQuotaHint[size];
158 }
159 };
160}