1ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado/**
2ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado * Copyright (C) 2016 The Android Open Source Project
3ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado *
4ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado * use this file except in compliance with the License. You may obtain a copy
6ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado * of the License at
7ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado *
8ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado * http://www.apache.org/licenses/LICENSE-2.0
9ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado *
10ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado * Unless required by applicable law or agreed to in writing, software
11ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado * License for the specific language governing permissions and limitations
14ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado * under the License.
15ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado */
16ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado
17ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansadopackage android.net;
18ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado
19ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansadoimport android.net.NetworkTemplate;
20ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansadoimport android.os.Parcel;
21ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansadoimport android.os.Parcelable;
22ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado
23ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansadoimport java.util.Objects;
24ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado
25ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado/**
26ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado * Defines a request to register a callbacks. Used to be notified on data usage via
27ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado * {@link android.app.usage.NetworkStatsManager#registerDataUsageCallback}.
28ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado * If no {@code uid}s are set, callbacks are restricted to device-owners,
29ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado * carrier-privileged apps, or system apps.
306965c1869aa8499706522d057b5143bbc240178bAntonio Cansado *
316965c1869aa8499706522d057b5143bbc240178bAntonio Cansado * @hide
32ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado */
3350d1c044b5ce4b6fef532dc6e083cef903f554b2Jeff Sharkeypublic final class DataUsageRequest implements Parcelable {
34ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado
35cd42acd9515bdce89d4f1401ee2888d684bf1918Antonio Cansado    public static final String PARCELABLE_KEY = "DataUsageRequest";
36ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    public static final int REQUEST_ID_UNSET = 0;
37ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado
38ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    /**
39ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado     * Identifies the request.  {@link DataUsageRequest}s should only be constructed by
40ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado     * the Framework and it is used internally to identify the request.
41ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado     */
42ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    public final int requestId;
43ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado
44ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    /**
456965c1869aa8499706522d057b5143bbc240178bAntonio Cansado     * {@link NetworkTemplate} describing the network to monitor.
46ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado     */
476965c1869aa8499706522d057b5143bbc240178bAntonio Cansado    public final NetworkTemplate template;
48ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado
49ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    /**
50ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado     * Threshold in bytes to be notified on.
51ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado     */
52ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    public final long thresholdInBytes;
53ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado
546965c1869aa8499706522d057b5143bbc240178bAntonio Cansado    public DataUsageRequest(int requestId, NetworkTemplate template, long thresholdInBytes) {
55ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado        this.requestId = requestId;
566965c1869aa8499706522d057b5143bbc240178bAntonio Cansado        this.template = template;
57ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado        this.thresholdInBytes = thresholdInBytes;
58ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    }
59ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado
60ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    @Override
61ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    public int describeContents() {
62ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado        return 0;
63ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    }
64ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado
65ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    @Override
66ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    public void writeToParcel(Parcel dest, int flags) {
67ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado        dest.writeInt(requestId);
686965c1869aa8499706522d057b5143bbc240178bAntonio Cansado        dest.writeParcelable(template, flags);
69ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado        dest.writeLong(thresholdInBytes);
70ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    }
71ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado
72ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    public static final Creator<DataUsageRequest> CREATOR =
73ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado            new Creator<DataUsageRequest>() {
74ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado                @Override
75ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado                public DataUsageRequest createFromParcel(Parcel in) {
76ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado                    int requestId = in.readInt();
776965c1869aa8499706522d057b5143bbc240178bAntonio Cansado                    NetworkTemplate template = in.readParcelable(null);
78ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado                    long thresholdInBytes = in.readLong();
796965c1869aa8499706522d057b5143bbc240178bAntonio Cansado                    DataUsageRequest result = new DataUsageRequest(requestId, template,
806965c1869aa8499706522d057b5143bbc240178bAntonio Cansado                            thresholdInBytes);
81ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado                    return result;
82ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado                }
83ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado
84ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado                @Override
85ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado                public DataUsageRequest[] newArray(int size) {
86ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado                    return new DataUsageRequest[size];
87ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado                }
88ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado            };
89ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado
90ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    @Override
91ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    public String toString() {
92ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado        return "DataUsageRequest [ requestId=" + requestId
936965c1869aa8499706522d057b5143bbc240178bAntonio Cansado                + ", networkTemplate=" + template
94ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado                + ", thresholdInBytes=" + thresholdInBytes + " ]";
95ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    }
96ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado
97ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    @Override
98ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    public boolean equals(Object obj) {
99ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado        if (obj instanceof DataUsageRequest == false) return false;
100ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado        DataUsageRequest that = (DataUsageRequest) obj;
101ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado        return that.requestId == this.requestId
1026965c1869aa8499706522d057b5143bbc240178bAntonio Cansado                && Objects.equals(that.template, this.template)
103ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado                && that.thresholdInBytes == this.thresholdInBytes;
104ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    }
105ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado
106ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    @Override
107ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado    public int hashCode() {
1086965c1869aa8499706522d057b5143bbc240178bAntonio Cansado        return Objects.hash(requestId, template, thresholdInBytes);
109ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado   }
110ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado
111ba8288d238737de7d8461fa0d77b3c46ee8d8d62Antonio Cansado}
112