Connect existed TunerFilter/TunerDemux AIDL apis to TunerClient

This CL also resolved some TODO to handle aidl error messages

Test: make
Bug: 159067322
Change-Id: I6da66d1fa3989a501ec58bf1e0553f85a13e18db
diff --git a/media/jni/tuner/DemuxClient.cpp b/media/jni/tuner/DemuxClient.cpp
index 08b7398..7265dcc 100644
--- a/media/jni/tuner/DemuxClient.cpp
+++ b/media/jni/tuner/DemuxClient.cpp
@@ -23,20 +23,20 @@
 
 using ::aidl::android::media::tv::tuner::TunerFrontendSettings;
 
+using ::android::hardware::tv::tuner::V1_0::DemuxFilterMainType;
 using ::android::hardware::tv::tuner::V1_0::Result;
 
 namespace android {
 
 /////////////// DemuxClient ///////////////////////
 
-// TODO: pending aidl interface
-DemuxClient::DemuxClient() {
-    //mTunerDemux = tunerDemux;
+DemuxClient::DemuxClient(shared_ptr<ITunerDemux> tunerDemux) {
+    mTunerDemux = tunerDemux;
     mId = -1;
 }
 
 DemuxClient::~DemuxClient() {
-    //mTunerDemux = NULL;
+    mTunerDemux = NULL;
     mDemux = NULL;
     mId = -1;
 }
@@ -47,12 +47,10 @@
 }
 
 Result DemuxClient::setFrontendDataSource(sp<FrontendClient> frontendClient) {
-    // TODO: pending aidl interface
-    /*if (mTunerDemux != NULL) {
-        // TODO: handle error message
-        mTunerDemux->setFrontendDataSource(frontendClient->getAidlFrontend());
-        return (int) Result::SUCCESS;
-    }*/
+    if (mTunerDemux != NULL) {
+        Status s = mTunerDemux->setFrontendDataSource(frontendClient->getAidlFrontend());
+        return ClientHelper::getServiceSpecificErrorCode(s);
+    }
 
     if (mDemux != NULL) {
         Result res = mDemux->setFrontendDataSource(frontendClient->getId());
@@ -64,13 +62,23 @@
 
 sp<FilterClient> DemuxClient::openFilter(DemuxFilterType type, int bufferSize,
         sp<FilterClientCallback> cb) {
-    // TODO: pending aidl interface
+    if (mTunerDemux != NULL) {
+        shared_ptr<ITunerFilter> tunerFilter;
+        shared_ptr<TunerFilterCallback> callback =
+                ::ndk::SharedRefBase::make<TunerFilterCallback>(cb);
+        Status s = mTunerDemux->openFilter((int)type.mainType, getSubType(type),
+                    bufferSize, callback, &tunerFilter);
+        if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
+            return NULL;
+        }
+        return new FilterClient(type, tunerFilter);
+    }
 
     if (mDemux != NULL) {
         sp<HidlFilterCallback> callback = new HidlFilterCallback(cb);
         sp<IFilter> hidlFilter = openHidlFilter(type, bufferSize, callback);
         if (hidlFilter != NULL) {
-            sp<FilterClient> filterClient = new FilterClient(type);
+            sp<FilterClient> filterClient = new FilterClient(type, NULL);
             filterClient->setHidlFilter(hidlFilter);
             return filterClient;
         }
@@ -244,4 +252,21 @@
 
     return hidlDvr;
 }
+
+int DemuxClient::getSubType(DemuxFilterType filterType) {
+    switch (filterType.mainType) {
+        case DemuxFilterMainType::TS:
+            return (int)filterType.subType.tsFilterType();
+        case DemuxFilterMainType::MMTP:
+            return (int)filterType.subType.mmtpFilterType();
+        case DemuxFilterMainType::IP:
+            return (int)filterType.subType.ipFilterType();
+        case DemuxFilterMainType::TLV:
+            return (int)filterType.subType.tlvFilterType();
+        case DemuxFilterMainType::ALP:
+            return (int)filterType.subType.alpFilterType();
+        default:
+            return -1;
+    }
+}
 }  // namespace android