/*
 * Copyright (C) 2006 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.telephony.cdma;

import android.os.Bundle;
import android.telephony.CellLocation;

Represents the cell location on a CDMA phone.
/** * Represents the cell location on a CDMA phone. */
public class CdmaCellLocation extends CellLocation { private int mBaseStationId = -1;
@hide
/** * @hide */
public final static int INVALID_LAT_LONG = Integer.MAX_VALUE;
Latitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0. It is represented in units of 0.25 seconds and ranges from -1296000 to 1296000, both values inclusive (corresponding to a range of -90 to +90 degrees). Integer.MAX_VALUE is considered invalid value.
/** * Latitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0. * It is represented in units of 0.25 seconds and ranges from -1296000 * to 1296000, both values inclusive (corresponding to a range of -90 * to +90 degrees). Integer.MAX_VALUE is considered invalid value. */
private int mBaseStationLatitude = INVALID_LAT_LONG;
Longitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0. It is represented in units of 0.25 seconds and ranges from -2592000 to 2592000, both values inclusive (corresponding to a range of -180 to +180 degrees). Integer.MAX_VALUE is considered invalid value.
/** * Longitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0. * It is represented in units of 0.25 seconds and ranges from -2592000 * to 2592000, both values inclusive (corresponding to a range of -180 * to +180 degrees). Integer.MAX_VALUE is considered invalid value. */
private int mBaseStationLongitude = INVALID_LAT_LONG; private int mSystemId = -1; private int mNetworkId = -1;
Empty constructor. Initializes the BID, SID, NID and base station latitude and longitude to invalid values.
/** * Empty constructor. * Initializes the BID, SID, NID and base station latitude and longitude * to invalid values. */
public CdmaCellLocation() { this.mBaseStationId = -1; this.mBaseStationLatitude = INVALID_LAT_LONG; this.mBaseStationLongitude = INVALID_LAT_LONG; this.mSystemId = -1; this.mNetworkId = -1; }
Initialize the object from a bundle.
/** * Initialize the object from a bundle. */
public CdmaCellLocation(Bundle bundle) { this.mBaseStationId = bundle.getInt("baseStationId", mBaseStationId); this.mBaseStationLatitude = bundle.getInt("baseStationLatitude", mBaseStationLatitude); this.mBaseStationLongitude = bundle.getInt("baseStationLongitude", mBaseStationLongitude); this.mSystemId = bundle.getInt("systemId", mSystemId); this.mNetworkId = bundle.getInt("networkId", mNetworkId); }
Returns:cdma base station identification number, -1 if unknown
/** * @return cdma base station identification number, -1 if unknown */
public int getBaseStationId() { return this.mBaseStationId; }
Latitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0. (http://www.3gpp2.org/public_html/specs/C.S0005-A_v6.0.pdf) It is represented in units of 0.25 seconds and ranges from -1296000 to 1296000, both values inclusive (corresponding to a range of -90 to +90 degrees). Integer.MAX_VALUE is considered invalid value.
Returns:cdma base station latitude in units of 0.25 seconds, Integer.MAX_VALUE if unknown
/** * Latitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0. * (http://www.3gpp2.org/public_html/specs/C.S0005-A_v6.0.pdf) * It is represented in units of 0.25 seconds and ranges from -1296000 * to 1296000, both values inclusive (corresponding to a range of -90 * to +90 degrees). Integer.MAX_VALUE is considered invalid value. * * @return cdma base station latitude in units of 0.25 seconds, Integer.MAX_VALUE if unknown */
public int getBaseStationLatitude() { return this.mBaseStationLatitude; }
Longitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0. (http://www.3gpp2.org/public_html/specs/C.S0005-A_v6.0.pdf) It is represented in units of 0.25 seconds and ranges from -2592000 to 2592000, both values inclusive (corresponding to a range of -180 to +180 degrees). Integer.MAX_VALUE is considered invalid value.
Returns:cdma base station longitude in units of 0.25 seconds, Integer.MAX_VALUE if unknown
/** * Longitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0. * (http://www.3gpp2.org/public_html/specs/C.S0005-A_v6.0.pdf) * It is represented in units of 0.25 seconds and ranges from -2592000 * to 2592000, both values inclusive (corresponding to a range of -180 * to +180 degrees). Integer.MAX_VALUE is considered invalid value. * * @return cdma base station longitude in units of 0.25 seconds, Integer.MAX_VALUE if unknown */
public int getBaseStationLongitude() { return this.mBaseStationLongitude; }
Returns:cdma system identification number, -1 if unknown
/** * @return cdma system identification number, -1 if unknown */
public int getSystemId() { return this.mSystemId; }
Returns:cdma network identification number, -1 if unknown
/** * @return cdma network identification number, -1 if unknown */
public int getNetworkId() { return this.mNetworkId; }
Invalidate this object. The cell location data is set to invalid values.
/** * Invalidate this object. The cell location data is set to invalid values. */
@Override public void setStateInvalid() { this.mBaseStationId = -1; this.mBaseStationLatitude = INVALID_LAT_LONG; this.mBaseStationLongitude = INVALID_LAT_LONG; this.mSystemId = -1; this.mNetworkId = -1; }
Set the cell location data.
/** * Set the cell location data. */
public void setCellLocationData(int baseStationId, int baseStationLatitude, int baseStationLongitude) { // The following values have to be written in the correct sequence this.mBaseStationId = baseStationId; this.mBaseStationLatitude = baseStationLatitude; //values[2]; this.mBaseStationLongitude = baseStationLongitude; //values[3]; }
Set the cell location data.
/** * Set the cell location data. */
public void setCellLocationData(int baseStationId, int baseStationLatitude, int baseStationLongitude, int systemId, int networkId) { // The following values have to be written in the correct sequence this.mBaseStationId = baseStationId; this.mBaseStationLatitude = baseStationLatitude; //values[2]; this.mBaseStationLongitude = baseStationLongitude; //values[3]; this.mSystemId = systemId; this.mNetworkId = networkId; } @Override public int hashCode() { return this.mBaseStationId ^ this.mBaseStationLatitude ^ this.mBaseStationLongitude ^ this.mSystemId ^ this.mNetworkId; } @Override public boolean equals(Object o) { CdmaCellLocation s; try { s = (CdmaCellLocation)o; } catch (ClassCastException ex) { return false; } if (o == null) { return false; } return (equalsHandlesNulls(this.mBaseStationId, s.mBaseStationId) && equalsHandlesNulls(this.mBaseStationLatitude, s.mBaseStationLatitude) && equalsHandlesNulls(this.mBaseStationLongitude, s.mBaseStationLongitude) && equalsHandlesNulls(this.mSystemId, s.mSystemId) && equalsHandlesNulls(this.mNetworkId, s.mNetworkId) ); } @Override public String toString() { return "[" + this.mBaseStationId + "," + this.mBaseStationLatitude + "," + this.mBaseStationLongitude + "," + this.mSystemId + "," + this.mNetworkId + "]"; }
Test whether two objects hold the same data values or both are null
Params:
  • a – first obj
  • b – second obj
Returns:true if two objects equal or both are null
/** * Test whether two objects hold the same data values or both are null * * @param a first obj * @param b second obj * @return true if two objects equal or both are null */
private static boolean equalsHandlesNulls(Object a, Object b) { return (a == null) ? (b == null) : a.equals (b); }
Fill the cell location data into the intent notifier Bundle based on service state
Params:
  • bundleToFill – intent notifier Bundle
/** * Fill the cell location data into the intent notifier Bundle based on service state * * @param bundleToFill intent notifier Bundle */
public void fillInNotifierBundle(Bundle bundleToFill) { bundleToFill.putInt("baseStationId", this.mBaseStationId); bundleToFill.putInt("baseStationLatitude", this.mBaseStationLatitude); bundleToFill.putInt("baseStationLongitude", this.mBaseStationLongitude); bundleToFill.putInt("systemId", this.mSystemId); bundleToFill.putInt("networkId", this.mNetworkId); }
@hide
/** * @hide */
public boolean isEmpty() { return (this.mBaseStationId == -1 && this.mBaseStationLatitude == INVALID_LAT_LONG && this.mBaseStationLongitude == INVALID_LAT_LONG && this.mSystemId == -1 && this.mNetworkId == -1); }
Converts latitude or longitude from 0.25 seconds (as defined in the 3GPP2 C.S0005-A v6.0 standard) to decimal degrees
Params:
  • quartSec – latitude or longitude in 0.25 seconds units
Throws:
Returns:latitude or longitude in decimal degrees units
/** * Converts latitude or longitude from 0.25 seconds (as defined in the * 3GPP2 C.S0005-A v6.0 standard) to decimal degrees * * @param quartSec latitude or longitude in 0.25 seconds units * @return latitude or longitude in decimal degrees units * @throws IllegalArgumentException if value is less than -2592000, * greater than 2592000, or is not a number. */
public static double convertQuartSecToDecDegrees(int quartSec) { if(Double.isNaN(quartSec) || quartSec < -2592000 || quartSec > 2592000){ // Invalid value throw new IllegalArgumentException("Invalid coordiante value:" + quartSec); } return ((double)quartSec) / (3600 * 4); } }