1e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville/*
2e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * Copyright (C) 2012 The Android Open Source Project
3e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville *
4e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
5e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * you may not use this file except in compliance with the License.
6e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * You may obtain a copy of the License at
7e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville *
8e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
9e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville *
10e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * Unless required by applicable law or agreed to in writing, software
11e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
12e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * See the License for the specific language governing permissions and
14e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * limitations under the License.
15e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville */
16e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
17e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Savillepackage android.telephony;
18e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
19e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Savilleimport android.os.Parcel;
20e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Savilleimport android.os.Parcelable;
21e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Savilleimport android.telephony.Rlog;
22e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
23e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville/**
24e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * Immutable cell information from a point in time.
25e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville */
26e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Savillepublic final class CellInfoWcdma extends CellInfo implements Parcelable {
27e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
28e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    private static final String LOG_TAG = "CellInfoWcdma";
29e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    private static final boolean DBG = false;
30e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
31e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    private CellIdentityWcdma mCellIdentityWcdma;
32e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    private CellSignalStrengthWcdma mCellSignalStrengthWcdma;
33e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
34e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /** @hide */
35e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public CellInfoWcdma() {
36e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        super();
37e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        mCellIdentityWcdma = new CellIdentityWcdma();
38e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        mCellSignalStrengthWcdma = new CellSignalStrengthWcdma();
39e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
40e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
41e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /** @hide */
42e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public CellInfoWcdma(CellInfoWcdma ci) {
43e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        super(ci);
44e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        this.mCellIdentityWcdma = ci.mCellIdentityWcdma.copy();
45e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        this.mCellSignalStrengthWcdma = ci.mCellSignalStrengthWcdma.copy();
46e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
47e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
48e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public CellIdentityWcdma getCellIdentity() {
49e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        return mCellIdentityWcdma;
50e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
51e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /** @hide */
52e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public void setCellIdentity(CellIdentityWcdma cid) {
53e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        mCellIdentityWcdma = cid;
54e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
55e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
56e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public CellSignalStrengthWcdma getCellSignalStrength() {
57e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        return mCellSignalStrengthWcdma;
58e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
59e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /** @hide */
60e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public void setCellSignalStrength(CellSignalStrengthWcdma css) {
61e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        mCellSignalStrengthWcdma = css;
62e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
63e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
64e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /**
65e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * @return hash code
66e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     */
67e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    @Override
68e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public int hashCode() {
69e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        return super.hashCode() + mCellIdentityWcdma.hashCode() + mCellSignalStrengthWcdma.hashCode();
70e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
71e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
72e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    @Override
73e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public boolean equals(Object other) {
74e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        if (!super.equals(other)) {
75e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville            return false;
76e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        }
77e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        try {
78e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville            CellInfoWcdma o = (CellInfoWcdma) other;
79e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville            return mCellIdentityWcdma.equals(o.mCellIdentityWcdma)
80e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville                    && mCellSignalStrengthWcdma.equals(o.mCellSignalStrengthWcdma);
81e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        } catch (ClassCastException e) {
82e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville            return false;
83e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        }
84e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
85e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
86e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    @Override
87e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public String toString() {
88e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        StringBuffer sb = new StringBuffer();
89e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
90e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        sb.append("CellInfoWcdma:{");
91e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        sb.append(super.toString());
92e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        sb.append(" ").append(mCellIdentityWcdma);
93e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        sb.append(" ").append(mCellSignalStrengthWcdma);
94e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        sb.append("}");
95e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
96e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        return sb.toString();
97e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
98e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
99e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /** Implement the Parcelable interface */
100e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    @Override
101e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public int describeContents() {
102e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        return 0;
103e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
104e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
105e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /** Implement the Parcelable interface */
106e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    @Override
107e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public void writeToParcel(Parcel dest, int flags) {
108e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        super.writeToParcel(dest, flags, TYPE_WCDMA);
109e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        mCellIdentityWcdma.writeToParcel(dest, flags);
110e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        mCellSignalStrengthWcdma.writeToParcel(dest, flags);
111e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
112e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
113e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /**
114e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * Construct a CellInfoWcdma object from the given parcel
115e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * where the token is already been processed.
116e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     */
117e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    private CellInfoWcdma(Parcel in) {
118e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        super(in);
119e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        mCellIdentityWcdma = CellIdentityWcdma.CREATOR.createFromParcel(in);
120e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        mCellSignalStrengthWcdma = CellSignalStrengthWcdma.CREATOR.createFromParcel(in);
121e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
122e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
123e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /** Implement the Parcelable interface */
124e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public static final Creator<CellInfoWcdma> CREATOR = new Creator<CellInfoWcdma>() {
125e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        @Override
126e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        public CellInfoWcdma createFromParcel(Parcel in) {
127e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville            in.readInt(); // Skip past token, we know what it is
128e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville            return createFromParcelBody(in);
129e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        }
130e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
131e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        @Override
132e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        public CellInfoWcdma[] newArray(int size) {
133e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville            return new CellInfoWcdma[size];
134e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        }
135e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    };
136e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
137e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /** @hide */
138e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    protected static CellInfoWcdma createFromParcelBody(Parcel in) {
139e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        return new CellInfoWcdma(in);
140e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
141e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
142e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /**
143e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * log
144e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     */
145e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    private static void log(String s) {
146e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        Rlog.w(LOG_TAG, s);
147e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
148e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville}
149