Merge "Optimize NetworkScan for only User-Enabled RANs" into rvc-dev
This commit is contained in:
@@ -25,6 +25,7 @@ import android.telephony.TelephonyManager;
|
|||||||
import android.telephony.TelephonyScanManager;
|
import android.telephony.TelephonyScanManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.Executor;
|
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 MAX_SEARCH_TIME_SEC = 300;
|
||||||
private static final int INCREMENTAL_RESULTS_PERIODICITY_SEC = 3;
|
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 NetworkScanCallback mNetworkScanCallback;
|
||||||
private final TelephonyManager mTelephonyManager;
|
private final TelephonyManager mTelephonyManager;
|
||||||
private final TelephonyScanManager.NetworkScanCallback mInternalNetworkScanCallback;
|
private final TelephonyScanManager.NetworkScanCallback mInternalNetworkScanCallback;
|
||||||
@@ -120,6 +90,47 @@ public class NetworkScanHelper {
|
|||||||
mExecutor = executor;
|
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.
|
* Request a network scan.
|
||||||
*
|
*
|
||||||
@@ -134,7 +145,7 @@ public class NetworkScanHelper {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mNetworkScanRequester = mTelephonyManager.requestNetworkScan(
|
mNetworkScanRequester = mTelephonyManager.requestNetworkScan(
|
||||||
NETWORK_SCAN_REQUEST,
|
createNetworkScanForPreferredAccessNetworks(),
|
||||||
mExecutor,
|
mExecutor,
|
||||||
mInternalNetworkScanCallback);
|
mInternalNetworkScanCallback);
|
||||||
if (mNetworkScanRequester == null) {
|
if (mNetworkScanRequester == null) {
|
||||||
|
Reference in New Issue
Block a user