Tuner CTS: Tuner, DemuxCapabilities, Lnb, etc.

Bug: 157428792
Test: android.media.tv.tuner.cts.TunerTest
Change-Id: Ie7bde07eb799014ebe9aad1731546a0d8e065496
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 a63d7e3..0e11776 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
@@ -24,6 +24,7 @@
 
 import android.content.Context;
 
+import android.media.tv.tuner.DemuxCapabilities;
 import android.media.tv.tuner.Descrambler;
 import android.media.tv.tuner.LnbCallback;
 import android.media.tv.tuner.Lnb;
@@ -73,6 +74,7 @@
 import android.media.tv.tuner.frontend.IsdbsFrontendSettings;
 import android.media.tv.tuner.frontend.IsdbtFrontendCapabilities;
 import android.media.tv.tuner.frontend.IsdbtFrontendSettings;
+import android.media.tv.tuner.frontend.OnTuneEventListener;
 import android.media.tv.tuner.frontend.ScanCallback;
 
 import androidx.test.InstrumentationRegistry;
@@ -132,6 +134,7 @@
         FrontendInfo info = mTuner.getFrontendInfoById(ids.get(0));
         int res = mTuner.tune(createFrontendSettings(info));
         assertEquals(Tuner.RESULT_SUCCESS, res);
+        assertEquals(Tuner.RESULT_SUCCESS, mTuner.setLnaEnabled(false));
         res = mTuner.cancelTuning();
         assertEquals(Tuner.RESULT_SUCCESS, res);
     }
@@ -226,33 +229,48 @@
     }
 
     @Test
-    public void testOpenLnb() throws Exception {
+    public void testLnb() throws Exception {
         if (!hasTuner()) return;
         Lnb lnb = mTuner.openLnb(getExecutor(), getLnbCallback());
-        assertNotNull(lnb);
-    }
-
-    @Test
-    public void testLnbSetVoltage() throws Exception {
-        // TODO: move lnb-related tests to a separate file.
-        if (!hasTuner()) return;
-        Lnb lnb = mTuner.openLnb(getExecutor(), getLnbCallback());
+        if (lnb == null) return;
         assertEquals(lnb.setVoltage(Lnb.VOLTAGE_5V), Tuner.RESULT_SUCCESS);
-    }
-
-    @Test
-    public void testLnbSetTone() throws Exception {
-        if (!hasTuner()) return;
-        Lnb lnb = mTuner.openLnb(getExecutor(), getLnbCallback());
         assertEquals(lnb.setTone(Lnb.TONE_NONE), Tuner.RESULT_SUCCESS);
-    }
-
-    @Test
-    public void testLnbSetPosistion() throws Exception {
-        if (!hasTuner()) return;
-        Lnb lnb = mTuner.openLnb(getExecutor(), getLnbCallback());
         assertEquals(
                 lnb.setSatellitePosition(Lnb.POSITION_A), Tuner.RESULT_SUCCESS);
+        lnb.sendDiseqcMessage(new byte[] {1, 2});
+        lnb.close();
+    }
+
+    @Test
+    public void testOpenLnbByname() throws Exception {
+        if (!hasTuner()) return;
+        Lnb lnb = mTuner.openLnbByName("default", getExecutor(), getLnbCallback());
+        if (lnb != null) {
+            lnb.close();
+        }
+    }
+
+    @Test
+    public void testCiCam() throws Exception {
+        if (!hasTuner()) return;
+        // open filter to get demux resource
+        mTuner.openFilter(
+                Filter.TYPE_TS, Filter.SUBTYPE_SECTION, 1000, getExecutor(), getFilterCallback());
+
+        mTuner.connectCiCam(1);
+        mTuner.disconnectCiCam();
+    }
+
+    @Test
+    public void testAvSyncId() throws Exception {
+        if (!hasTuner()) return;
+        // open filter to get demux resource
+        Filter f = mTuner.openFilter(
+                Filter.TYPE_TS, Filter.SUBTYPE_AUDIO, 1000, getExecutor(), getFilterCallback());
+        int id = mTuner.getAvSyncHwId(f);
+        if (id != Tuner.INVALID_AV_SYNC_ID) {
+            assertNotEquals(Tuner.INVALID_TIMESTAMP, mTuner.getAvSyncTime(id));
+        }
     }
 
     @Test
@@ -271,10 +289,17 @@
     }
 
     @Test
-    public void testOpenDescrambler() throws Exception {
+    public void testDescrambler() throws Exception {
         if (!hasTuner()) return;
         Descrambler d = mTuner.openDescrambler();
         assertNotNull(d);
+        Filter f = mTuner.openFilter(
+                Filter.TYPE_TS, Filter.SUBTYPE_SECTION, 1000, getExecutor(), getFilterCallback());
+        d.setKeyToken(new byte[] {1, 3, 2});
+        d.addPid(Descrambler.PID_TYPE_T, 1, f);
+        d.removePid(Descrambler.PID_TYPE_T, 1, f);
+        f.close();
+        d.close();
     }
 
     @Test
@@ -291,6 +316,69 @@
         assertNotNull(d);
     }
 
+    @Test
+    public void testDemuxCapabilities() throws Exception {
+        if (!hasTuner()) return;
+        DemuxCapabilities d = mTuner.getDemuxCapabilities();
+        assertNotNull(d);
+
+        d.getDemuxCount();
+        d.getRecordCount();
+        d.getPlaybackCount();
+        d.getTsFilterCount();
+        d.getSectionFilterCount();
+        d.getAudioFilterCount();
+        d.getVideoFilterCount();
+        d.getPesFilterCount();
+        d.getPcrFilterCount();
+        d.getSectionFilterLength();
+        d.getFilterCapabilities();
+        d.getLinkCapabilities();
+        d.isTimeFilterSupported();
+    }
+
+    @Test
+    public void testResourceLostListener() throws Exception {
+        if (!hasTuner()) return;
+        mTuner.setResourceLostListener(getExecutor(), new Tuner.OnResourceLostListener() {
+            @Override
+            public void onResourceLost(Tuner tuner) {}
+        });
+        mTuner.clearResourceLostListener();
+    }
+
+    @Test
+    public void testOnTuneEventListener() throws Exception {
+        if (!hasTuner()) return;
+        mTuner.setOnTuneEventListener(getExecutor(), new OnTuneEventListener() {
+            @Override
+            public void onTuneEvent(int tuneEvent) {}
+        });
+        mTuner.clearOnTuneEventListener();
+    }
+
+    @Test
+    public void testUpdateResourcePriority() throws Exception {
+        if (!hasTuner()) return;
+        mTuner.updateResourcePriority(100, 20);
+    }
+
+    @Test
+    public void testShareFrontendFromTuner() throws Exception {
+        if (!hasTuner()) return;
+        Tuner other = new Tuner(mContext, null, 100);
+        List<Integer> ids = other.getFrontendIds();
+        assertFalse(ids.isEmpty());
+        FrontendInfo info = other.getFrontendInfoById(ids.get(0));
+
+	// call tune() to open frontend resource
+        int res = other.tune(createFrontendSettings(info));
+        assertEquals(Tuner.RESULT_SUCCESS, res);
+        assertNotNull(other.getFrontendInfo());
+        mTuner.shareFrontendFromTuner(other);
+        other.close();
+    }
+
     private boolean hasTuner() {
         return mContext.getPackageManager().hasSystemFeature("android.hardware.tv.tuner");
     }