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

Commit d8581221 authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Optimize NetworkScan for only User-Enabled RANs" into rvc-dev am: f7fe2b0d

Change-Id: I4f4f4356a2b481a18b5aeffdcd72c4f0a23658a2
parents 54575ffd f7fe2b0d
Loading
Loading
Loading
Loading
+43 −32
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.telephony.TelephonyManager;
import android.telephony.TelephonyScanManager;
import android.util.Log;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executor;

@@ -75,37 +76,6 @@ public class NetworkScanHelper {
    private static final int MAX_SEARCH_TIME_SEC = 300;
    private static final int INCREMENTAL_RESULTS_PERIODICITY_SEC = 3;

    private static final NetworkScanRequest NETWORK_SCAN_REQUEST =
            new NetworkScanRequest(
                    NetworkScanRequest.SCAN_TYPE_ONE_SHOT,
                    new RadioAccessSpecifier[]{
                            // GSM
                            new RadioAccessSpecifier(
                                    AccessNetworkType.GERAN,
                                    null /* bands */,
                                    null /* channels */),
                            // LTE
                            new RadioAccessSpecifier(
                                    AccessNetworkType.EUTRAN,
                                    null /* bands */,
                                    null /* channels */),
                            // WCDMA
                            new RadioAccessSpecifier(
                                    AccessNetworkType.UTRAN,
                                    null /* bands */,
                                    null /* channels */),
                            // NR
                            new RadioAccessSpecifier(
                                    AccessNetworkType.NGRAN,
                                    null /* bands */,
                                    null /* channels */)
                    },
                    SEARCH_PERIODICITY_SEC,
                    MAX_SEARCH_TIME_SEC,
                    INCREMENTAL_RESULTS,
                    INCREMENTAL_RESULTS_PERIODICITY_SEC,
                    null /* List of PLMN ids (MCC-MNC) */);

    private final NetworkScanCallback mNetworkScanCallback;
    private final TelephonyManager mTelephonyManager;
    private final TelephonyScanManager.NetworkScanCallback mInternalNetworkScanCallback;
@@ -120,6 +90,47 @@ public class NetworkScanHelper {
        mExecutor = executor;
    }

    private NetworkScanRequest createNetworkScanForPreferredAccessNetworks() {
        long networkTypeBitmap3gpp = mTelephonyManager.getPreferredNetworkTypeBitmask()
                & TelephonyManager.NETWORK_STANDARDS_FAMILY_BITMASK_3GPP;

        List<RadioAccessSpecifier> radioAccessSpecifiers = new ArrayList<>();
        // If the allowed network types are unknown or if they are of the right class, scan for
        // them; otherwise, skip them to save scan time and prevent users from being shown networks
        // that they can't connect to.
        if (networkTypeBitmap3gpp == 0
                || (networkTypeBitmap3gpp & TelephonyManager.NETWORK_CLASS_BITMASK_2G) != 0) {
            radioAccessSpecifiers.add(
                    new RadioAccessSpecifier(AccessNetworkType.GERAN, null, null));
        }
        if (networkTypeBitmap3gpp == 0
                || (networkTypeBitmap3gpp & TelephonyManager.NETWORK_CLASS_BITMASK_3G) != 0) {
            radioAccessSpecifiers.add(
                    new RadioAccessSpecifier(AccessNetworkType.UTRAN, null, null));
        }
        if (networkTypeBitmap3gpp == 0
                || (networkTypeBitmap3gpp & TelephonyManager.NETWORK_CLASS_BITMASK_4G) != 0) {
            radioAccessSpecifiers.add(
                    new RadioAccessSpecifier(AccessNetworkType.EUTRAN, null, null));
        }
        if (networkTypeBitmap3gpp == 0
                || (networkTypeBitmap3gpp & TelephonyManager.NETWORK_CLASS_BITMASK_5G) != 0) {
            radioAccessSpecifiers.add(
                    new RadioAccessSpecifier(AccessNetworkType.NGRAN, null, null));
        }


        return new NetworkScanRequest(
                NetworkScanRequest.SCAN_TYPE_ONE_SHOT,
                radioAccessSpecifiers.toArray(
                        new RadioAccessSpecifier[radioAccessSpecifiers.size()]),
                SEARCH_PERIODICITY_SEC,
                MAX_SEARCH_TIME_SEC,
                INCREMENTAL_RESULTS,
                INCREMENTAL_RESULTS_PERIODICITY_SEC,
                null /* List of PLMN ids (MCC-MNC) */);
    }

    /**
     * Request a network scan.
     *
@@ -134,7 +145,7 @@ public class NetworkScanHelper {
            return;
        }
        mNetworkScanRequester = mTelephonyManager.requestNetworkScan(
                NETWORK_SCAN_REQUEST,
                createNetworkScanForPreferredAccessNetworks(),
                mExecutor,
                mInternalNetworkScanCallback);
        if (mNetworkScanRequester == null) {