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

Commit 401e7cf4 authored by Tomasz Wasilczyk's avatar Tomasz Wasilczyk
Browse files

Fix getHalVersion overriding UNSUPPORTED version

Setting up mock modem wipes out UNSUPPORTED setting (in case device
is e.g. data-only, so doesn't have IRadioVoice). After restoring
non-mock modem, the setting stays UNKNOWN and never gets restored.
This breaks some CtsTelephonyTestCases tests ran after
TelephonyManagerTestOnMockModem.

This gets fixed by additional isRadioServiceSupported check in
getRadioServiceProxy, but while I was debugging this issue, I also
noticed mHalVersion hits incorrect intermediary steps, e.g.
UNSUPPORTED -> 1_6 -> 1_5 -> 1_4 -> "IRadio <1.4 is no longer
supported." error -> UNKNOWN. I fixed these by checking both upper
and lower bounds of HalVersion (added `between` method).

At last, I extended HalVersion toString with human-readable magic
versions UNSUPPORTED and UNKNOWN.

Bug: 353979854
Test: atest CtsTelephonyTestCases
Flag: EXEMPT bugfix
Change-Id: I7b49dc1cb677acf386d941cb3533ad1ec5c2ff1b
parent 42e2819d
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -95,8 +95,17 @@ public class HalVersion implements Comparable<HalVersion> {
        return less(ver) || equals(ver);
    }

    /**
     * @return True if the version is between (excluding the two provided versions)
     */
    public boolean between(HalVersion greaterThan, HalVersion lessThan) {
        return greater(greaterThan) && less(lessThan);
    }

    @Override
    public String toString() {
        if (equals(UNSUPPORTED)) return "UNSUPPORTED";
        if (equals(UNKNOWN)) return "UNKNOWN";
        return major + "." + minor;
    }
}
+22 −14
Original line number Diff line number Diff line
@@ -949,8 +949,8 @@ public class RIL extends BaseCommands implements CommandsInterface {
                        break;
                }

                if (serviceProxy.isEmpty()
                        && mHalVersion.get(service).less(RADIO_HAL_VERSION_2_0)) {
                if (serviceProxy.isEmpty() && mHalVersion.get(service).between(
                        RADIO_HAL_VERSION_UNSUPPORTED, RADIO_HAL_VERSION_2_0)) {
                    try {
                        mHalVersion.put(service, RADIO_HAL_VERSION_1_6);
                        serviceProxy.setHidl(mHalVersion.get(service),
@@ -960,8 +960,8 @@ public class RIL extends BaseCommands implements CommandsInterface {
                    }
                }

                if (serviceProxy.isEmpty()
                        && mHalVersion.get(service).less(RADIO_HAL_VERSION_2_0)) {
                if (serviceProxy.isEmpty() && mHalVersion.get(service).between(
                        RADIO_HAL_VERSION_UNSUPPORTED, RADIO_HAL_VERSION_2_0)) {
                    try {
                        mHalVersion.put(service, RADIO_HAL_VERSION_1_5);
                        serviceProxy.setHidl(mHalVersion.get(service),
@@ -971,8 +971,8 @@ public class RIL extends BaseCommands implements CommandsInterface {
                    }
                }

                if (serviceProxy.isEmpty()
                        && mHalVersion.get(service).less(RADIO_HAL_VERSION_2_0)) {
                if (serviceProxy.isEmpty() && mHalVersion.get(service).between(
                        RADIO_HAL_VERSION_UNSUPPORTED, RADIO_HAL_VERSION_2_0)) {
                    try {
                        mHalVersion.put(service, RADIO_HAL_VERSION_1_4);
                        serviceProxy.setHidl(mHalVersion.get(service),
@@ -982,8 +982,8 @@ public class RIL extends BaseCommands implements CommandsInterface {
                    }
                }

                if (serviceProxy.isEmpty()
                        && mHalVersion.get(service).less(RADIO_HAL_VERSION_2_0)) {
                if (serviceProxy.isEmpty() && mHalVersion.get(service).between(
                            RADIO_HAL_VERSION_UNKNOWN, RADIO_HAL_VERSION_2_0)) {
                    riljLoge("IRadio <1.4 is no longer supported.");
                }

@@ -1047,10 +1047,16 @@ public class RIL extends BaseCommands implements CommandsInterface {
                    }
                } else {
                    mDisabledRadioServices.get(service).add(mPhoneId);
                    if (isRadioServiceSupported(service)) {
                        mHalVersion.put(service, RADIO_HAL_VERSION_UNKNOWN);
                        riljLoge("getRadioServiceProxy: set " + serviceToString(service) + " for "
                                + HIDL_SERVICE_NAME[mPhoneId] + " as disabled\n"
                                + android.util.Log.getStackTraceString(new RuntimeException()));
                    } else {
                        mHalVersion.put(service, RADIO_HAL_VERSION_UNSUPPORTED);
                        riljLog("getRadioServiceProxy: set " + serviceToString(service) + " for "
                                + HIDL_SERVICE_NAME[mPhoneId] + " as disabled (unsupported)");
                    }
                }
            }
        } catch (RemoteException e) {
@@ -1611,7 +1617,8 @@ public class RIL extends BaseCommands implements CommandsInterface {
    @Override
    public void supplySimDepersonalization(PersoSubState persoType, String controlKey,
            Message result) {
        if (mHalVersion.get(HAL_SERVICE_SIM).less(RADIO_HAL_VERSION_1_5)
        if (mHalVersion.get(HAL_SERVICE_SIM).between(
                    RADIO_HAL_VERSION_UNKNOWN, RADIO_HAL_VERSION_1_5)
                && PersoSubState.PERSOSUBSTATE_SIM_NETWORK == persoType) {
            supplyNetworkDepersonalization(controlKey, result);
            return;
@@ -3012,7 +3019,8 @@ public class RIL extends BaseCommands implements CommandsInterface {
    @Override
    public void setAllowedNetworkTypesBitmap(
            @TelephonyManager.NetworkTypeBitMask int networkTypeBitmask, Message result) {
        if (mHalVersion.get(HAL_SERVICE_NETWORK).less(RADIO_HAL_VERSION_1_6)) {
        if (mHalVersion.get(HAL_SERVICE_NETWORK).between(
                RADIO_HAL_VERSION_UNKNOWN, RADIO_HAL_VERSION_1_6)) {
            // For older HAL, redirects the call to setPreferredNetworkType.
            setPreferredNetworkType(
                    RadioAccessFamily.getNetworkTypeFromRaf(networkTypeBitmask), result);