Refactor Tuner JNI and move the interaction with IDescrambler into DescramblerClient

Test: atest android.media.tv.tuner.cts on Cuttlefish
Bug: 174095851
Change-Id: Ie6c465324bbec71b080f9fdead003f3c56d79010
diff --git a/media/jni/tuner/TunerClient.cpp b/media/jni/tuner/TunerClient.cpp
index 69cd3d3..e469aa3 100644
--- a/media/jni/tuner/TunerClient.cpp
+++ b/media/jni/tuner/TunerClient.cpp
@@ -161,9 +161,11 @@
     if (mTuner != NULL) {
         // TODO: pending aidl interface
         sp<DemuxClient> demuxClient = new DemuxClient();
-        sp<IDemux> hidlDemux = openHidlDemux();
+        int demuxId;
+        sp<IDemux> hidlDemux = openHidlDemux(demuxId);
         if (hidlDemux != NULL) {
             demuxClient->setHidlDemux(hidlDemux);
+            demuxClient->setId(demuxId);
             return demuxClient;
         }
     }
@@ -177,8 +179,24 @@
 }
 
 sp<DescramblerClient> TunerClient::openDescrambler(int /*descramblerHandle*/) {
-    return NULL;
-}
+    if (mTunerService != NULL) {
+        // TODO: handle error code
+        /*shared_ptr<ITunerDescrambler> tunerDescrambler;
+        mTunerService->openDescrambler(demuxHandle, &tunerDescrambler);
+        return new DescramblerClient(tunerDescrambler);*/
+    }
+
+    if (mTuner != NULL) {
+        // TODO: pending aidl interface
+        sp<DescramblerClient> descramblerClient = new DescramblerClient();
+        sp<IDescrambler> hidlDescrambler = openHidlDescrambler();
+        if (hidlDescrambler != NULL) {
+            descramblerClient->setHidlDescrambler(hidlDescrambler);
+            return descramblerClient;
+        }
+    }
+
+    return NULL;}
 
 sp<LnbClient> TunerClient::openLnb(int lnbHandle) {
     if (mTunerService != NULL) {
@@ -272,12 +290,13 @@
     return res;
 }
 
-sp<IDemux> TunerClient::openHidlDemux() {
+sp<IDemux> TunerClient::openHidlDemux(int& demuxId) {
     sp<IDemux> demux;
     Result res;
 
-    mTuner->openDemux([&](Result result, uint32_t /*id*/, const sp<IDemux>& demuxSp) {
+    mTuner->openDemux([&](Result result, uint32_t id, const sp<IDemux>& demuxSp) {
         demux = demuxSp;
+        demuxId = id;
         res = result;
     });
     if (res != Result::SUCCESS || demux == nullptr) {
@@ -318,6 +337,22 @@
     return lnb;
 }
 
+sp<IDescrambler> TunerClient::openHidlDescrambler() {
+    sp<IDescrambler> descrambler;
+    Result res;
+
+    mTuner->openDescrambler([&](Result r, const sp<IDescrambler>& descramblerSp) {
+        res = r;
+        descrambler = descramblerSp;
+    });
+
+    if (res != Result::SUCCESS || descrambler == NULL) {
+        return NULL;
+    }
+
+    return descrambler;
+}
+
 FrontendInfo TunerClient::FrontendInfoAidlToHidl(TunerServiceFrontendInfo aidlFrontendInfo) {
     FrontendInfo hidlFrontendInfo {
         .type = static_cast<FrontendType>(aidlFrontendInfo.type),