Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 076cb23a authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change I13dd02fc into eclair

* changes:
  telephony/cdma: Fix Erroneous Roaming Indicators and Latitude-Longitude parsing
parents b0e6a9a0 d393184a
Loading
Loading
Loading
Loading
+26 −10
Original line number Diff line number Diff line
@@ -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;
    }
+64 −35
Original line number Diff line number Diff line
@@ -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++) {
                if (states.length > 9) {
                    try {
                            if (states[i] != null && states[i].length() > 0) {
                                baseStationData[i] = Integer.parseInt(states[i], 16);
                        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 {
                        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]);
                        baseStationLatitude = Integer.parseInt(states[5], 16);
                        baseStationLongitude = Integer.parseInt(states[6], 16);
                        }
                        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) {
                    } catch (NumberFormatException ex) {
                        Log.w(LOG_TAG, "error parsing RegistrationState: " + ex);
                    }
                } else {