1b208a24cf521401912cfce16fce550a995cf1250Wink Saville/*
2b208a24cf521401912cfce16fce550a995cf1250Wink Saville * Copyright (C) 2012 The Android Open Source Project
3b208a24cf521401912cfce16fce550a995cf1250Wink Saville *
4b208a24cf521401912cfce16fce550a995cf1250Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
5b208a24cf521401912cfce16fce550a995cf1250Wink Saville * you may not use this file except in compliance with the License.
6b208a24cf521401912cfce16fce550a995cf1250Wink Saville * You may obtain a copy of the License at
7b208a24cf521401912cfce16fce550a995cf1250Wink Saville *
8b208a24cf521401912cfce16fce550a995cf1250Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
9b208a24cf521401912cfce16fce550a995cf1250Wink Saville *
10b208a24cf521401912cfce16fce550a995cf1250Wink Saville * Unless required by applicable law or agreed to in writing, software
11b208a24cf521401912cfce16fce550a995cf1250Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
12b208a24cf521401912cfce16fce550a995cf1250Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b208a24cf521401912cfce16fce550a995cf1250Wink Saville * See the License for the specific language governing permissions and
14b208a24cf521401912cfce16fce550a995cf1250Wink Saville * limitations under the License.
15b208a24cf521401912cfce16fce550a995cf1250Wink Saville */
16b208a24cf521401912cfce16fce550a995cf1250Wink Saville
17b208a24cf521401912cfce16fce550a995cf1250Wink Savillepackage android.telephony;
18b208a24cf521401912cfce16fce550a995cf1250Wink Saville
19b208a24cf521401912cfce16fce550a995cf1250Wink Savilleimport android.os.Parcel;
20b208a24cf521401912cfce16fce550a995cf1250Wink Savilleimport android.os.Parcelable;
21599a90c2a02645a5f2d189b9065b863397a4076eWink Savilleimport android.telephony.Rlog;
22b208a24cf521401912cfce16fce550a995cf1250Wink Saville
23b208a24cf521401912cfce16fce550a995cf1250Wink Saville/**
24e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * GSM signal strength related information.
25b208a24cf521401912cfce16fce550a995cf1250Wink Saville */
26c6e4917adda19beb780386bcc26b652748b8ab13Wink Savillepublic final class CellSignalStrengthGsm extends CellSignalStrength implements Parcelable {
27b208a24cf521401912cfce16fce550a995cf1250Wink Saville
28b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private static final String LOG_TAG = "CellSignalStrengthGsm";
29b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private static final boolean DBG = false;
30b208a24cf521401912cfce16fce550a995cf1250Wink Saville
31b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private static final int GSM_SIGNAL_STRENGTH_GREAT = 12;
32b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private static final int GSM_SIGNAL_STRENGTH_GOOD = 8;
33e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    private static final int GSM_SIGNAL_STRENGTH_MODERATE = 5;
34b208a24cf521401912cfce16fce550a995cf1250Wink Saville
35b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private int mSignalStrength; // Valid values are (0-31, 99) as defined in TS 27.007 8.5
36b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private int mBitErrorRate;   // bit error rate (0-7, 99) as defined in TS 27.007 8.5
370c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe    private int mTimingAdvance;
38b208a24cf521401912cfce16fce550a995cf1250Wink Saville
39b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
40b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * Empty constructor
41b208a24cf521401912cfce16fce550a995cf1250Wink Saville     *
42b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @hide
43b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
44b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public CellSignalStrengthGsm() {
45b208a24cf521401912cfce16fce550a995cf1250Wink Saville        setDefaultValues();
46b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
47b208a24cf521401912cfce16fce550a995cf1250Wink Saville
48b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
49b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * Constructor
50b208a24cf521401912cfce16fce550a995cf1250Wink Saville     *
51b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @hide
52b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
53b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public CellSignalStrengthGsm(int ss, int ber) {
54b208a24cf521401912cfce16fce550a995cf1250Wink Saville        initialize(ss, ber);
55b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
56b208a24cf521401912cfce16fce550a995cf1250Wink Saville
57b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
58b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * Copy constructors
59b208a24cf521401912cfce16fce550a995cf1250Wink Saville     *
60b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @param s Source SignalStrength
61b208a24cf521401912cfce16fce550a995cf1250Wink Saville     *
62b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @hide
63b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
64b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public CellSignalStrengthGsm(CellSignalStrengthGsm s) {
65b208a24cf521401912cfce16fce550a995cf1250Wink Saville        copyFrom(s);
66b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
67b208a24cf521401912cfce16fce550a995cf1250Wink Saville
68b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
69b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * Initialize all the values
70b208a24cf521401912cfce16fce550a995cf1250Wink Saville     *
71e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * @param ss SignalStrength as ASU value
72e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * @param ber is Bit Error Rate
73b208a24cf521401912cfce16fce550a995cf1250Wink Saville     *
74b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @hide
75b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
76b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public void initialize(int ss, int ber) {
77b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mSignalStrength = ss;
78b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mBitErrorRate = ber;
790c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe        mTimingAdvance = Integer.MAX_VALUE;
800c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe    }
810c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe
820c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe    /**
830c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe     * Initialize all the values
840c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe     *
850c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe     * @param ss SignalStrength as ASU value
860c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe     * @param ber is Bit Error Rate
870c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe     * @param ta timing advance
880c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe     *
890c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe     * @hide
900c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe     */
910c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe    public void initialize(int ss, int ber, int ta) {
920c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe        mSignalStrength = ss;
930c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe        mBitErrorRate = ber;
940c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe        mTimingAdvance = ta;
95b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
96b208a24cf521401912cfce16fce550a995cf1250Wink Saville
97b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
98b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @hide
99b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
100b208a24cf521401912cfce16fce550a995cf1250Wink Saville    protected void copyFrom(CellSignalStrengthGsm s) {
101b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mSignalStrength = s.mSignalStrength;
102b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mBitErrorRate = s.mBitErrorRate;
1030c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe        mTimingAdvance = s.mTimingAdvance;
104b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
105b208a24cf521401912cfce16fce550a995cf1250Wink Saville
106b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
107b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @hide
108b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
109b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
110b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public CellSignalStrengthGsm copy() {
111b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return new CellSignalStrengthGsm(this);
112b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
113b208a24cf521401912cfce16fce550a995cf1250Wink Saville
114b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /** @hide */
115b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
116b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public void setDefaultValues() {
117b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mSignalStrength = Integer.MAX_VALUE;
118b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mBitErrorRate = Integer.MAX_VALUE;
1190c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe        mTimingAdvance = Integer.MAX_VALUE;
120b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
121b208a24cf521401912cfce16fce550a995cf1250Wink Saville
122b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
12382e6ee62b2be3c716c215e4ba72c8a12c58620fbWink Saville     * Get signal level as an int from 0..4
124b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
125b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
126b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int getLevel() {
127b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int level;
128b208a24cf521401912cfce16fce550a995cf1250Wink Saville
129b208a24cf521401912cfce16fce550a995cf1250Wink Saville        // ASU ranges from 0 to 31 - TS 27.007 Sec 8.5
130b208a24cf521401912cfce16fce550a995cf1250Wink Saville        // asu = 0 (-113dB or less) is very weak
131b208a24cf521401912cfce16fce550a995cf1250Wink Saville        // signal, its better to show 0 bars to the user in such cases.
132b208a24cf521401912cfce16fce550a995cf1250Wink Saville        // asu = 99 is a special case, where the signal strength is unknown.
133b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int asu = mSignalStrength;
134b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (asu <= 2 || asu == 99) level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
135b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (asu >= GSM_SIGNAL_STRENGTH_GREAT) level = SIGNAL_STRENGTH_GREAT;
136b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (asu >= GSM_SIGNAL_STRENGTH_GOOD)  level = SIGNAL_STRENGTH_GOOD;
137b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (asu >= GSM_SIGNAL_STRENGTH_MODERATE)  level = SIGNAL_STRENGTH_MODERATE;
138b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else level = SIGNAL_STRENGTH_POOR;
139b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (DBG) log("getLevel=" + level);
140b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return level;
141b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
142b208a24cf521401912cfce16fce550a995cf1250Wink Saville
143b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
14490bc8e30ad3b0c211ef6e4a2e54cfadd28df1b2dNathan Harold     * Get the GSM timing advance between 0..219 symbols (normally 0..63).
14590bc8e30ad3b0c211ef6e4a2e54cfadd28df1b2dNathan Harold     * Integer.MAX_VALUE is reported when there is no RR connection.
14690bc8e30ad3b0c211ef6e4a2e54cfadd28df1b2dNathan Harold     * Refer to 3GPP 45.010 Sec 5.8
14790bc8e30ad3b0c211ef6e4a2e54cfadd28df1b2dNathan Harold     * @return the current GSM timing advance, if available.
14890bc8e30ad3b0c211ef6e4a2e54cfadd28df1b2dNathan Harold     */
14990bc8e30ad3b0c211ef6e4a2e54cfadd28df1b2dNathan Harold    public int getTimingAdvance() {
15090bc8e30ad3b0c211ef6e4a2e54cfadd28df1b2dNathan Harold        return mTimingAdvance;
15190bc8e30ad3b0c211ef6e4a2e54cfadd28df1b2dNathan Harold    }
15290bc8e30ad3b0c211ef6e4a2e54cfadd28df1b2dNathan Harold
15390bc8e30ad3b0c211ef6e4a2e54cfadd28df1b2dNathan Harold    /**
15482e6ee62b2be3c716c215e4ba72c8a12c58620fbWink Saville     * Get the signal strength as dBm
155b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
156b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
157b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int getDbm() {
158b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int dBm;
159b208a24cf521401912cfce16fce550a995cf1250Wink Saville
160b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int level = mSignalStrength;
161b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int asu = (level == 99 ? Integer.MAX_VALUE : level);
162b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (asu != Integer.MAX_VALUE) {
163b208a24cf521401912cfce16fce550a995cf1250Wink Saville            dBm = -113 + (2 * asu);
164b208a24cf521401912cfce16fce550a995cf1250Wink Saville        } else {
165b208a24cf521401912cfce16fce550a995cf1250Wink Saville            dBm = Integer.MAX_VALUE;
166b208a24cf521401912cfce16fce550a995cf1250Wink Saville        }
167b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (DBG) log("getDbm=" + dBm);
168b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return dBm;
169b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
170b208a24cf521401912cfce16fce550a995cf1250Wink Saville
171b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
172e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * Get the signal level as an asu value between 0..31, 99 is unknown
173b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * Asu is calculated based on 3GPP RSRP. Refer to 3GPP 27.007 (Ver 10.3.0) Sec 8.69
174b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
175b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
176b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int getAsuLevel() {
177b208a24cf521401912cfce16fce550a995cf1250Wink Saville        // ASU ranges from 0 to 31 - TS 27.007 Sec 8.5
178b208a24cf521401912cfce16fce550a995cf1250Wink Saville        // asu = 0 (-113dB or less) is very weak
179b208a24cf521401912cfce16fce550a995cf1250Wink Saville        // signal, its better to show 0 bars to the user in such cases.
180b208a24cf521401912cfce16fce550a995cf1250Wink Saville        // asu = 99 is a special case, where the signal strength is unknown.
181b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int level = mSignalStrength;
182b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (DBG) log("getAsuLevel=" + level);
183b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return level;
184b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
185b208a24cf521401912cfce16fce550a995cf1250Wink Saville
186b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
187b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int hashCode() {
188b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int primeNum = 31;
189b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return (mSignalStrength * primeNum) + (mBitErrorRate * primeNum);
190b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
191b208a24cf521401912cfce16fce550a995cf1250Wink Saville
192b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
193b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public boolean equals (Object o) {
194b208a24cf521401912cfce16fce550a995cf1250Wink Saville        CellSignalStrengthGsm s;
195b208a24cf521401912cfce16fce550a995cf1250Wink Saville
196b208a24cf521401912cfce16fce550a995cf1250Wink Saville        try {
197b208a24cf521401912cfce16fce550a995cf1250Wink Saville            s = (CellSignalStrengthGsm) o;
198b208a24cf521401912cfce16fce550a995cf1250Wink Saville        } catch (ClassCastException ex) {
199b208a24cf521401912cfce16fce550a995cf1250Wink Saville            return false;
200b208a24cf521401912cfce16fce550a995cf1250Wink Saville        }
201b208a24cf521401912cfce16fce550a995cf1250Wink Saville
202b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (o == null) {
203b208a24cf521401912cfce16fce550a995cf1250Wink Saville            return false;
204b208a24cf521401912cfce16fce550a995cf1250Wink Saville        }
205b208a24cf521401912cfce16fce550a995cf1250Wink Saville
2060c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe        return mSignalStrength == s.mSignalStrength && mBitErrorRate == s.mBitErrorRate &&
2070c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe                        s.mTimingAdvance == mTimingAdvance;
208b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
209b208a24cf521401912cfce16fce550a995cf1250Wink Saville
210b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
211b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @return string representation.
212b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
213b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
214b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public String toString() {
215b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return "CellSignalStrengthGsm:"
216b208a24cf521401912cfce16fce550a995cf1250Wink Saville                + " ss=" + mSignalStrength
2170c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe                + " ber=" + mBitErrorRate
2180c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe                + " mTa=" + mTimingAdvance;
219b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
220b208a24cf521401912cfce16fce550a995cf1250Wink Saville
221b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /** Implement the Parcelable interface */
222b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
223b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public void writeToParcel(Parcel dest, int flags) {
224b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (DBG) log("writeToParcel(Parcel, int): " + toString());
225b208a24cf521401912cfce16fce550a995cf1250Wink Saville        dest.writeInt(mSignalStrength);
226b208a24cf521401912cfce16fce550a995cf1250Wink Saville        dest.writeInt(mBitErrorRate);
2270c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe        dest.writeInt(mTimingAdvance);
228b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
229b208a24cf521401912cfce16fce550a995cf1250Wink Saville
230b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
231b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * Construct a SignalStrength object from the given parcel
232b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * where the token is already been processed.
233b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
234b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private CellSignalStrengthGsm(Parcel in) {
235b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mSignalStrength = in.readInt();
236b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mBitErrorRate = in.readInt();
2370c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe        mTimingAdvance = in.readInt();
238b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (DBG) log("CellSignalStrengthGsm(Parcel): " + toString());
239b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
240b208a24cf521401912cfce16fce550a995cf1250Wink Saville
241b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /** Implement the Parcelable interface */
242b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
243b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int describeContents() {
244b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return 0;
245b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
246b208a24cf521401912cfce16fce550a995cf1250Wink Saville
247b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /** Implement the Parcelable interface */
248b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @SuppressWarnings("hiding")
249b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public static final Parcelable.Creator<CellSignalStrengthGsm> CREATOR =
250b208a24cf521401912cfce16fce550a995cf1250Wink Saville            new Parcelable.Creator<CellSignalStrengthGsm>() {
251b208a24cf521401912cfce16fce550a995cf1250Wink Saville        @Override
252b208a24cf521401912cfce16fce550a995cf1250Wink Saville        public CellSignalStrengthGsm createFromParcel(Parcel in) {
253c6e4917adda19beb780386bcc26b652748b8ab13Wink Saville            return new CellSignalStrengthGsm(in);
254b208a24cf521401912cfce16fce550a995cf1250Wink Saville        }
255b208a24cf521401912cfce16fce550a995cf1250Wink Saville
256b208a24cf521401912cfce16fce550a995cf1250Wink Saville        @Override
257b208a24cf521401912cfce16fce550a995cf1250Wink Saville        public CellSignalStrengthGsm[] newArray(int size) {
258b208a24cf521401912cfce16fce550a995cf1250Wink Saville            return new CellSignalStrengthGsm[size];
259b208a24cf521401912cfce16fce550a995cf1250Wink Saville        }
260b208a24cf521401912cfce16fce550a995cf1250Wink Saville    };
261b208a24cf521401912cfce16fce550a995cf1250Wink Saville
262b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
263b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * log
264b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
265b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private static void log(String s) {
266599a90c2a02645a5f2d189b9065b863397a4076eWink Saville        Rlog.w(LOG_TAG, s);
267b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
268b208a24cf521401912cfce16fce550a995cf1250Wink Saville}
269