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

Commit 0cd7ef0e authored by Sooraj Sasindran's avatar Sooraj Sasindran Committed by Gerrit Code Review
Browse files

Merge "Enhance network scan request"

parents c2496e85 ffac118f
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -29,6 +29,7 @@ LOCAL_JAVA_LIBRARIES := voip-common ims-common services
LOCAL_STATIC_JAVA_LIBRARIES := \
LOCAL_STATIC_JAVA_LIBRARIES := \
    android.hardware.radio-V1.0-java \
    android.hardware.radio-V1.0-java \
    android.hardware.radio-V1.1-java \
    android.hardware.radio-V1.1-java \
    android.hardware.radio-V1.2-java \
    android.hardware.radio.deprecated-V1.0-java \
    android.hardware.radio.deprecated-V1.0-java \
    android.hidl.base-V1.0-java
    android.hidl.base-V1.0-java


+28 −0
Original line number Original line Diff line number Diff line
@@ -125,6 +125,34 @@ public final class NetworkScanRequestTracker {
                return false;
                return false;
            }
            }
        }
        }

        if ((nsri.mRequest.searchPeriodicity < NetworkScanRequest.MIN_SEARCH_PERIODICITY_SEC)
                || (nsri.mRequest.searchPeriodicity
                > NetworkScanRequest.MAX_SEARCH_PERIODICITY_SEC)) {
            return false;
        }

        if ((nsri.mRequest.maxSearchTime < NetworkScanRequest.MIN_SEARCH_MAX_SEC)
                || (nsri.mRequest.maxSearchTime > NetworkScanRequest.MAX_SEARCH_MAX_SEC)) {
            return false;
        }

        if ((nsri.mRequest.incrementalResultsPeriodicity
                < NetworkScanRequest.MIN_INCREMENTAL_PERIODICITY_SEC)
                || (nsri.mRequest.incrementalResultsPeriodicity
                > NetworkScanRequest.MAX_INCREMENTAL_PERIODICITY_SEC)) {
            return false;
        }

        if ((nsri.mRequest.searchPeriodicity > nsri.mRequest.maxSearchTime)
                || (nsri.mRequest.incrementalResultsPeriodicity > nsri.mRequest.maxSearchTime)) {
            return false;
        }

        if ((nsri.mRequest.mccMncs != null)
                && (nsri.mRequest.mccMncs.size() > NetworkScanRequest.MAX_MCC_MNC_LIST_SIZE)) {
            return false;
        }
        return true;
        return true;
    }
    }


+92 −42
Original line number Original line Diff line number Diff line
@@ -1809,43 +1809,28 @@ public final class RIL extends BaseCommands implements CommandsInterface {
        }
        }
    }
    }


    @Override
    private android.hardware.radio.V1_1.RadioAccessSpecifier convertRadioAccessSpecifierToRadioHAL(
    public void startNetworkScan(NetworkScanRequest nsr, Message result) {
            RadioAccessSpecifier ras) {
        IRadio radioProxy = getRadioProxy(result);
        android.hardware.radio.V1_1.RadioAccessSpecifier rasInHalFormat =
        if (radioProxy != null) {
            android.hardware.radio.V1_1.IRadio radioProxy11 =
                    android.hardware.radio.V1_1.IRadio.castFrom(radioProxy);
            if (radioProxy11 == null) {
                if (result != null) {
                    AsyncResult.forMessage(result, null,
                            CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED));
                    result.sendToTarget();
                }
            } else {
                android.hardware.radio.V1_1.NetworkScanRequest request =
                        new android.hardware.radio.V1_1.NetworkScanRequest();
                request.type = nsr.scanType;
                request.interval = 60;
                for (RadioAccessSpecifier ras : nsr.specifiers) {
                    android.hardware.radio.V1_1.RadioAccessSpecifier s =
                new android.hardware.radio.V1_1.RadioAccessSpecifier();
                new android.hardware.radio.V1_1.RadioAccessSpecifier();
                    s.radioAccessNetwork = ras.radioAccessNetwork;
        rasInHalFormat.radioAccessNetwork = ras.radioAccessNetwork;
        List<Integer> bands = null;
        List<Integer> bands = null;
        switch (ras.radioAccessNetwork) {
        switch (ras.radioAccessNetwork) {
            case RadioAccessNetworks.GERAN:
            case RadioAccessNetworks.GERAN:
                            bands = s.geranBands;
                bands = rasInHalFormat.geranBands;
                break;
                break;
            case RadioAccessNetworks.UTRAN:
            case RadioAccessNetworks.UTRAN:
                            bands = s.utranBands;
                bands = rasInHalFormat.utranBands;
                break;
                break;
            case RadioAccessNetworks.EUTRAN:
            case RadioAccessNetworks.EUTRAN:
                            bands = s.eutranBands;
                bands = rasInHalFormat.eutranBands;
                break;
                break;
            default:
            default:
                Log.wtf(RILJ_LOG_TAG, "radioAccessNetwork " + ras.radioAccessNetwork
                Log.wtf(RILJ_LOG_TAG, "radioAccessNetwork " + ras.radioAccessNetwork
                        + " not supported!");
                        + " not supported!");
                            return;
                return null;
        }
        }

        if (ras.bands != null) {
        if (ras.bands != null) {
            for (int band : ras.bands) {
            for (int band : ras.bands) {
                bands.add(band);
                bands.add(band);
@@ -1853,10 +1838,74 @@ public final class RIL extends BaseCommands implements CommandsInterface {
        }
        }
        if (ras.channels != null) {
        if (ras.channels != null) {
            for (int channel : ras.channels) {
            for (int channel : ras.channels) {
                            s.channels.add(channel);
                rasInHalFormat.channels.add(channel);
            }
        }
        }

        return rasInHalFormat;
    }
    }
                    request.specifiers.add(s);

    @Override
    public void startNetworkScan(NetworkScanRequest nsr, Message result) {
        IRadio radioProxy = getRadioProxy(result);
        if (radioProxy != null) {
            android.hardware.radio.V1_2.IRadio radioProxy12 =
                    android.hardware.radio.V1_2.IRadio.castFrom(radioProxy);
            if (radioProxy12 != null) {
                android.hardware.radio.V1_2.NetworkScanRequest request =
                        new android.hardware.radio.V1_2.NetworkScanRequest();
                request.type = nsr.scanType;
                request.interval = nsr.searchPeriodicity;
                request.maxSearchTime = nsr.maxSearchTime;
                request.incrementalResultsPeriodicity = nsr.incrementalResultsPeriodicity;
                request.incrementalResults = nsr.incrementalResults;

                for (RadioAccessSpecifier ras : nsr.specifiers) {

                    android.hardware.radio.V1_1.RadioAccessSpecifier rasInHalFormat =
                            convertRadioAccessSpecifierToRadioHAL(ras);
                    if (rasInHalFormat == null) {
                        return;
                    }

                    request.specifiers.add(rasInHalFormat);
                }

                request.mccMncs.addAll(nsr.mccMncs);
                RILRequest rr = obtainRequest(RIL_REQUEST_START_NETWORK_SCAN, result,
                        mRILDefaultWorkSource);

                if (RILJ_LOGD) {
                    riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
                }

                try {
                    radioProxy12.startNetworkScan_1_2(rr.mSerial, request);
                } catch (RemoteException | RuntimeException e) {
                    handleRadioProxyExceptionForRR(rr, "startNetworkScan", e);
                }
            } else {
                android.hardware.radio.V1_1.IRadio radioProxy11 =
                        android.hardware.radio.V1_1.IRadio.castFrom(radioProxy);
                if (radioProxy11 == null) {
                    if (result != null) {
                        AsyncResult.forMessage(result, null,
                                CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED));
                        result.sendToTarget();
                    }
                } else {
                    android.hardware.radio.V1_1.NetworkScanRequest request =
                            new android.hardware.radio.V1_1.NetworkScanRequest();
                    request.type = nsr.scanType;
                    request.interval = nsr.searchPeriodicity;
                    for (RadioAccessSpecifier ras : nsr.specifiers) {
                        android.hardware.radio.V1_1.RadioAccessSpecifier rasInHalFormat =
                                convertRadioAccessSpecifierToRadioHAL(ras);
                        if (rasInHalFormat == null) {
                            return;
                        }

                        request.specifiers.add(rasInHalFormat);
                    }
                    }


                    RILRequest rr = obtainRequest(RIL_REQUEST_START_NETWORK_SCAN, result,
                    RILRequest rr = obtainRequest(RIL_REQUEST_START_NETWORK_SCAN, result,
@@ -1874,6 +1923,7 @@ public final class RIL extends BaseCommands implements CommandsInterface {
                }
                }
            }
            }
        }
        }
    }


    @Override
    @Override
    public void stopNetworkScan(Message result) {
    public void stopNetworkScan(Message result) {
+12 −1
Original line number Original line Diff line number Diff line
@@ -28,6 +28,8 @@ import android.telephony.RadioNetworkConstants.RadioAccessNetworks;


import org.junit.Test;
import org.junit.Test;


import java.util.ArrayList;

/** Unit tests for {@link NetworkScanRequest}. */
/** Unit tests for {@link NetworkScanRequest}. */


public class NetworkScanRequestTest {
public class NetworkScanRequestTest {
@@ -44,7 +46,16 @@ public class NetworkScanRequestTest {
        int[] lteChannels = {5, 6, 7, 8};
        int[] lteChannels = {5, 6, 7, 8};
        RadioAccessSpecifier lte = new RadioAccessSpecifier(ranLte, lteBands, lteChannels);
        RadioAccessSpecifier lte = new RadioAccessSpecifier(ranLte, lteBands, lteChannels);
        RadioAccessSpecifier[] ras = {gsm, lte};
        RadioAccessSpecifier[] ras = {gsm, lte};
        NetworkScanRequest nsq = new NetworkScanRequest(NetworkScanRequest.SCAN_TYPE_ONE_SHOT, ras);
        int searchPeriodicity = 70;
        int maxSearchTime = 200;
        boolean incrementalResults = true;
        int incrementalResultsPeriodicity = 7;
        ArrayList<String> mccmncs = new ArrayList<String>();
        mccmncs.add("310480");
        mccmncs.add("21002");
        NetworkScanRequest nsq = new NetworkScanRequest(NetworkScanRequest.SCAN_TYPE_ONE_SHOT, ras,
                  searchPeriodicity, maxSearchTime, incrementalResults,
                  incrementalResultsPeriodicity, mccmncs);


        Parcel p = Parcel.obtain();
        Parcel p = Parcel.obtain();
        nsq.writeToParcel(p, 0);
        nsq.writeToParcel(p, 0);