Check if the tuner feature is supported before waiting for the TRM
service

Test: local tested on Cuttlefish
Bug: 181350336
Change-Id: Id1b3a484cff5b907ac0bad770498fb744d50ac95
diff --git a/services/tuner/Android.bp b/services/tuner/Android.bp
index 63120f8..df2b4a3 100644
--- a/services/tuner/Android.bp
+++ b/services/tuner/Android.bp
@@ -81,6 +81,7 @@
         "android.hardware.tv.tuner@1.0",
         "android.hardware.tv.tuner@1.1",
         "libbase",
+        "libbinder",
         "libbinder_ndk",
         "libcutils",
         "libfmq",
diff --git a/services/tuner/TunerService.cpp b/services/tuner/TunerService.cpp
index 9624e27..77e1c40 100644
--- a/services/tuner/TunerService.cpp
+++ b/services/tuner/TunerService.cpp
@@ -17,6 +17,8 @@
 #define LOG_TAG "TunerService"
 
 #include <android/binder_manager.h>
+#include <android/content/pm/IPackageManagerNative.h>
+#include <binder/IServiceManager.h>
 #include <utils/Log.h>
 #include "TunerService.h"
 #include "TunerFrontend.h"
@@ -50,6 +52,33 @@
 namespace android {
 
 TunerService::TunerService() {
+    sp<IServiceManager> serviceMgr = defaultServiceManager();
+    sp<content::pm::IPackageManagerNative> packageMgr;
+    if (serviceMgr.get() == nullptr) {
+        ALOGE("%s: Cannot find service manager", __func__);
+        return;
+    } else {
+        sp<IBinder> binder = serviceMgr->waitForService(String16("package_native"));
+        packageMgr = interface_cast<content::pm::IPackageManagerNative>(binder);
+    }
+
+    bool hasFeature = false;
+    if (packageMgr != nullptr) {
+        binder::Status status = packageMgr->hasSystemFeature(FEATURE_TUNER, 0, &hasFeature);
+        if (!status.isOk()) {
+            ALOGE("%s: hasSystemFeature failed: %s",
+                    __func__, status.exceptionMessage().c_str());
+            return;
+        }
+        if (!hasFeature) {
+            ALOGD("Current device does not support tuner feaure.");
+            return;
+        }
+    } else {
+        ALOGD("%s: Cannot find package manager.", __func__);
+        return;
+    }
+
     ::ndk::SpAIBinder binder(AServiceManager_waitForService("tv_tuner_resource_mgr"));
     mTunerResourceManager = ITunerResourceManager::fromBinder(binder);
     updateTunerResources();
diff --git a/services/tuner/TunerService.h b/services/tuner/TunerService.h
index 0570681..f8e2ee6 100644
--- a/services/tuner/TunerService.h
+++ b/services/tuner/TunerService.h
@@ -72,6 +72,8 @@
 const static int TUNER_HAL_VERSION_UNKNOWN = 0;
 const static int TUNER_HAL_VERSION_1_0 = 1 << 16;
 const static int TUNER_HAL_VERSION_1_1 = (1 << 16) | 1;
+// System Feature defined in PackageManager
+static const ::android::String16 FEATURE_TUNER(::android::String16("android.hardware.tv.tuner"));
 
 typedef enum {
     FRONTEND,