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

Commit 7d97ff10 authored by Wink Saville's avatar Wink Saville
Browse files

Always assume evdoXxxx signal strength values are correct.

This solves a race condition between the network type changing and
a signal strength changing. This could cause StatusBarPolicy to see
the -1 values for the evdo strength parameters and hence 0 bars would
be displayed.

Bug: 2419251
Change-Id: Iba0bdbd2023b6a5e49fc1f82c997ec3219158286
parent 19bc31c3
Loading
Loading
Loading
Loading
+10 −19
Original line number Original line Diff line number Diff line
@@ -1170,34 +1170,25 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
        } else {
        } else {
            int[] ints = (int[])ar.result;
            int[] ints = (int[])ar.result;
            int offset = 2;
            int offset = 2;

            int cdmaDbm = (ints[offset] > 0) ? -ints[offset] : -120;
            int cdmaDbm = (ints[offset] > 0) ? -ints[offset] : -120;
            int cdmaEcio = (ints[offset+1] > 0) ? -ints[offset+1] : -160;
            int cdmaEcio = (ints[offset+1] > 0) ? -ints[offset+1] : -160;
            int evdoRssi = (ints[offset+2] > 0) ? -ints[offset+2] : -120;
            int evdoEcio = (ints[offset+3] > 0) ? -ints[offset+3] : -1;
            int evdoSnr  = ((ints[offset+4] > 0) && (ints[offset+4] <= 8)) ? ints[offset+4] : -1;


            int evdoRssi = -1;
            //log(String.format("onSignalStrengthResult cdmaDbm=%d cdmaEcio=%d evdoRssi=%d evdoEcio=%d evdoSnr=%d",
            int evdoEcio = -1;
            //        cdmaDbm, cdmaEcio, evdoRssi, evdoEcio, evdoSnr));
            int evdoSnr = -1;
            if ((networkType == ServiceState.RADIO_TECHNOLOGY_EVDO_0)
                    || (networkType == ServiceState.RADIO_TECHNOLOGY_EVDO_A)) {
                evdoRssi = (ints[offset+2] > 0) ? -ints[offset+2] : -120;
                evdoEcio = (ints[offset+3] > 0) ? -ints[offset+3] : -1;
                evdoSnr  = ((ints[offset+4] > 0) && (ints[offset+4] <= 8)) ? ints[offset+4] : -1;
            }

            mSignalStrength = new SignalStrength(99, -1, cdmaDbm, cdmaEcio,
            mSignalStrength = new SignalStrength(99, -1, cdmaDbm, cdmaEcio,
                    evdoRssi, evdoEcio, evdoSnr, false);
                    evdoRssi, evdoEcio, evdoSnr, false);
        }
        }


        if (!mSignalStrength.equals(oldSignalStrength)) {
        try {
            try { // This takes care of delayed EVENT_POLL_SIGNAL_STRENGTH (scheduled after
                  // POLL_PERIOD_MILLIS) during Radio Technology Change)
            phone.notifySignalStrength();
            phone.notifySignalStrength();
        } catch (NullPointerException ex) {
        } catch (NullPointerException ex) {
            log("onSignalStrengthResult() Phone already destroyed: " + ex
            log("onSignalStrengthResult() Phone already destroyed: " + ex
                    + "SignalStrength not notified");
                    + "SignalStrength not notified");
        }
        }
    }
    }
    }




    private int radioTechnologyToDataServiceState(int code) {
    private int radioTechnologyToDataServiceState(int code) {