Merge change I13dd02fc into eclair
* changes: telephony/cdma: Fix Erroneous Roaming Indicators and Latitude-Longitude parsing
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 baseStationLatitude = Integer.MAX_VALUE;
|
||||
int baseStationLongitude = Integer.MAX_VALUE;
|
||||
int systemId = -1;
|
||||
int networkId = -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);
|
||||
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 {
|
||||
|
||||
Reference in New Issue
Block a user