Tuner CTS: test scan callback part1

Bug: 150952758
Test: atest android.media.tv.tuner.cts.TunerTest
Change-Id: Iadab0bee6494bd3b4417bd3771ff2f965e273697
diff --git a/tests/tests/tv/src/android/media/tv/tuner/cts/TunerTest.java b/tests/tests/tv/src/android/media/tv/tuner/cts/TunerTest.java
index be15e58..aa8be38 100644
--- a/tests/tests/tv/src/android/media/tv/tuner/cts/TunerTest.java
+++ b/tests/tests/tv/src/android/media/tv/tuner/cts/TunerTest.java
@@ -18,6 +18,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 
 import android.content.Context;
 import android.media.tv.tuner.Descrambler;
@@ -43,7 +44,9 @@
 import androidx.test.runner.AndroidJUnit4;
 
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Executor;
+import java.util.concurrent.TimeUnit;
 
 import org.junit.After;
 import org.junit.Before;
@@ -55,63 +58,70 @@
 public class TunerTest {
     private static final String TAG = "MediaTunerTest";
 
+    private static final int TIMEOUT_MS = 10000;
+
     private Context mContext;
+    private Tuner mTuner;
+    private CountDownLatch mLockLatch = new CountDownLatch(1);
 
     @Before
     public void setUp() throws Exception {
         mContext = InstrumentationRegistry.getTargetContext();
         InstrumentationRegistry
                 .getInstrumentation().getUiAutomation().adoptShellPermissionIdentity();
+        if (!hasTuner()) return;
+        mTuner = new Tuner(mContext, null, 100);
     }
 
     @After
     public void tearDown() {
+        if (mTuner != null) {
+          mTuner.close();
+          mTuner = null;
+        }
     }
 
     @Test
     public void testTunerConstructor() throws Exception {
         if (!hasTuner()) return;
-        Tuner tuner = new Tuner(mContext, null, 100);
-        assertNotNull(tuner);
+        assertNotNull(mTuner);
     }
 
     @Test
     public void testTuning() throws Exception {
         if (!hasTuner()) return;
-        Tuner tuner = new Tuner(mContext, null, 100);
-        int res = tuner.tune(getFrontendSettings());
+        int res = mTuner.tune(getFrontendSettings());
         assertEquals(Tuner.RESULT_SUCCESS, res);
-        res = tuner.cancelTuning();
+        res = mTuner.cancelTuning();
         assertEquals(Tuner.RESULT_SUCCESS, res);
-        tuner.close();
     }
 
     @Test
     public void testScanning() throws Exception {
         if (!hasTuner()) return;
-        Tuner tuner = new Tuner(mContext, null, 100);
-        List<Integer> ids = tuner.getFrontendIds();
+        List<Integer> ids = mTuner.getFrontendIds();
         for (int id : ids) {
-            FrontendInfo info = tuner.getFrontendInfoById(id);
+            FrontendInfo info = mTuner.getFrontendInfoById(id);
             if (info != null && info.getType() == FrontendSettings.TYPE_ATSC) {
-                int res = tuner.scan(
+                mLockLatch = new CountDownLatch(1);
+                int res = mTuner.scan(
                         getFrontendSettings(),
                         Tuner.SCAN_TYPE_AUTO,
                         getExecutor(),
                         getScanCallback());
                assertEquals(Tuner.RESULT_SUCCESS, res);
-               res = tuner.cancelScanning();
+               assertTrue(mLockLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+               res = mTuner.cancelScanning();
                assertEquals(Tuner.RESULT_SUCCESS, res);
             }
         }
-        tuner.close();
+        mLockLatch = null;
     }
 
     @Test
     public void testOpenLnb() throws Exception {
         if (!hasTuner()) return;
-        Tuner tuner = new Tuner(mContext, null, 100);
-        Lnb lnb = tuner.openLnb(getExecutor(), getLnbCallback());
+        Lnb lnb = mTuner.openLnb(getExecutor(), getLnbCallback());
         assertNotNull(lnb);
     }
 
@@ -119,24 +129,21 @@
     public void testLnbSetVoltage() throws Exception {
         // TODO: move lnb-related tests to a separate file.
         if (!hasTuner()) return;
-        Tuner tuner = new Tuner(mContext, null, 100);
-        Lnb lnb = tuner.openLnb(getExecutor(), getLnbCallback());
+        Lnb lnb = mTuner.openLnb(getExecutor(), getLnbCallback());
         assertEquals(lnb.setVoltage(Lnb.VOLTAGE_5V), Tuner.RESULT_SUCCESS);
     }
 
     @Test
     public void testLnbSetTone() throws Exception {
         if (!hasTuner()) return;
-        Tuner tuner = new Tuner(mContext, null, 100);
-        Lnb lnb = tuner.openLnb(getExecutor(), getLnbCallback());
+        Lnb lnb = mTuner.openLnb(getExecutor(), getLnbCallback());
         assertEquals(lnb.setTone(Lnb.TONE_NONE), Tuner.RESULT_SUCCESS);
     }
 
     @Test
     public void testLnbSetPosistion() throws Exception {
         if (!hasTuner()) return;
-        Tuner tuner = new Tuner(mContext, null, 100);
-        Lnb lnb = tuner.openLnb(getExecutor(), getLnbCallback());
+        Lnb lnb = mTuner.openLnb(getExecutor(), getLnbCallback());
         assertEquals(
                 lnb.setSatellitePosition(Lnb.POSITION_A), Tuner.RESULT_SUCCESS);
     }
@@ -144,8 +151,7 @@
     @Test
     public void testOpenFilter() throws Exception {
         if (!hasTuner()) return;
-        Tuner tuner = new Tuner(mContext, null, 100);
-        Filter f = tuner.openFilter(
+        Filter f = mTuner.openFilter(
                 Filter.TYPE_TS, Filter.SUBTYPE_SECTION, 1000, getExecutor(), getFilterCallback());
         assertNotNull(f);
     }
@@ -153,32 +159,28 @@
     @Test
     public void testOpenTimeFilter() throws Exception {
         if (!hasTuner()) return;
-        Tuner tuner = new Tuner(mContext, null, 100);
-        TimeFilter f = tuner.openTimeFilter();
+        TimeFilter f = mTuner.openTimeFilter();
         assertNotNull(f);
     }
 
     @Test
     public void testOpenDescrambler() throws Exception {
         if (!hasTuner()) return;
-        Tuner tuner = new Tuner(mContext, null, 100);
-        Descrambler d = tuner.openDescrambler();
+        Descrambler d = mTuner.openDescrambler();
         assertNotNull(d);
     }
 
     @Test
     public void testOpenDvrRecorder() throws Exception {
         if (!hasTuner()) return;
-        Tuner tuner = new Tuner(mContext, null, 100);
-        DvrRecorder d = tuner.openDvrRecorder(100, getExecutor(), getRecordListener());
+        DvrRecorder d = mTuner.openDvrRecorder(100, getExecutor(), getRecordListener());
         assertNotNull(d);
     }
 
     @Test
     public void testOpenDvPlayback() throws Exception {
         if (!hasTuner()) return;
-        Tuner tuner = new Tuner(mContext, null, 100);
-        DvrPlayback d = tuner.openDvrPlayback(100, getExecutor(), getPlaybackListener());
+        DvrPlayback d = mTuner.openDvrPlayback(100, getExecutor(), getPlaybackListener());
         assertNotNull(d);
     }
 
@@ -233,7 +235,11 @@
     private ScanCallback getScanCallback() {
         return new ScanCallback() {
             @Override
-            public void onLocked() {}
+            public void onLocked() {
+                if (mLockLatch != null) {
+                    mLockLatch.countDown();
+                }
+            }
 
             @Override
             public void onScanStopped() {}