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