104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville/*
204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville * Copyright (C) 2006 The Android Open Source Project
304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville *
404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville * Licensed under the Apache License, Version 2.0 (the "License");
504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville * you may not use this file except in compliance with the License.
604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville * You may obtain a copy of the License at
704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville *
804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville *      http://www.apache.org/licenses/LICENSE-2.0
904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville *
1004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville * Unless required by applicable law or agreed to in writing, software
1104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville * distributed under the License is distributed on an "AS IS" BASIS,
1204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville * See the License for the specific language governing permissions and
1404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville * limitations under the License.
1504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville */
1604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
1704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savillepackage android.telephony.cdma;
1804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
1904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savilleimport android.os.Bundle;
2004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savilleimport android.telephony.CellLocation;
2104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
2204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville/**
231b90def3c683afaea528a0ee705b14df6ce2e2c7Mike Lockwood * Represents the cell location on a CDMA phone.
2404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville */
2504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Savillepublic class CdmaCellLocation extends CellLocation {
2604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    private int mBaseStationId = -1;
27d393184ac595ab5490c77305a27fd049badf9a5dNaveen Kalla
28d393184ac595ab5490c77305a27fd049badf9a5dNaveen Kalla    /**
299384b145e625b3bb6ff8b829ddb1466e16a78f49Mark Vandevoorde     * @hide
309384b145e625b3bb6ff8b829ddb1466e16a78f49Mark Vandevoorde     */
319384b145e625b3bb6ff8b829ddb1466e16a78f49Mark Vandevoorde    public final static int INVALID_LAT_LONG = Integer.MAX_VALUE;
329384b145e625b3bb6ff8b829ddb1466e16a78f49Mark Vandevoorde
339384b145e625b3bb6ff8b829ddb1466e16a78f49Mark Vandevoorde    /**
34d393184ac595ab5490c77305a27fd049badf9a5dNaveen Kalla     * Latitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0.
35d393184ac595ab5490c77305a27fd049badf9a5dNaveen Kalla     * It is represented in units of 0.25 seconds and ranges from -1296000
36d393184ac595ab5490c77305a27fd049badf9a5dNaveen Kalla     * to 1296000, both values inclusive (corresponding to a range of -90
37d393184ac595ab5490c77305a27fd049badf9a5dNaveen Kalla     * to +90 degrees). Integer.MAX_VALUE is considered invalid value.
38d393184ac595ab5490c77305a27fd049badf9a5dNaveen Kalla     */
399384b145e625b3bb6ff8b829ddb1466e16a78f49Mark Vandevoorde    private int mBaseStationLatitude = INVALID_LAT_LONG;
40d393184ac595ab5490c77305a27fd049badf9a5dNaveen Kalla
41d393184ac595ab5490c77305a27fd049badf9a5dNaveen Kalla    /**
42d393184ac595ab5490c77305a27fd049badf9a5dNaveen Kalla     * Longitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0.
43d393184ac595ab5490c77305a27fd049badf9a5dNaveen Kalla     * It is represented in units of 0.25 seconds and ranges from -2592000
44d393184ac595ab5490c77305a27fd049badf9a5dNaveen Kalla     * to 2592000, both values inclusive (corresponding to a range of -180
45d393184ac595ab5490c77305a27fd049badf9a5dNaveen Kalla     * to +180 degrees). Integer.MAX_VALUE is considered invalid value.
46d393184ac595ab5490c77305a27fd049badf9a5dNaveen Kalla     */
479384b145e625b3bb6ff8b829ddb1466e16a78f49Mark Vandevoorde    private int mBaseStationLongitude = INVALID_LAT_LONG;
48d393184ac595ab5490c77305a27fd049badf9a5dNaveen Kalla
49a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood    private int mSystemId = -1;
50a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood    private int mNetworkId = -1;
5104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
5204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    /**
531b90def3c683afaea528a0ee705b14df6ce2e2c7Mike Lockwood     * Empty constructor.
54d393184ac595ab5490c77305a27fd049badf9a5dNaveen Kalla     * Initializes the BID, SID, NID and base station latitude and longitude
55d393184ac595ab5490c77305a27fd049badf9a5dNaveen Kalla     * to invalid values.
5604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     */
5704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public CdmaCellLocation() {
5804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        this.mBaseStationId = -1;
599384b145e625b3bb6ff8b829ddb1466e16a78f49Mark Vandevoorde        this.mBaseStationLatitude = INVALID_LAT_LONG;
609384b145e625b3bb6ff8b829ddb1466e16a78f49Mark Vandevoorde        this.mBaseStationLongitude = INVALID_LAT_LONG;
61a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood        this.mSystemId = -1;
62a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood        this.mNetworkId = -1;
6304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
6404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
6504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    /**
6604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * Initialize the object from a bundle.
6704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     */
689384b145e625b3bb6ff8b829ddb1466e16a78f49Mark Vandevoorde    public CdmaCellLocation(Bundle bundle) {
699384b145e625b3bb6ff8b829ddb1466e16a78f49Mark Vandevoorde        this.mBaseStationId = bundle.getInt("baseStationId", mBaseStationId);
709384b145e625b3bb6ff8b829ddb1466e16a78f49Mark Vandevoorde        this.mBaseStationLatitude = bundle.getInt("baseStationLatitude", mBaseStationLatitude);
719384b145e625b3bb6ff8b829ddb1466e16a78f49Mark Vandevoorde        this.mBaseStationLongitude = bundle.getInt("baseStationLongitude", mBaseStationLongitude);
729384b145e625b3bb6ff8b829ddb1466e16a78f49Mark Vandevoorde        this.mSystemId = bundle.getInt("systemId", mSystemId);
739384b145e625b3bb6ff8b829ddb1466e16a78f49Mark Vandevoorde        this.mNetworkId = bundle.getInt("networkId", mNetworkId);
7404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
7504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
7604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    /**
7704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * @return cdma base station identification number, -1 if unknown
7804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     */
7904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public int getBaseStationId() {
8004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        return this.mBaseStationId;
8104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
8204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
8304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    /**
849a18320ef4c9019807423ea05d350a005e136bccSean Barbeau     * Latitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0.
859a18320ef4c9019807423ea05d350a005e136bccSean Barbeau     * (http://www.3gpp2.org/public_html/specs/C.S0005-A_v6.0.pdf)
869a18320ef4c9019807423ea05d350a005e136bccSean Barbeau     * It is represented in units of 0.25 seconds and ranges from -1296000
879a18320ef4c9019807423ea05d350a005e136bccSean Barbeau     * to 1296000, both values inclusive (corresponding to a range of -90
889a18320ef4c9019807423ea05d350a005e136bccSean Barbeau     * to +90 degrees). Integer.MAX_VALUE is considered invalid value.
899a18320ef4c9019807423ea05d350a005e136bccSean Barbeau     *
909a18320ef4c9019807423ea05d350a005e136bccSean Barbeau     * @return cdma base station latitude in units of 0.25 seconds, Integer.MAX_VALUE if unknown
9104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     */
9204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public int getBaseStationLatitude() {
9304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        return this.mBaseStationLatitude;
9404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
9504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
9604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    /**
979a18320ef4c9019807423ea05d350a005e136bccSean Barbeau     * Longitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0.
989a18320ef4c9019807423ea05d350a005e136bccSean Barbeau     * (http://www.3gpp2.org/public_html/specs/C.S0005-A_v6.0.pdf)
999a18320ef4c9019807423ea05d350a005e136bccSean Barbeau     * It is represented in units of 0.25 seconds and ranges from -2592000
1009a18320ef4c9019807423ea05d350a005e136bccSean Barbeau     * to 2592000, both values inclusive (corresponding to a range of -180
1019a18320ef4c9019807423ea05d350a005e136bccSean Barbeau     * to +180 degrees). Integer.MAX_VALUE is considered invalid value.
1029a18320ef4c9019807423ea05d350a005e136bccSean Barbeau     *
1039a18320ef4c9019807423ea05d350a005e136bccSean Barbeau     * @return cdma base station longitude in units of 0.25 seconds, Integer.MAX_VALUE if unknown
10404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     */
10504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public int getBaseStationLongitude() {
10604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        return this.mBaseStationLongitude;
10704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
10804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
10904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    /**
110a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood     * @return cdma system identification number, -1 if unknown
111a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood     */
112a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood    public int getSystemId() {
113a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood        return this.mSystemId;
114a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood    }
115a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood
116a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood    /**
117a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood     * @return cdma network identification number, -1 if unknown
118a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood     */
119a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood    public int getNetworkId() {
120a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood        return this.mNetworkId;
121a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood    }
122a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood
123a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood    /**
124d393184ac595ab5490c77305a27fd049badf9a5dNaveen Kalla     * Invalidate this object.  The cell location data is set to invalid values.
12504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     */
12604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public void setStateInvalid() {
12704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        this.mBaseStationId = -1;
1289384b145e625b3bb6ff8b829ddb1466e16a78f49Mark Vandevoorde        this.mBaseStationLatitude = INVALID_LAT_LONG;
1299384b145e625b3bb6ff8b829ddb1466e16a78f49Mark Vandevoorde        this.mBaseStationLongitude = INVALID_LAT_LONG;
130a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood        this.mSystemId = -1;
131a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood        this.mNetworkId = -1;
13204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
13304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
13404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    /**
13504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * Set the cell location data.
13604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     */
13704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     public void setCellLocationData(int baseStationId, int baseStationLatitude,
13804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville         int baseStationLongitude) {
13904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville         // The following values have to be written in the correct sequence
14004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville         this.mBaseStationId = baseStationId;
14104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville         this.mBaseStationLatitude = baseStationLatitude;   //values[2];
14204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville         this.mBaseStationLongitude = baseStationLongitude; //values[3];
14304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
14404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
145a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood    /**
146a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood     * Set the cell location data.
147a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood     */
148a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood     public void setCellLocationData(int baseStationId, int baseStationLatitude,
149a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood         int baseStationLongitude, int systemId, int networkId) {
150a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood         // The following values have to be written in the correct sequence
151a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood         this.mBaseStationId = baseStationId;
152a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood         this.mBaseStationLatitude = baseStationLatitude;   //values[2];
153a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood         this.mBaseStationLongitude = baseStationLongitude; //values[3];
154a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood         this.mSystemId = systemId;
155a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood         this.mNetworkId = networkId;
156a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood    }
157a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood
15804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    @Override
15904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public int hashCode() {
160a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood        return this.mBaseStationId ^ this.mBaseStationLatitude ^ this.mBaseStationLongitude
161a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood                ^ this.mSystemId ^ this.mNetworkId;
16204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
16304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
16404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    @Override
16504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public boolean equals(Object o) {
16604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        CdmaCellLocation s;
16704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
16804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        try {
16904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            s = (CdmaCellLocation)o;
17004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        } catch (ClassCastException ex) {
17104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            return false;
17204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        }
17304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
17404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        if (o == null) {
17504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            return false;
17604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        }
17704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
17804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        return (equalsHandlesNulls(this.mBaseStationId, s.mBaseStationId) &&
17904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                equalsHandlesNulls(this.mBaseStationLatitude, s.mBaseStationLatitude) &&
180a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood                equalsHandlesNulls(this.mBaseStationLongitude, s.mBaseStationLongitude) &&
181a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood                equalsHandlesNulls(this.mSystemId, s.mSystemId) &&
182a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood                equalsHandlesNulls(this.mNetworkId, s.mNetworkId)
18304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        );
18404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
18504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
18604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    @Override
18704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public String toString() {
18804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        return "[" + this.mBaseStationId + ","
18904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                   + this.mBaseStationLatitude + ","
190a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood                   + this.mBaseStationLongitude + ","
191a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood                   + this.mSystemId + ","
192a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood                   + this.mNetworkId + "]";
19304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
19404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
19504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    /**
19604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * Test whether two objects hold the same data values or both are null
19704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     *
19804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * @param a first obj
19904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * @param b second obj
20004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * @return true if two objects equal or both are null
20104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     */
20204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    private static boolean equalsHandlesNulls(Object a, Object b) {
20304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        return (a == null) ? (b == null) : a.equals (b);
20404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
20504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
20604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    /**
20704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * Fill the cell location data into the intent notifier Bundle based on service state
20804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     *
20904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * @param bundleToFill intent notifier Bundle
21004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     */
21104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public void fillInNotifierBundle(Bundle bundleToFill) {
21204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        bundleToFill.putInt("baseStationId", this.mBaseStationId);
21304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        bundleToFill.putInt("baseStationLatitude", this.mBaseStationLatitude);
21404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        bundleToFill.putInt("baseStationLongitude", this.mBaseStationLongitude);
215a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood        bundleToFill.putInt("systemId", this.mSystemId);
216a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood        bundleToFill.putInt("networkId", this.mNetworkId);
21704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
21804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
21941a46718b3deec95661e149b3acea2a9e54016beJohn Wang    /**
22041a46718b3deec95661e149b3acea2a9e54016beJohn Wang     * @hide
22141a46718b3deec95661e149b3acea2a9e54016beJohn Wang     */
22241a46718b3deec95661e149b3acea2a9e54016beJohn Wang    public boolean isEmpty() {
22341a46718b3deec95661e149b3acea2a9e54016beJohn Wang        return (this.mBaseStationId == -1 &&
22441a46718b3deec95661e149b3acea2a9e54016beJohn Wang                this.mBaseStationLatitude == INVALID_LAT_LONG &&
22541a46718b3deec95661e149b3acea2a9e54016beJohn Wang                this.mBaseStationLongitude == INVALID_LAT_LONG &&
22641a46718b3deec95661e149b3acea2a9e54016beJohn Wang                this.mSystemId == -1 &&
22741a46718b3deec95661e149b3acea2a9e54016beJohn Wang                this.mNetworkId == -1);
22841a46718b3deec95661e149b3acea2a9e54016beJohn Wang    }
22941a46718b3deec95661e149b3acea2a9e54016beJohn Wang
23067662767d98c42c34519767956aebe9d90f31c3aSean Barbeau    /**
23167662767d98c42c34519767956aebe9d90f31c3aSean Barbeau     * Converts latitude or longitude from 0.25 seconds (as defined in the
23267662767d98c42c34519767956aebe9d90f31c3aSean Barbeau     * 3GPP2 C.S0005-A v6.0 standard) to decimal degrees
23367662767d98c42c34519767956aebe9d90f31c3aSean Barbeau     *
23467662767d98c42c34519767956aebe9d90f31c3aSean Barbeau     * @param quartSec latitude or longitude in 0.25 seconds units
23567662767d98c42c34519767956aebe9d90f31c3aSean Barbeau     * @return latitude or longitude in decimal degrees units
23667662767d98c42c34519767956aebe9d90f31c3aSean Barbeau     * @throws IllegalArgumentException if value is less than -2592000,
23767662767d98c42c34519767956aebe9d90f31c3aSean Barbeau     *                                  greater than 2592000, or is not a number.
23867662767d98c42c34519767956aebe9d90f31c3aSean Barbeau     */
23967662767d98c42c34519767956aebe9d90f31c3aSean Barbeau    public static double convertQuartSecToDecDegrees(int quartSec) {
24067662767d98c42c34519767956aebe9d90f31c3aSean Barbeau        if(Double.isNaN(quartSec) || quartSec < -2592000 || quartSec > 2592000){
24167662767d98c42c34519767956aebe9d90f31c3aSean Barbeau            // Invalid value
24267662767d98c42c34519767956aebe9d90f31c3aSean Barbeau            throw new IllegalArgumentException("Invalid coordiante value:" + quartSec);
24367662767d98c42c34519767956aebe9d90f31c3aSean Barbeau        }
24467662767d98c42c34519767956aebe9d90f31c3aSean Barbeau        return ((double)quartSec) / (3600 * 4);
24567662767d98c42c34519767956aebe9d90f31c3aSean Barbeau    }
24641a46718b3deec95661e149b3acea2a9e54016beJohn Wang
24704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville}
24804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
24904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
250