diff options
| -rw-r--r-- | telephony/java/android/telephony/cdma/CdmaCellLocation.java | 36 | ||||
| -rw-r--r-- | telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java | 99 |
2 files changed, 90 insertions, 45 deletions
diff --git a/telephony/java/android/telephony/cdma/CdmaCellLocation.java b/telephony/java/android/telephony/cdma/CdmaCellLocation.java index 676fba7..7ef7747 100644 --- a/telephony/java/android/telephony/cdma/CdmaCellLocation.java +++ b/telephony/java/android/telephony/cdma/CdmaCellLocation.java @@ -24,19 +24,35 @@ import android.telephony.CellLocation; */ public class CdmaCellLocation extends CellLocation { private int mBaseStationId = -1; - private int mBaseStationLatitude = -1; - private int mBaseStationLongitude = -1; + + /** + * 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 = Integer.MAX_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 = Integer.MAX_VALUE; + private int mSystemId = -1; private int mNetworkId = -1; /** * Empty constructor. - * Initializes the BID, SID, NID and base station latitude and longitude to -1. + * Initializes the BID, SID, NID and base station latitude and longitude + * to invalid values. */ public CdmaCellLocation() { this.mBaseStationId = -1; - this.mBaseStationLatitude = -1; - this.mBaseStationLongitude = -1; + this.mBaseStationLatitude = Integer.MAX_VALUE; + this.mBaseStationLongitude = Integer.MAX_VALUE; this.mSystemId = -1; this.mNetworkId = -1; } @@ -60,14 +76,14 @@ public class CdmaCellLocation extends CellLocation { } /** - * @return cdma base station latitude, -1 if unknown + * @return cdma base station latitude, Integer.MAX_VALUE if unknown */ public int getBaseStationLatitude() { return this.mBaseStationLatitude; } /** - * @return cdma base station longitude, -1 if unknown + * @return cdma base station longitude, Integer.MAX_VALUE if unknown */ public int getBaseStationLongitude() { return this.mBaseStationLongitude; @@ -88,12 +104,12 @@ public class CdmaCellLocation extends CellLocation { } /** - * Invalidate this object. The cell location data is set to -1. + * Invalidate this object. The cell location data is set to invalid values. */ public void setStateInvalid() { this.mBaseStationId = -1; - this.mBaseStationLatitude = -1; - this.mBaseStationLongitude = -1; + this.mBaseStationLatitude = Integer.MAX_VALUE; + this.mBaseStationLongitude = Integer.MAX_VALUE; this.mSystemId = -1; this.mNetworkId = -1; } diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java index ec30f5a..03acf5c 100644 --- a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java +++ b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java @@ -350,29 +350,35 @@ final class CdmaServiceStateTracker extends ServiceStateTracker { if (ar.exception == null) { String states[] = (String[])ar.result; int baseStationId = -1; - int baseStationLongitude = -1; - int baseStationLatitude = -1; - - int baseStationData[] = { - -1, // baseStationId - -1, // baseStationLatitude - -1 // baseStationLongitude - }; - - if (states.length == 3) { - for(int i = 0; i < states.length; i++) { - try { - if (states[i] != null && states[i].length() > 0) { - baseStationData[i] = Integer.parseInt(states[i], 16); - } - } catch (NumberFormatException ex) { - Log.w(LOG_TAG, "error parsing cell location data: " + ex); + int baseStationLatitude = Integer.MAX_VALUE; + int baseStationLongitude = Integer.MAX_VALUE; + int systemId = -1; + int networkId = -1; + + if (states.length > 9) { + try { + if (states[4] != null) { + baseStationId = Integer.parseInt(states[4]); + } + if (states[5] != null) { + baseStationLatitude = Integer.parseInt(states[5]); + } + if (states[6] != null) { + baseStationLongitude = Integer.parseInt(states[6]); + } + if (states[8] != null) { + systemId = Integer.parseInt(states[8]); } + if (states[9] != null) { + networkId = Integer.parseInt(states[9]); + } + } catch (NumberFormatException ex) { + Log.w(LOG_TAG, "error parsing cell location data: " + ex); } } - cellLoc.setCellLocationData(baseStationData[0], - baseStationData[1], baseStationData[2]); + cellLoc.setCellLocationData(baseStationId, baseStationLatitude, + baseStationLongitude, systemId, networkId); phone.notifyLocationChanged(); } @@ -640,8 +646,8 @@ final class CdmaServiceStateTracker extends ServiceStateTracker { int registrationState = 4; //[0] registrationState int radioTechnology = -1; //[3] radioTechnology int baseStationId = -1; //[4] baseStationId - int baseStationLatitude = -1; //[5] baseStationLatitude - int baseStationLongitude = -1; //[6] baseStationLongitude + int baseStationLatitude = Integer.MAX_VALUE; //[5] baseStationLatitude + int baseStationLongitude = Integer.MAX_VALUE; //[6] baseStationLongitude int cssIndicator = 0; //[7] init with 0, because it is treated as a boolean int systemId = 0; //[8] systemId int networkId = 0; //[9] networkId @@ -652,20 +658,43 @@ final class CdmaServiceStateTracker extends ServiceStateTracker { if (states.length == 14) { try { - registrationState = Integer.parseInt(states[0]); - radioTechnology = Integer.parseInt(states[3]); - baseStationId = Integer.parseInt(states[4]); - baseStationLatitude = Integer.parseInt(states[5], 16); - baseStationLongitude = Integer.parseInt(states[6], 16); - cssIndicator = Integer.parseInt(states[7]); - systemId = Integer.parseInt(states[8]); - networkId = Integer.parseInt(states[9]); - roamingIndicator = Integer.parseInt(states[10]); - systemIsInPrl = Integer.parseInt(states[11]); - defaultRoamingIndicator = Integer.parseInt(states[12]); - reasonForDenial = Integer.parseInt(states[13]); - } - catch(NumberFormatException ex) { + if (states[0] != null) { + registrationState = Integer.parseInt(states[0]); + } + if (states[3] != null) { + radioTechnology = Integer.parseInt(states[3]); + } + if (states[4] != null) { + baseStationId = Integer.parseInt(states[4]); + } + if (states[5] != null) { + baseStationLatitude = Integer.parseInt(states[5]); + } + if (states[6] != null) { + baseStationLongitude = Integer.parseInt(states[6]); + } + if (states[7] != null) { + cssIndicator = Integer.parseInt(states[7]); + } + if (states[8] != null) { + systemId = Integer.parseInt(states[8]); + } + if (states[9] != null) { + networkId = Integer.parseInt(states[9]); + } + if (states[10] != null) { + roamingIndicator = Integer.parseInt(states[10]); + } + if (states[11] != null) { + systemIsInPrl = Integer.parseInt(states[11]); + } + if (states[12] != null) { + defaultRoamingIndicator = Integer.parseInt(states[12]); + } + if (states[13] != null) { + reasonForDenial = Integer.parseInt(states[13]); + } + } catch (NumberFormatException ex) { Log.w(LOG_TAG, "error parsing RegistrationState: " + ex); } } else { |
