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,