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

Commit 6e2226d0 authored by Sooraj Sasindran's avatar Sooraj Sasindran
Browse files

Enhance network scan request

BUG=63865942

Test: Verified by making changes in settings app to call the api
      and confirmed that the new information is delivered to vendor
      code
Merged-In: Ia17647bdedefed5230f4d113b7286d820f557e95
Change-Id: Ia17647bdedefed5230f4d113b7286d820f557e95
parent 7d178986
Loading
Loading
Loading
Loading
+101 −4
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.telephony;
import android.os.Parcel;
import android.os.Parcelable;

import java.util.ArrayList;
import java.util.Arrays;

/**
@@ -38,6 +39,20 @@ public final class NetworkScanRequest implements Parcelable {
    public static final int MAX_BANDS = 8;
    /** @hide */
    public static final int MAX_CHANNELS = 32;
    /** @hide */
    public static final int MAX_MCC_MNC_LIST_SIZE = 20;
    /** @hide */
    public static final int MIN_SEARCH_PERIODICITY_SEC = 5;
    /** @hide */
    public static final int MAX_SEARCH_PERIODICITY_SEC = 300;
    /** @hide */
    public static final int MIN_SEARCH_MAX_SEC = 60;
    /** @hide */
    public static final int MAX_SEARCH_MAX_SEC = 3600;
    /** @hide */
    public static final int MIN_INCREMENTAL_PERIODICITY_SEC = 1;
    /** @hide */
    public static final int MAX_INCREMENTAL_PERIODICITY_SEC = 10;

    /** Performs the scan only once */
    public static final int SCAN_TYPE_ONE_SHOT = 0;
@@ -46,24 +61,84 @@ public final class NetworkScanRequest implements Parcelable {
     *
     * The modem will start new scans periodically, and the interval between two scans is usually
     * multiple minutes.
     * */
     */
    public static final int SCAN_TYPE_PERIODIC = 1;

    /** Defines the type of the scan. */
    public int scanType;

    /**
     * Search periodicity (in seconds).
     * Expected range for the input is [5s - 300s]
     * This value must be less than or equal to maxSearchTime
     */
    public int searchPeriodicity;

    /**
     * Maximum duration of the periodic search (in seconds).
     * Expected range for the input is [60s - 3600s]
     * If the search lasts this long, it will be terminated.
     */
    public int maxSearchTime;

    /**
     * Indicates whether the modem should report incremental
     * results of the network scan to the client.
     * FALSE – Incremental results are not reported.
     * TRUE (default) – Incremental results are reported
     */
    public boolean incrementalResults;

    /**
     * Indicates the periodicity with which the modem should
     * report incremental results to the client (in seconds).
     * Expected range for the input is [1s - 10s]
     * This value must be less than or equal to maxSearchTime
     */
    public int incrementalResultsPeriodicity;

    /** Describes the radio access technologies with bands or channels that need to be scanned. */
    public RadioAccessSpecifier[] specifiers;

    /**
     * Describes the List of PLMN ids (MCC-MNC)
     * If any PLMN of this list is found, search should end at that point and
     * results with all PLMN found till that point should be sent as response.
     * If list not sent, search to be completed till end and all PLMNs found to be reported.
     * Max size of array is MAX_MCC_MNC_LIST_SIZE
     */
    public ArrayList<String> mccMncs;

    /**
     * Creates a new NetworkScanRequest with scanType and network specifiers
     *
     * @param scanType The type of the scan
     * @param specifiers the radio network with bands / channels to be scanned
     * @param searchPeriodicity Search periodicity (in seconds)
     * @param maxSearchTime Maximum duration of the periodic search (in seconds)
     * @param incrementalResults Indicates whether the modem should report incremental
     *                           results of the network scan to the client
     * @param incrementalResultsPeriodicity Indicates the periodicity with which the modem should
     *                                      report incremental results to the client (in seconds)
     * @param mccMncs Describes the List of PLMN ids (MCC-MNC)
     */
    public NetworkScanRequest(int scanType, RadioAccessSpecifier[] specifiers) {
    public NetworkScanRequest(int scanType, RadioAccessSpecifier[] specifiers,
                    int searchPeriodicity,
                    int maxSearchTime,
                    boolean incrementalResults,
                    int incrementalResultsPeriodicity,
                    ArrayList<String> mccMncs) {
        this.scanType = scanType;
        this.specifiers = specifiers;
        this.searchPeriodicity = searchPeriodicity;
        this.maxSearchTime = maxSearchTime;
        this.incrementalResults = incrementalResults;
        this.incrementalResultsPeriodicity = incrementalResultsPeriodicity;
        if (mccMncs != null) {
            this.mccMncs = mccMncs;
        } else {
            this.mccMncs = new ArrayList<>();
        }
    }

    @Override
@@ -75,6 +150,11 @@ public final class NetworkScanRequest implements Parcelable {
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(scanType);
        dest.writeParcelableArray(specifiers, flags);
        dest.writeInt(searchPeriodicity);
        dest.writeInt(maxSearchTime);
        dest.writeBoolean(incrementalResults);
        dest.writeInt(incrementalResultsPeriodicity);
        dest.writeStringList(mccMncs);
    }

    private NetworkScanRequest(Parcel in) {
@@ -82,6 +162,12 @@ public final class NetworkScanRequest implements Parcelable {
        specifiers = (RadioAccessSpecifier[]) in.readParcelableArray(
                Object.class.getClassLoader(),
                RadioAccessSpecifier.class);
        searchPeriodicity = in.readInt();
        maxSearchTime = in.readInt();
        incrementalResults = in.readBoolean();
        incrementalResultsPeriodicity = in.readInt();
        mccMncs = new ArrayList<>();
        in.readStringList(mccMncs);
    }

    @Override
@@ -99,13 +185,24 @@ public final class NetworkScanRequest implements Parcelable {
        }

        return (scanType == nsr.scanType
                && Arrays.equals(specifiers, nsr.specifiers));
                && Arrays.equals(specifiers, nsr.specifiers)
                && searchPeriodicity == nsr.searchPeriodicity
                && maxSearchTime == nsr.maxSearchTime
                && incrementalResults == nsr.incrementalResults
                && incrementalResultsPeriodicity == nsr.incrementalResultsPeriodicity
                && (((mccMncs != null)
                && mccMncs.equals(nsr.mccMncs))));
    }

    @Override
    public int hashCode () {
        return ((scanType * 31)
                + (Arrays.hashCode(specifiers)) * 37);
                + (Arrays.hashCode(specifiers)) * 37
                + (searchPeriodicity * 41)
                + (maxSearchTime * 43)
                + ((incrementalResults == true? 1 : 0) * 47)
                + (incrementalResultsPeriodicity * 53)
                + (mccMncs.hashCode() * 59));
    }

    public static final Creator<NetworkScanRequest> CREATOR =