NetworkPolicy.java revision 1b5a2a96f793211bfbd39aa29cc41031dfa23950
121c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey/* 221c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey * Copyright (C) 2011 The Android Open Source Project 321c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey * 421c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 521c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey * you may not use this file except in compliance with the License. 621c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey * You may obtain a copy of the License at 721c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey * 821c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 921c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey * 1021c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey * Unless required by applicable law or agreed to in writing, software 1121c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 1221c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1321c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey * See the License for the specific language governing permissions and 1421c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey * limitations under the License. 1521c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey */ 1621c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey 1721c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkeypackage android.net; 1821c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey 191b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeyimport static com.android.internal.util.Preconditions.checkNotNull; 201b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 2121c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkeyimport android.os.Parcel; 2221c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkeyimport android.os.Parcelable; 2321c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey 2421c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey/** 251b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * Policy for networks matching a {@link NetworkTemplate}, including usage cycle 261b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey * and limits to be enforced. 2721c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey * 2821c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey * @hide 2921c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey */ 3021c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkeypublic class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { 311b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public static final long WARNING_DISABLED = -1; 321b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public static final long LIMIT_DISABLED = -1; 331b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 341b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public final NetworkTemplate template; 3522c055e6424e0e9579711545d8f4800c0f796db8Jeff Sharkey public int cycleDay; 3622c055e6424e0e9579711545d8f4800c0f796db8Jeff Sharkey public long warningBytes; 3722c055e6424e0e9579711545d8f4800c0f796db8Jeff Sharkey public long limitBytes; 3821c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey 391b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey // TODO: teach how to snooze limit for current cycle 4022c055e6424e0e9579711545d8f4800c0f796db8Jeff Sharkey 411b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public NetworkPolicy( 421b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey NetworkTemplate template, int cycleDay, long warningBytes, long limitBytes) { 431b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey this.template = checkNotNull(template, "missing NetworkTemplate"); 4421c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey this.cycleDay = cycleDay; 4521c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey this.warningBytes = warningBytes; 4621c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey this.limitBytes = limitBytes; 4721c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey } 4821c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey 4921c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey public NetworkPolicy(Parcel in) { 501b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey template = in.readParcelable(null); 5121c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey cycleDay = in.readInt(); 5221c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey warningBytes = in.readLong(); 5321c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey limitBytes = in.readLong(); 5421c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey } 5521c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey 5621c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey /** {@inheritDoc} */ 5721c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey public void writeToParcel(Parcel dest, int flags) { 581b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey dest.writeParcelable(template, flags); 5921c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey dest.writeInt(cycleDay); 6021c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey dest.writeLong(warningBytes); 6121c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey dest.writeLong(limitBytes); 6221c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey } 6321c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey 6421c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey /** {@inheritDoc} */ 6521c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey public int describeContents() { 6621c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey return 0; 6721c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey } 6821c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey 6921c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey /** {@inheritDoc} */ 7021c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey public int compareTo(NetworkPolicy another) { 7122c055e6424e0e9579711545d8f4800c0f796db8Jeff Sharkey if (another == null || another.limitBytes == LIMIT_DISABLED) { 7222c055e6424e0e9579711545d8f4800c0f796db8Jeff Sharkey // other value is missing or disabled; we win 7321c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey return -1; 7422c055e6424e0e9579711545d8f4800c0f796db8Jeff Sharkey } 7522c055e6424e0e9579711545d8f4800c0f796db8Jeff Sharkey if (limitBytes == LIMIT_DISABLED || another.limitBytes < limitBytes) { 7622c055e6424e0e9579711545d8f4800c0f796db8Jeff Sharkey // we're disabled or other limit is smaller; they win 7721c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey return 1; 7821c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey } 7922c055e6424e0e9579711545d8f4800c0f796db8Jeff Sharkey return 0; 8021c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey } 8121c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey 8221c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey @Override 8321c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey public String toString() { 841b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey return "NetworkPolicy[" + template + "]: cycleDay=" + cycleDay + ", warningBytes=" 851b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey + warningBytes + ", limitBytes=" + limitBytes; 8621c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey } 8721c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey 8821c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey public static final Creator<NetworkPolicy> CREATOR = new Creator<NetworkPolicy>() { 8921c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey public NetworkPolicy createFromParcel(Parcel in) { 9021c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey return new NetworkPolicy(in); 9121c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey } 9221c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey 9321c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey public NetworkPolicy[] newArray(int size) { 9421c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey return new NetworkPolicy[size]; 9521c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey } 9621c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey }; 9721c9c45e5caf62b935354b74392fb40c4bf18529Jeff Sharkey} 98