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

Commit cd5c46b4 authored by Shinru Han's avatar Shinru Han
Browse files

Correct requestRefLocation

1. Support LTE cell in AGnssRil_V1_0::setRefLocation().

2. Use CellInfo#isRegistered() to get the cells being used
   or to be used as CellInfo#getCellConnectionStatus() doesn't
   work for 2G cells.

Test: Manually on-device.
Bug: b/253091197
Change-Id: I26ea0cb177de98bed56c438cd1452c929c73ad21
parent 3afe48e0
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -1447,7 +1447,9 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
     * @return the cell ID or -1 if invalid
     */
    private static long getCidFromCellIdentity(CellIdentity id) {
        if (id == null) return -1;
        if (id == null) {
            return -1;
        }
        long cid = -1;
        switch(id.getType()) {
            case CellInfo.TYPE_GSM: cid = ((CellIdentityGsm) id).getCid(); break;
@@ -1522,7 +1524,8 @@ public class GnssLocationProvider extends AbstractLocationProvider implements

                for (CellInfo ci : cil) {
                    int status = ci.getCellConnectionStatus();
                    if (status == CellInfo.CONNECTION_PRIMARY_SERVING
                    if (ci.isRegistered()
                            || status == CellInfo.CONNECTION_PRIMARY_SERVING
                            || status == CellInfo.CONNECTION_SECONDARY_SERVING) {
                        CellIdentity c = ci.getCellIdentity();
                        int t = getCellType(ci);
+20 −16
Original line number Diff line number Diff line
@@ -55,13 +55,13 @@ jboolean AGnssRil::setRefLocation(jint type, jint mcc, jint mnc, jint lac, jlong
        case IAGnssRil::AGnssRefLocationType::UMTS_CELLID:
        case IAGnssRil::AGnssRefLocationType::LTE_CELLID:
        case IAGnssRil::AGnssRefLocationType::NR_CELLID:
            location.cellID.mcc = mcc;
            location.cellID.mnc = mnc;
            location.cellID.lac = lac;
            location.cellID.cid = cid;
            location.cellID.tac = tac;
            location.cellID.pcid = pcid;
            location.cellID.arfcn = arfcn;
            location.cellID.mcc = static_cast<int>(mcc);
            location.cellID.mnc = static_cast<int>(mnc);
            location.cellID.lac = static_cast<int>(lac);
            location.cellID.cid = static_cast<long>(cid);
            location.cellID.tac = static_cast<int>(tac);
            location.cellID.pcid = static_cast<int>(pcid);
            location.cellID.arfcn = static_cast<int>(arfcn);
            break;
        default:
            ALOGE("Unknown cellid (%s:%d).", __FUNCTION__, __LINE__);
@@ -106,20 +106,24 @@ jboolean AGnssRil_V1_0::setSetId(jint type, const jstring& setid_string) {
    return checkHidlReturn(result, "IAGnssRil_V1_0 setSetId() failed.");
}

jboolean AGnssRil_V1_0::setRefLocation(jint type, jint mcc, jint mnc, jint lac, jlong cid, jint,
                                       jint, jint) {
jboolean AGnssRil_V1_0::setRefLocation(jint type, jint mcc, jint mnc, jint lac, jlong cid, jint tac,
                                       jint pcid, jint) {
    IAGnssRil_V1_0::AGnssRefLocation location;
    switch (static_cast<IAGnssRil_V1_0::AGnssRefLocationType>(type)) {
    location.type = static_cast<IAGnssRil_V1_0::AGnssRefLocationType>(type);

    switch (location.type) {
        case IAGnssRil_V1_0::AGnssRefLocationType::GSM_CELLID:
        case IAGnssRil_V1_0::AGnssRefLocationType::UMTS_CELLID:
            location.type = static_cast<IAGnssRil_V1_0::AGnssRefLocationType>(type);
            location.cellID.mcc = mcc;
            location.cellID.mnc = mnc;
            location.cellID.lac = lac;
            location.cellID.cid = cid;
        case IAGnssRil_V1_0::AGnssRefLocationType::LTE_CELLID:
            location.cellID.mcc = static_cast<uint16_t>(mcc);
            location.cellID.mnc = static_cast<uint16_t>(mnc);
            location.cellID.lac = static_cast<uint16_t>(lac);
            location.cellID.cid = static_cast<uint32_t>(cid);
            location.cellID.tac = static_cast<uint16_t>(tac);
            location.cellID.pcid = static_cast<uint16_t>(pcid);
            break;
        default:
            ALOGE("Neither a GSM nor a UMTS cellid (%s:%d).", __FUNCTION__, __LINE__);
            ALOGE("Unknown cellid (%s:%d).", __FUNCTION__, __LINE__);
            return JNI_FALSE;
            break;
    }