CdmaCellLocation.java revision 1b90def3c683afaea528a0ee705b14df6ce2e2c7
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;
2704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    private int mBaseStationLatitude = -1;
2804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    private int mBaseStationLongitude = -1;
29a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood    private int mSystemId = -1;
30a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood    private int mNetworkId = -1;
3104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
3204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    /**
331b90def3c683afaea528a0ee705b14df6ce2e2c7Mike Lockwood     * Empty constructor.
341b90def3c683afaea528a0ee705b14df6ce2e2c7Mike Lockwood     * Initializes the BID, SID, NID and base station latitude and longitude to -1.
3504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     */
3604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public CdmaCellLocation() {
3704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        this.mBaseStationId = -1;
3804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        this.mBaseStationLatitude = -1;
3904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        this.mBaseStationLongitude = -1;
40a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood        this.mSystemId = -1;
41a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood        this.mNetworkId = -1;
4204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
4304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
4404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    /**
4504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * Initialize the object from a bundle.
4604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     */
4704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public CdmaCellLocation(Bundle bundleWithValues) {
4804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        this.mBaseStationId = bundleWithValues.getInt("baseStationId");
4904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        this.mBaseStationLatitude = bundleWithValues.getInt("baseStationLatitude");
5004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        this.mBaseStationLongitude = bundleWithValues.getInt("baseStationLongitude");
51a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood        this.mSystemId = bundleWithValues.getInt("systemId");
52a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood        this.mNetworkId = bundleWithValues.getInt("networkId");
5304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
5404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
5504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    /**
5604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * @return cdma base station identification number, -1 if unknown
5704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     */
5804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public int getBaseStationId() {
5904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        return this.mBaseStationId;
6004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
6104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
6204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    /**
6304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * @return cdma base station latitude, -1 if unknown
6404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     */
6504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public int getBaseStationLatitude() {
6604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        return this.mBaseStationLatitude;
6704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
6804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
6904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    /**
7004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * @return cdma base station longitude, -1 if unknown
7104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     */
7204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public int getBaseStationLongitude() {
7304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        return this.mBaseStationLongitude;
7404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
7504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
7604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    /**
77a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood     * @return cdma system identification number, -1 if unknown
78a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood     */
79a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood    public int getSystemId() {
80a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood        return this.mSystemId;
81a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood    }
82a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood
83a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood    /**
84a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood     * @return cdma network identification number, -1 if unknown
85a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood     */
86a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood    public int getNetworkId() {
87a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood        return this.mNetworkId;
88a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood    }
89a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood
90a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood    /**
9104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * Invalidate this object.  The cell location data is set to -1.
9204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     */
9304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public void setStateInvalid() {
9404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        this.mBaseStationId = -1;
9504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        this.mBaseStationLatitude = -1;
9604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        this.mBaseStationLongitude = -1;
97a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood        this.mSystemId = -1;
98a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood        this.mNetworkId = -1;
9904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
10004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
10104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    /**
10204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * Set the cell location data.
10304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     */
10404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     public void setCellLocationData(int baseStationId, int baseStationLatitude,
10504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville         int baseStationLongitude) {
10604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville         // The following values have to be written in the correct sequence
10704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville         this.mBaseStationId = baseStationId;
10804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville         this.mBaseStationLatitude = baseStationLatitude;   //values[2];
10904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville         this.mBaseStationLongitude = baseStationLongitude; //values[3];
11004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
11104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
112a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood    /**
113a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood     * Set the cell location data.
114a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood     */
115a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood     public void setCellLocationData(int baseStationId, int baseStationLatitude,
116a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood         int baseStationLongitude, int systemId, int networkId) {
117a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood         // The following values have to be written in the correct sequence
118a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood         this.mBaseStationId = baseStationId;
119a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood         this.mBaseStationLatitude = baseStationLatitude;   //values[2];
120a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood         this.mBaseStationLongitude = baseStationLongitude; //values[3];
121a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood         this.mSystemId = systemId;
122a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood         this.mNetworkId = networkId;
123a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood    }
124a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood
12504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    @Override
12604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public int hashCode() {
127a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood        return this.mBaseStationId ^ this.mBaseStationLatitude ^ this.mBaseStationLongitude
128a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood                ^ this.mSystemId ^ this.mNetworkId;
12904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
13004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
13104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    @Override
13204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public boolean equals(Object o) {
13304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        CdmaCellLocation s;
13404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
13504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        try {
13604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            s = (CdmaCellLocation)o;
13704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        } catch (ClassCastException ex) {
13804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            return false;
13904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        }
14004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
14104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        if (o == null) {
14204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville            return false;
14304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        }
14404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
14504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        return (equalsHandlesNulls(this.mBaseStationId, s.mBaseStationId) &&
14604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                equalsHandlesNulls(this.mBaseStationLatitude, s.mBaseStationLatitude) &&
147a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood                equalsHandlesNulls(this.mBaseStationLongitude, s.mBaseStationLongitude) &&
148a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood                equalsHandlesNulls(this.mSystemId, s.mSystemId) &&
149a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood                equalsHandlesNulls(this.mNetworkId, s.mNetworkId)
15004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        );
15104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
15204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
15304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    @Override
15404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public String toString() {
15504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        return "[" + this.mBaseStationId + ","
15604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville                   + this.mBaseStationLatitude + ","
157a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood                   + this.mBaseStationLongitude + ","
158a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood                   + this.mSystemId + ","
159a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood                   + this.mNetworkId + "]";
16004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
16104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
16204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    /**
16304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * Test whether two objects hold the same data values or both are null
16404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     *
16504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * @param a first obj
16604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * @param b second obj
16704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * @return true if two objects equal or both are null
16804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     */
16904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    private static boolean equalsHandlesNulls(Object a, Object b) {
17004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        return (a == null) ? (b == null) : a.equals (b);
17104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
17204e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
17304e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    /**
17404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * Fill the cell location data into the intent notifier Bundle based on service state
17504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     *
17604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     * @param bundleToFill intent notifier Bundle
17704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     */
17804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    public void fillInNotifierBundle(Bundle bundleToFill) {
17904e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        bundleToFill.putInt("baseStationId", this.mBaseStationId);
18004e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        bundleToFill.putInt("baseStationLatitude", this.mBaseStationLatitude);
18104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville        bundleToFill.putInt("baseStationLongitude", this.mBaseStationLongitude);
182a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood        bundleToFill.putInt("systemId", this.mSystemId);
183a4d2fb5ef6bb5dfb6e26ac6a139de389984db5d3Mike Lockwood        bundleToFill.putInt("networkId", this.mNetworkId);
18404e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    }
18504e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
18604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville}
18704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
18804e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville
189