Snap for 7703367 from 4307b3ee3e15a174fb8e6072dd9296f6922a394d to sc-v2-release

Change-Id: I76b52dab28fa3161a3e044089ed57e3b770d7d88
diff --git a/src/com/android/ons/ONSNetworkScanCtlr.java b/src/com/android/ons/ONSNetworkScanCtlr.java
index 181a56c..57864c9 100644
--- a/src/com/android/ons/ONSNetworkScanCtlr.java
+++ b/src/com/android/ons/ONSNetworkScanCtlr.java
@@ -26,6 +26,8 @@
 import android.telephony.CarrierConfigManager;
 import android.telephony.CellInfo;
 import android.telephony.CellInfoLte;
+import android.telephony.CellInfoNr;
+import android.telephony.CellSignalStrengthNr;
 import android.telephony.NetworkScan;
 import android.telephony.NetworkScanRequest;
 import android.telephony.RadioAccessSpecifier;
@@ -37,6 +39,8 @@
 import com.android.telephony.Rlog;
 
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.stream.Collectors;
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
@@ -59,6 +63,23 @@
     private static final int MSG_SCAN_COMPLETE = 2;
     private static final int MSG_SCAN_ERROR = 3;
 
+    private Boolean mIs4gScanEnabled = null;
+
+    @VisibleForTesting
+    static final RadioAccessSpecifier DEFAULT_5G_RAS = new RadioAccessSpecifier(
+            AccessNetworkConstants.AccessNetworkType.NGRAN,
+            new int[] {
+                AccessNetworkConstants.NgranBands.BAND_48,
+                AccessNetworkConstants.NgranBands.BAND_71},
+            null);
+    @VisibleForTesting
+    static final RadioAccessSpecifier DEFAULT_4G_RAS = new RadioAccessSpecifier(
+        AccessNetworkConstants.AccessNetworkType.NGRAN,
+        new int[] {
+                AccessNetworkConstants.EutranBand.BAND_48,
+                AccessNetworkConstants.EutranBand.BAND_71},
+        null);
+
     /* scan object to keep track of current scan request */
     private NetworkScan mCurrentScan;
     private boolean mIsScanActive;
@@ -67,6 +88,7 @@
     private TelephonyManager mTelephonyManager;
     private CarrierConfigManager configManager;
     private int mRsrpEntryThreshold;
+    private int mSsRsrpEntryThreshold;
     @VisibleForTesting
     protected NetworkAvailableCallBack mNetworkAvailableCallBack;
     HandlerThread mThread;
@@ -119,12 +141,16 @@
         void onError(int error);
     }
 
-    private int getIntCarrierConfig(String key) {
-        PersistableBundle b = null;
+    private PersistableBundle getConfigBundle() {
         if (configManager != null) {
             // If an invalid subId is used, this bundle will contain default values.
-            b = configManager.getConfig();
+            return configManager.getConfig();
         }
+        return null;
+    }
+
+    private int getIntCarrierConfig(String key) {
+        PersistableBundle b = getConfigBundle();
         if (b != null) {
             return b.getInt(key);
         } else {
@@ -133,6 +159,16 @@
         }
     }
 
+    private boolean getBooleanCarrierConfig(String key) {
+        PersistableBundle b = getConfigBundle();
+        if (b != null) {
+            return b.getBoolean(key);
+        } else {
+            // Return static default defined in CarrierConfigManager.
+            return CarrierConfigManager.getDefaultConfig().getBoolean(key);
+        }
+    }
+
     /**
      * analyze scan results
      * @param results contains all available cells matching the scan request at current location.
@@ -143,10 +179,20 @@
           return;
         }
         List<CellInfo> filteredResults = new ArrayList<CellInfo>();
+        mIs4gScanEnabled = getIs4gScanEnabled();
         synchronized (mLock) {
             for (CellInfo cellInfo : results) {
                 if (mMccMncs.contains(getMccMnc(cellInfo))) {
-                    if (cellInfo instanceof CellInfoLte) {
+                    if (cellInfo instanceof CellInfoNr) {
+                        CellInfoNr nrCellInfo = (CellInfoNr) cellInfo;
+                        int ssRsrp = ((CellSignalStrengthNr) nrCellInfo.getCellSignalStrength())
+                                .getSsRsrp();
+                        logDebug("cell info ssRsrp: " + ssRsrp);
+                        if (ssRsrp >= mSsRsrpEntryThreshold) {
+                            filteredResults.add(cellInfo);
+                        }
+                    }
+                    if (mIs4gScanEnabled && cellInfo instanceof CellInfoLte) {
                         int rsrp = ((CellInfoLte) cellInfo).getCellSignalStrength().getRsrp();
                         logDebug("cell info rsrp: " + rsrp);
                         if (rsrp >= mRsrpEntryThreshold) {
@@ -229,27 +275,87 @@
         return null;
     }
 
-    private NetworkScanRequest createNetworkScanRequest(ArrayList<AvailableNetworkInfo> availableNetworks,
-            int periodicity) {
-        RadioAccessSpecifier[] ras = new RadioAccessSpecifier[1];
-        ArrayList<String> mccMncs = new ArrayList<String>();
-        Set<Integer> bandSet = new ArraySet<>();
+    private boolean getIs4gScanEnabled() {
+        // TODO: make this a null check
+        if (mIs4gScanEnabled != null) {
+            return mIs4gScanEnabled;
+        }
+        return getBooleanCarrierConfig(
+                CarrierConfigManager.KEY_ENABLE_4G_OPPORTUNISTIC_NETWORK_SCAN_BOOL);
+    }
 
-        /* by default add band 48 */
-        bandSet.add(AccessNetworkConstants.EutranBand.BAND_48);
+    @VisibleForTesting
+    void setIs4gScanEnabled(boolean enabled) {
+        mIs4gScanEnabled = enabled;
+    }
+
+    @VisibleForTesting
+    NetworkScanRequest createNetworkScanRequest(ArrayList<AvailableNetworkInfo> availableNetworks,
+        int periodicity) {
+        RadioAccessSpecifier[] ras;
+        ArrayList<String> mccMncs = new ArrayList<String>();
+        Set<Integer> bandSet5G = new ArraySet<>();
+        Set<Integer> bandSet4G = new ArraySet<>();
+
+        mIs4gScanEnabled = getIs4gScanEnabled();
+
         /* retrieve mcc mncs and bands for available networks */
         for (AvailableNetworkInfo availableNetwork : availableNetworks) {
             mccMncs.addAll(availableNetwork.getMccMncs());
-            bandSet.addAll(availableNetwork.getBands());
+            List<RadioAccessSpecifier> radioAccessSpecifiers =
+                    availableNetwork.getRadioAccessSpecifiers();
+            if (radioAccessSpecifiers.isEmpty()) {
+                if (mIs4gScanEnabled) {
+                    bandSet4G.addAll(availableNetwork.getBands());
+                }
+                bandSet5G.addAll(availableNetwork.getBands());
+            } else {
+                for (RadioAccessSpecifier radioAccessSpecifier : radioAccessSpecifiers) {
+                    int radioAccessNetworkType = radioAccessSpecifier.getRadioAccessNetwork();
+                    if (mIs4gScanEnabled &&
+                            radioAccessNetworkType ==
+                                    AccessNetworkConstants.AccessNetworkType.EUTRAN) {
+                        bandSet4G.addAll(Arrays.stream(radioAccessSpecifier.getBands())
+                                .boxed().collect(Collectors.toList()));
+                    } else if (radioAccessNetworkType ==
+                            AccessNetworkConstants.AccessNetworkType.NGRAN) {
+                        bandSet5G.addAll(Arrays.stream(radioAccessSpecifier.getBands())
+                                .boxed().collect(Collectors.toList()));
+                    }
+                }
+            }
         }
 
-        int[] bands = bandSet.stream().mapToInt(band->band).toArray();
-        /* create network scan request */
-        ras[0] = new RadioAccessSpecifier(AccessNetworkConstants.AccessNetworkType.EUTRAN, bands,
-                null);
+        int rasSize = 1;
+        if (mIs4gScanEnabled && bandSet4G.isEmpty() == bandSet5G.isEmpty()) {
+            rasSize = 2;
+        }
+        ras = new RadioAccessSpecifier[rasSize];
+
+        if (bandSet4G.isEmpty() && bandSet5G.isEmpty()) {
+            // Set the default RadioAccessSpecifiers if none were set and no bands were set.
+            ras[0] = DEFAULT_5G_RAS;
+            if (mIs4gScanEnabled) {
+                ras[1] = DEFAULT_4G_RAS;
+            }
+        } else {
+            if (mIs4gScanEnabled && !bandSet4G.isEmpty()) {
+                ras[0] = new RadioAccessSpecifier(AccessNetworkConstants.AccessNetworkType.EUTRAN,
+                        bandSet4G.stream().mapToInt(band->band).toArray(), null);
+            }
+            if (!bandSet5G.isEmpty()) {
+                ras[rasSize - 1] = new RadioAccessSpecifier(
+                        AccessNetworkConstants.AccessNetworkType.NGRAN,
+                        bandSet5G.stream().mapToInt(band->band).toArray(), null);
+            } else if (!mIs4gScanEnabled) {
+                // Reached if only 4G was specified but 4G scan is disabled.
+                ras[0] = DEFAULT_5G_RAS;
+            }
+        }
+
         NetworkScanRequest networkScanRequest = new NetworkScanRequest(
-                NetworkScanRequest.SCAN_TYPE_PERIODIC, ras, periodicity, MAX_SEARCH_TIME, false,
-                NetworkScanRequest.MAX_INCREMENTAL_PERIODICITY_SEC, mccMncs);
+            NetworkScanRequest.SCAN_TYPE_PERIODIC, ras, periodicity, MAX_SEARCH_TIME, false,
+            NetworkScanRequest.MAX_INCREMENTAL_PERIODICITY_SEC, mccMncs);
         synchronized (mLock) {
             mMccMncs = mccMncs;
         }
@@ -284,6 +390,9 @@
                 getIntCarrierConfig(
                     CarrierConfigManager.KEY_OPPORTUNISTIC_NETWORK_EXIT_THRESHOLD_RSRP_INT);
 
+            mSsRsrpEntryThreshold = getIntCarrierConfig(
+                    CarrierConfigManager.KEY_OPPORTUNISTIC_NETWORK_EXIT_THRESHOLD_SS_RSRP_INT);
+
             /* start new scan */
             networkScan = mTelephonyManager.requestNetworkScan(networkScanRequest,
                     mNetworkScanCallback);
diff --git a/tests/src/com/android/ons/ONSNetworkScanCtlrTest.java b/tests/src/com/android/ons/ONSNetworkScanCtlrTest.java
index ba20467..67f31c2 100644
--- a/tests/src/com/android/ons/ONSNetworkScanCtlrTest.java
+++ b/tests/src/com/android/ons/ONSNetworkScanCtlrTest.java
@@ -20,13 +20,21 @@
 import static org.mockito.Mockito.*;
 
 import android.os.Looper;
+import android.os.PersistableBundle;
+import android.telephony.AccessNetworkConstants;
 import android.telephony.AvailableNetworkInfo;
+import android.telephony.CarrierConfigManager;
 import android.telephony.CellIdentityLte;
 import android.telephony.CellInfo;
 import android.telephony.CellInfoLte;
 import android.telephony.NetworkScan;
+import android.telephony.NetworkScanRequest;
+import android.telephony.RadioAccessSpecifier;
 import android.telephony.SubscriptionInfo;
 import android.telephony.TelephonyManager;
+import android.util.Log;
+
+import androidx.test.InstrumentationRegistry;
 
 import org.junit.After;
 import org.junit.Before;
@@ -35,6 +43,7 @@
 import org.mockito.MockitoAnnotations;
 
 import java.sql.Array;
+import java.util.Arrays;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -46,6 +55,19 @@
     private boolean mCallbackInvoked;
     private Looper mLooper;
 
+    private static final int SEARCH_PERIODICITY = 60;
+    private static final SubscriptionInfo TEST_SUBSCRIPTION_INFO = new SubscriptionInfo(
+            1, "", 1, null, null, 0, 0, null, 0, null, "310", "210", null,
+            false, null, null);
+    private static final RadioAccessSpecifier TEST_5G_RAS = new RadioAccessSpecifier(
+            AccessNetworkConstants.AccessNetworkType.NGRAN,
+            new int[] {AccessNetworkConstants.NgranBands.BAND_71},
+            null);
+    private static final RadioAccessSpecifier TEST_4G_RAS = new RadioAccessSpecifier(
+            AccessNetworkConstants.AccessNetworkType.EUTRAN,
+            new int[] {AccessNetworkConstants.EutranBand.BAND_48},
+            null);
+
     @Before
     public void setUp() throws Exception {
         super.setUp("ONSTest");
@@ -76,35 +98,8 @@
         CellInfoLte cellInfoLte = new CellInfoLte();
         cellInfoLte.setCellIdentity(cellIdentityLte);
         expectedResults.add((CellInfo)cellInfoLte);
-        mReady = false;
 
-        // initializing ONSNetworkScanCtlr
-        new Thread(new Runnable() {
-            @Override
-            public void run() {
-                Looper.prepare();
-                mONSNetworkScanCtlr = new ONSNetworkScanCtlr(mContext, mMockTelephonyManager,
-                        new ONSNetworkScanCtlr.NetworkAvailableCallBack() {
-                        @Override
-                        public void onNetworkAvailability(List<CellInfo> results) {
-                            mResults = results;
-                            setReady(true);
-                        }
-
-                        public void onError(int error) {
-                            setReady(true);
-                        }
-                    });
-
-                mLooper = Looper.myLooper();
-                setReady(true);
-                Looper.loop();
-            }
-        }).start();
-
-        // Wait till initialization is complete.
-        waitUntilReady();
-        mReady = false;
+        initONSNetworkScanCtrl();
 
         // Testing startFastNetworkScan, onNetworkAvailability should be called with expectedResults
         mONSNetworkScanCtlr.startFastNetworkScan(availableNetworkInfos);
@@ -126,38 +121,9 @@
                 new ArrayList<Integer>());
         ArrayList<AvailableNetworkInfo> availableNetworkInfos = new ArrayList<AvailableNetworkInfo>();
         availableNetworkInfos.add(availableNetworkInfo);
-        mReady = false;
         mError = NetworkScan.SUCCESS;
 
-        // initializing ONSNetworkScanCtlr
-        new Thread(new Runnable() {
-            @Override
-            public void run() {
-                Looper.prepare();
-                mONSNetworkScanCtlr = new ONSNetworkScanCtlr(mContext, mMockTelephonyManager,
-                        new ONSNetworkScanCtlr.NetworkAvailableCallBack() {
-                        @Override
-                        public void onNetworkAvailability(List<CellInfo> results) {
-                            setReady(true);
-                        }
-
-                        @Override
-                        public void onError(int error) {
-                            mError = error;
-                            setReady(true);
-                        }
-                    });
-
-                mLooper = Looper.myLooper();
-                setReady(true);
-                Looper.loop();
-
-            }
-        }).start();
-
-        // Wait till initialization is complete.
-        waitUntilReady();
-        mReady = false;
+        initONSNetworkScanCtrl();
 
         // Testing startFastNetworkScan, onError should be called with ERROR_INVALID_SCAN
         mONSNetworkScanCtlr.startFastNetworkScan(availableNetworkInfos);
@@ -180,36 +146,8 @@
             new ArrayList<Integer>());
         ArrayList<AvailableNetworkInfo> availableNetworkInfos = new ArrayList<AvailableNetworkInfo>();
         availableNetworkInfos.add(availableNetworkInfo);
-        mReady = false;
 
-        // initializing ONSNetworkScanCtlr
-        new Thread(new Runnable() {
-            @Override
-            public void run() {
-                Looper.prepare();
-                mONSNetworkScanCtlr = new ONSNetworkScanCtlr(mContext, mMockTelephonyManager,
-                        new ONSNetworkScanCtlr.NetworkAvailableCallBack() {
-                        @Override
-                        public void onNetworkAvailability(List<CellInfo> results) {
-                            mResults = results;
-                            setReady(true);
-                        }
-
-                        public void onError(int error) {
-                            setReady(true);
-                        }
-                    });
-
-                mLooper = Looper.myLooper();
-                setReady(true);
-                Looper.loop();
-
-            }
-        }).start();
-
-        // Wait till initialization is complete.
-        waitUntilReady();
-        mReady = false;
+        initONSNetworkScanCtrl();
 
         // Testing startSlowNetworkScan, onNetworkAvailability should be called with expectedResults
         mONSNetworkScanCtlr.startFastNetworkScan(availableNetworkInfos);
@@ -229,9 +167,149 @@
         mccMncs.add("310210");
         AvailableNetworkInfo availableNetworkInfo = new AvailableNetworkInfo(1, 1, mccMncs,
                 new ArrayList<Integer>());
-        ArrayList<AvailableNetworkInfo> availableNetworkInfos = new ArrayList<AvailableNetworkInfo>();
+        ArrayList<AvailableNetworkInfo> availableNetworkInfos =
+                new ArrayList<AvailableNetworkInfo>();
         availableNetworkInfos.add(availableNetworkInfo);
         mCallbackInvoked = false;
+
+        initONSNetworkScanCtrl();
+
+        // Testing stopNetworkScan, should not get any callback invocation after stopNetworkScan.
+        mONSNetworkScanCtlr.startFastNetworkScan(availableNetworkInfos);
+        mONSNetworkScanCtlr.stopNetworkScan();
+        mONSNetworkScanCtlr.mNetworkScanCallback.onResults(expectedResults);
+        waitUntilReady(100);
+        assertFalse(mCallbackInvoked);
+    }
+
+    @Test
+    public void testCreateNetworkScanRequest_withNoSpecifiedRasOrBands_4gScanEnabled() {
+        initONSNetworkScanCtrl();
+        mONSNetworkScanCtlr.setIs4gScanEnabled(true);
+
+        NetworkScanRequest networkScanRequest = createNetworkScanRequest(new ArrayList<>());
+        RadioAccessSpecifier[] radioAccessSpecifiers = networkScanRequest.getSpecifiers();
+
+        assertEquals(networkScanRequest.getSearchPeriodicity(), SEARCH_PERIODICITY);
+        assertEquals(networkScanRequest.getPlmns().size(), 1);
+        assertEquals(networkScanRequest.getPlmns().get(0), "310210");
+        assertEquals(radioAccessSpecifiers.length, 2);
+        assertEquals(radioAccessSpecifiers[0], ONSNetworkScanCtlr.DEFAULT_5G_RAS);
+        assertEquals(radioAccessSpecifiers[1], ONSNetworkScanCtlr.DEFAULT_4G_RAS);
+    }
+
+    @Test
+    public void testCreateNetworkScanRequest_withNoSpecifiedRasOrBands_4gScanDisabled() {
+        initONSNetworkScanCtrl();
+        mONSNetworkScanCtlr.setIs4gScanEnabled(false);
+
+        NetworkScanRequest networkScanRequest = createNetworkScanRequest(new ArrayList<>());
+        RadioAccessSpecifier[] radioAccessSpecifiers = networkScanRequest.getSpecifiers();
+
+        assertEquals(networkScanRequest.getSearchPeriodicity(), SEARCH_PERIODICITY);
+        assertEquals(networkScanRequest.getPlmns().size(), 1);
+        assertEquals(networkScanRequest.getPlmns().get(0), "310210");
+        assertEquals(radioAccessSpecifiers.length, 1);
+        assertEquals(radioAccessSpecifiers[0], ONSNetworkScanCtlr.DEFAULT_5G_RAS);
+    }
+
+    @Test
+    public void testCreateNetworkScanRequest_withSpecified5gRAS_4gScanEnabled() {
+        initONSNetworkScanCtrl();
+        mONSNetworkScanCtlr.setIs4gScanEnabled(true);
+
+        NetworkScanRequest networkScanRequest = createNetworkScanRequest(
+                new ArrayList<>(Arrays.asList(TEST_5G_RAS)));
+        RadioAccessSpecifier[] radioAccessSpecifiers = networkScanRequest.getSpecifiers();
+
+        assertEquals(networkScanRequest.getSearchPeriodicity(), SEARCH_PERIODICITY);
+        assertEquals(networkScanRequest.getPlmns().size(), 1);
+        assertEquals(networkScanRequest.getPlmns().get(0), "310210");
+        assertEquals(radioAccessSpecifiers.length, 1);
+        assertEquals(radioAccessSpecifiers[0], TEST_5G_RAS);
+    }
+
+    @Test
+    public void testCreateNetworkScanRequest_withSpecified4gRAS_4gScanEnabled() {
+        initONSNetworkScanCtrl();
+        mONSNetworkScanCtlr.setIs4gScanEnabled(true);
+
+        NetworkScanRequest networkScanRequest = createNetworkScanRequest(
+                new ArrayList<>(Arrays.asList(TEST_4G_RAS)));
+        RadioAccessSpecifier[] radioAccessSpecifiers = networkScanRequest.getSpecifiers();
+
+        assertEquals(networkScanRequest.getSearchPeriodicity(), SEARCH_PERIODICITY);
+        assertEquals(networkScanRequest.getPlmns().size(), 1);
+        assertEquals(networkScanRequest.getPlmns().get(0), "310210");
+        assertEquals(radioAccessSpecifiers.length, 1);
+        assertEquals(radioAccessSpecifiers[0], TEST_4G_RAS);
+    }
+
+    @Test
+    public void testCreateNetworkScanRequest_withSpecified4gRAS_4gScanDisabled() {
+        initONSNetworkScanCtrl();
+        mONSNetworkScanCtlr.setIs4gScanEnabled(false);
+
+        NetworkScanRequest networkScanRequest = createNetworkScanRequest(
+                new ArrayList<>(Arrays.asList(TEST_4G_RAS)));
+        RadioAccessSpecifier[] radioAccessSpecifiers = networkScanRequest.getSpecifiers();
+
+        assertEquals(networkScanRequest.getSearchPeriodicity(), SEARCH_PERIODICITY);
+        assertEquals(networkScanRequest.getPlmns().size(), 1);
+        assertEquals(networkScanRequest.getPlmns().get(0), "310210");
+        assertEquals(radioAccessSpecifiers.length, 1);
+        assertEquals(radioAccessSpecifiers[0], ONSNetworkScanCtlr.DEFAULT_5G_RAS);
+    }
+
+    @Test
+    public void testCreateNetworkScanRequest_withSpecified4gAnd5gRAS_4gScanEnabled() {
+        initONSNetworkScanCtrl();
+        mONSNetworkScanCtlr.setIs4gScanEnabled(true);
+
+        NetworkScanRequest networkScanRequest = createNetworkScanRequest(
+                new ArrayList<>(Arrays.asList(TEST_5G_RAS, TEST_4G_RAS)));
+        RadioAccessSpecifier[] radioAccessSpecifiers = networkScanRequest.getSpecifiers();
+
+        assertEquals(networkScanRequest.getSearchPeriodicity(), SEARCH_PERIODICITY);
+        assertEquals(networkScanRequest.getPlmns().size(), 1);
+        assertEquals(networkScanRequest.getPlmns().get(0), "310210");
+        assertEquals(radioAccessSpecifiers.length, 2);
+        assertEquals(radioAccessSpecifiers[0], TEST_4G_RAS);
+        assertEquals(radioAccessSpecifiers[1], TEST_5G_RAS);
+    }
+
+    @Test
+    public void testCreateNetworkScanRequest_withSpecified4gAnd5gRAS_4gScanDisabled() {
+        initONSNetworkScanCtrl();
+        mONSNetworkScanCtlr.setIs4gScanEnabled(false);
+
+        NetworkScanRequest networkScanRequest = createNetworkScanRequest(
+                new ArrayList<>(Arrays.asList(TEST_5G_RAS, TEST_4G_RAS)));
+        RadioAccessSpecifier[] radioAccessSpecifiers = networkScanRequest.getSpecifiers();
+
+        assertEquals(networkScanRequest.getSearchPeriodicity(), SEARCH_PERIODICITY);
+        assertEquals(networkScanRequest.getPlmns().size(), 1);
+        assertEquals(networkScanRequest.getPlmns().get(0), "310210");
+        assertEquals(radioAccessSpecifiers.length, 1);
+        assertEquals(radioAccessSpecifiers[0], TEST_5G_RAS);
+    }
+
+    private NetworkScanRequest createNetworkScanRequest(ArrayList<RadioAccessSpecifier> ras) {
+        AvailableNetworkInfo availableNetworkInfo = new AvailableNetworkInfo.Builder()
+                .setSubId(TEST_SUBSCRIPTION_INFO.getSubscriptionId())
+                .setPriority(AvailableNetworkInfo.PRIORITY_LOW)
+                .setMccMncs(new ArrayList<>(Arrays.asList("310210")))
+                .setRadioAccessSpecifiers(ras)
+                .build();
+        ArrayList<AvailableNetworkInfo> availableNetworkInfos =
+            new ArrayList<AvailableNetworkInfo>();
+        availableNetworkInfos.add(availableNetworkInfo);
+
+        return mONSNetworkScanCtlr.createNetworkScanRequest(availableNetworkInfos,
+                SEARCH_PERIODICITY);
+    }
+
+    private void initONSNetworkScanCtrl() {
         mReady = false;
 
         // initializing ONSNetworkScanCtlr
@@ -240,15 +318,16 @@
             public void run() {
                 Looper.prepare();
                 mONSNetworkScanCtlr = new ONSNetworkScanCtlr(mContext, mMockTelephonyManager,
-                        new ONSNetworkScanCtlr.NetworkAvailableCallBack() {
+                    new ONSNetworkScanCtlr.NetworkAvailableCallBack() {
                         @Override
                         public void onNetworkAvailability(List<CellInfo> results) {
-                            mCallbackInvoked = true;
+                            mResults = results;
                             setReady(true);
                         }
 
                         public void onError(int error) {
-                            mCallbackInvoked = true;
+                            mError = error;
+                            setReady(true);
                         }
                     });
 
@@ -261,12 +340,5 @@
         // Wait till initialization is complete.
         waitUntilReady();
         mReady = false;
-
-        // Testing stopNetworkScan, should not get any callback invocation after stopNetworkScan.
-        mONSNetworkScanCtlr.startFastNetworkScan(availableNetworkInfos);
-        mONSNetworkScanCtlr.stopNetworkScan();
-        mONSNetworkScanCtlr.mNetworkScanCallback.onResults(expectedResults);
-        waitUntilReady(100);
-        assertFalse(mCallbackInvoked);
     }
 }