1070e061a289d771e62b58379eaed153fd285b04fWink Saville/*
2070e061a289d771e62b58379eaed153fd285b04fWink Saville * Copyright (C) 2014 The Android Open Source Project
3070e061a289d771e62b58379eaed153fd285b04fWink Saville *
4070e061a289d771e62b58379eaed153fd285b04fWink Saville * Licensed under the Apache License, Version 2.0 (the "License");
5070e061a289d771e62b58379eaed153fd285b04fWink Saville * you may not use this file except in compliance with the License.
6070e061a289d771e62b58379eaed153fd285b04fWink Saville * You may obtain a copy of the License at
7070e061a289d771e62b58379eaed153fd285b04fWink Saville *
8070e061a289d771e62b58379eaed153fd285b04fWink Saville *      http://www.apache.org/licenses/LICENSE-2.0
9070e061a289d771e62b58379eaed153fd285b04fWink Saville *
10070e061a289d771e62b58379eaed153fd285b04fWink Saville * Unless required by applicable law or agreed to in writing, software
11070e061a289d771e62b58379eaed153fd285b04fWink Saville * distributed under the License is distributed on an "AS IS" BASIS,
12070e061a289d771e62b58379eaed153fd285b04fWink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13070e061a289d771e62b58379eaed153fd285b04fWink Saville * See the License for the specific language governing permissions and
14070e061a289d771e62b58379eaed153fd285b04fWink Saville * limitations under the License.
15070e061a289d771e62b58379eaed153fd285b04fWink Saville */
16070e061a289d771e62b58379eaed153fd285b04fWink Saville
17070e061a289d771e62b58379eaed153fd285b04fWink Savillepackage android.telephony;
18070e061a289d771e62b58379eaed153fd285b04fWink Saville
19070e061a289d771e62b58379eaed153fd285b04fWink Savilleimport android.os.Parcel;
20070e061a289d771e62b58379eaed153fd285b04fWink Savilleimport android.os.Parcelable;
21070e061a289d771e62b58379eaed153fd285b04fWink Saville
22070e061a289d771e62b58379eaed153fd285b04fWink Saville/**
23070e061a289d771e62b58379eaed153fd285b04fWink Saville * Data connection real time information
24070e061a289d771e62b58379eaed153fd285b04fWink Saville *
25070e061a289d771e62b58379eaed153fd285b04fWink Saville * TODO: How to handle multiple subscriptions?
262ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @hide
27070e061a289d771e62b58379eaed153fd285b04fWink Saville */
28070e061a289d771e62b58379eaed153fd285b04fWink Savillepublic class DataConnectionRealTimeInfo implements Parcelable {
29070e061a289d771e62b58379eaed153fd285b04fWink Saville    private long mTime;             // Time the info was collected since boot in nanos;
30070e061a289d771e62b58379eaed153fd285b04fWink Saville
31ec1d60015386f12f70aaadaac2030bd7f40dd749Nathan Harold    public static final int DC_POWER_STATE_LOW       = 1;
32ec1d60015386f12f70aaadaac2030bd7f40dd749Nathan Harold    public static final int DC_POWER_STATE_MEDIUM    = 2;
33ec1d60015386f12f70aaadaac2030bd7f40dd749Nathan Harold    public static final int DC_POWER_STATE_HIGH      = 3;
34ec1d60015386f12f70aaadaac2030bd7f40dd749Nathan Harold    public static final int DC_POWER_STATE_UNKNOWN   = Integer.MAX_VALUE;
35070e061a289d771e62b58379eaed153fd285b04fWink Saville
36070e061a289d771e62b58379eaed153fd285b04fWink Saville    private int mDcPowerState;      // DC_POWER_STATE_[LOW | MEDIUM | HIGH | UNKNOWN]
37070e061a289d771e62b58379eaed153fd285b04fWink Saville
38070e061a289d771e62b58379eaed153fd285b04fWink Saville    /**
39070e061a289d771e62b58379eaed153fd285b04fWink Saville     * Constructor
40070e061a289d771e62b58379eaed153fd285b04fWink Saville     *
41070e061a289d771e62b58379eaed153fd285b04fWink Saville     * @hide
42070e061a289d771e62b58379eaed153fd285b04fWink Saville     */
43070e061a289d771e62b58379eaed153fd285b04fWink Saville    public DataConnectionRealTimeInfo(long time, int dcPowerState) {
44070e061a289d771e62b58379eaed153fd285b04fWink Saville        mTime = time;
45070e061a289d771e62b58379eaed153fd285b04fWink Saville        mDcPowerState = dcPowerState;
46070e061a289d771e62b58379eaed153fd285b04fWink Saville    }
47070e061a289d771e62b58379eaed153fd285b04fWink Saville
48070e061a289d771e62b58379eaed153fd285b04fWink Saville    /**
49070e061a289d771e62b58379eaed153fd285b04fWink Saville     * Constructor
50070e061a289d771e62b58379eaed153fd285b04fWink Saville     *
51070e061a289d771e62b58379eaed153fd285b04fWink Saville     * @hide
52070e061a289d771e62b58379eaed153fd285b04fWink Saville     */
53070e061a289d771e62b58379eaed153fd285b04fWink Saville    public DataConnectionRealTimeInfo() {
54070e061a289d771e62b58379eaed153fd285b04fWink Saville        mTime = Long.MAX_VALUE;
55070e061a289d771e62b58379eaed153fd285b04fWink Saville        mDcPowerState = DC_POWER_STATE_UNKNOWN;
56070e061a289d771e62b58379eaed153fd285b04fWink Saville    }
57070e061a289d771e62b58379eaed153fd285b04fWink Saville
58070e061a289d771e62b58379eaed153fd285b04fWink Saville    /**
59070e061a289d771e62b58379eaed153fd285b04fWink Saville     * Construct a PreciseCallState object from the given parcel.
60070e061a289d771e62b58379eaed153fd285b04fWink Saville     */
61070e061a289d771e62b58379eaed153fd285b04fWink Saville    private DataConnectionRealTimeInfo(Parcel in) {
62070e061a289d771e62b58379eaed153fd285b04fWink Saville        mTime = in.readLong();
63070e061a289d771e62b58379eaed153fd285b04fWink Saville        mDcPowerState = in.readInt();
64070e061a289d771e62b58379eaed153fd285b04fWink Saville    }
65070e061a289d771e62b58379eaed153fd285b04fWink Saville
66070e061a289d771e62b58379eaed153fd285b04fWink Saville    /**
67070e061a289d771e62b58379eaed153fd285b04fWink Saville     * @return time the information was collected or Long.MAX_VALUE if unknown
68070e061a289d771e62b58379eaed153fd285b04fWink Saville     */
69070e061a289d771e62b58379eaed153fd285b04fWink Saville    public long getTime() {
70070e061a289d771e62b58379eaed153fd285b04fWink Saville        return mTime;
71070e061a289d771e62b58379eaed153fd285b04fWink Saville    }
72070e061a289d771e62b58379eaed153fd285b04fWink Saville
73070e061a289d771e62b58379eaed153fd285b04fWink Saville    /**
74070e061a289d771e62b58379eaed153fd285b04fWink Saville     * @return DC_POWER_STATE_[LOW | MEDIUM | HIGH | UNKNOWN]
75070e061a289d771e62b58379eaed153fd285b04fWink Saville     */
76070e061a289d771e62b58379eaed153fd285b04fWink Saville    public int getDcPowerState() {
77070e061a289d771e62b58379eaed153fd285b04fWink Saville        return mDcPowerState;
78070e061a289d771e62b58379eaed153fd285b04fWink Saville    }
79070e061a289d771e62b58379eaed153fd285b04fWink Saville
80070e061a289d771e62b58379eaed153fd285b04fWink Saville    @Override
81070e061a289d771e62b58379eaed153fd285b04fWink Saville    public int describeContents() {
82070e061a289d771e62b58379eaed153fd285b04fWink Saville        return 0;
83070e061a289d771e62b58379eaed153fd285b04fWink Saville    }
84070e061a289d771e62b58379eaed153fd285b04fWink Saville
85070e061a289d771e62b58379eaed153fd285b04fWink Saville    @Override
86070e061a289d771e62b58379eaed153fd285b04fWink Saville    public void writeToParcel(Parcel out, int flags) {
87070e061a289d771e62b58379eaed153fd285b04fWink Saville        out.writeLong(mTime);
88070e061a289d771e62b58379eaed153fd285b04fWink Saville        out.writeInt(mDcPowerState);
89070e061a289d771e62b58379eaed153fd285b04fWink Saville    }
90070e061a289d771e62b58379eaed153fd285b04fWink Saville
91070e061a289d771e62b58379eaed153fd285b04fWink Saville    public static final Parcelable.Creator<DataConnectionRealTimeInfo> CREATOR
92070e061a289d771e62b58379eaed153fd285b04fWink Saville            = new Parcelable.Creator<DataConnectionRealTimeInfo>() {
93070e061a289d771e62b58379eaed153fd285b04fWink Saville
94070e061a289d771e62b58379eaed153fd285b04fWink Saville        @Override
95070e061a289d771e62b58379eaed153fd285b04fWink Saville        public DataConnectionRealTimeInfo createFromParcel(Parcel in) {
96070e061a289d771e62b58379eaed153fd285b04fWink Saville            return new DataConnectionRealTimeInfo(in);
97070e061a289d771e62b58379eaed153fd285b04fWink Saville        }
98070e061a289d771e62b58379eaed153fd285b04fWink Saville
99070e061a289d771e62b58379eaed153fd285b04fWink Saville        @Override
100070e061a289d771e62b58379eaed153fd285b04fWink Saville        public DataConnectionRealTimeInfo[] newArray(int size) {
101070e061a289d771e62b58379eaed153fd285b04fWink Saville            return new DataConnectionRealTimeInfo[size];
102070e061a289d771e62b58379eaed153fd285b04fWink Saville        }
103070e061a289d771e62b58379eaed153fd285b04fWink Saville    };
104070e061a289d771e62b58379eaed153fd285b04fWink Saville
105070e061a289d771e62b58379eaed153fd285b04fWink Saville    @Override
106070e061a289d771e62b58379eaed153fd285b04fWink Saville    public int hashCode() {
107070e061a289d771e62b58379eaed153fd285b04fWink Saville        final long prime = 17;
108070e061a289d771e62b58379eaed153fd285b04fWink Saville        long result = 1;
109070e061a289d771e62b58379eaed153fd285b04fWink Saville        result = (prime * result) + mTime;
110070e061a289d771e62b58379eaed153fd285b04fWink Saville        result += (prime * result) + mDcPowerState;
111070e061a289d771e62b58379eaed153fd285b04fWink Saville        return (int)result;
112070e061a289d771e62b58379eaed153fd285b04fWink Saville    }
113070e061a289d771e62b58379eaed153fd285b04fWink Saville
114070e061a289d771e62b58379eaed153fd285b04fWink Saville    @Override
115070e061a289d771e62b58379eaed153fd285b04fWink Saville    public boolean equals(Object obj) {
116070e061a289d771e62b58379eaed153fd285b04fWink Saville        if (this == obj) {
117070e061a289d771e62b58379eaed153fd285b04fWink Saville            return true;
118070e061a289d771e62b58379eaed153fd285b04fWink Saville        }
119070e061a289d771e62b58379eaed153fd285b04fWink Saville        if (obj == null) {
120070e061a289d771e62b58379eaed153fd285b04fWink Saville            return false;
121070e061a289d771e62b58379eaed153fd285b04fWink Saville        }
122070e061a289d771e62b58379eaed153fd285b04fWink Saville        if (getClass() != obj.getClass()) {
123070e061a289d771e62b58379eaed153fd285b04fWink Saville            return false;
124070e061a289d771e62b58379eaed153fd285b04fWink Saville        }
125070e061a289d771e62b58379eaed153fd285b04fWink Saville        DataConnectionRealTimeInfo other = (DataConnectionRealTimeInfo) obj;
126070e061a289d771e62b58379eaed153fd285b04fWink Saville        return (mTime == other.mTime)
127070e061a289d771e62b58379eaed153fd285b04fWink Saville                && (mDcPowerState == other.mDcPowerState);
128070e061a289d771e62b58379eaed153fd285b04fWink Saville    }
129070e061a289d771e62b58379eaed153fd285b04fWink Saville
130070e061a289d771e62b58379eaed153fd285b04fWink Saville    @Override
131070e061a289d771e62b58379eaed153fd285b04fWink Saville    public String toString() {
132070e061a289d771e62b58379eaed153fd285b04fWink Saville        StringBuffer sb = new StringBuffer();
133070e061a289d771e62b58379eaed153fd285b04fWink Saville
134070e061a289d771e62b58379eaed153fd285b04fWink Saville        sb.append("mTime=").append(mTime);
135070e061a289d771e62b58379eaed153fd285b04fWink Saville        sb.append(" mDcPowerState=").append(mDcPowerState);
136070e061a289d771e62b58379eaed153fd285b04fWink Saville
137070e061a289d771e62b58379eaed153fd285b04fWink Saville        return sb.toString();
138070e061a289d771e62b58379eaed153fd285b04fWink Saville    }
139070e061a289d771e62b58379eaed153fd285b04fWink Saville}
140