diff --git a/services/core/jni/gnss/Gnss.cpp b/services/core/jni/gnss/Gnss.cpp index f6459eaa444ef..8934c3a6abde7 100644 --- a/services/core/jni/gnss/Gnss.cpp +++ b/services/core/jni/gnss/Gnss.cpp @@ -170,7 +170,15 @@ jboolean GnssHal::isSupported() { } void GnssHal::linkToDeath() { - // TODO: linkToDeath for AIDL HAL + if (gnssHalAidl != nullptr) { + gnssHalDeathRecipientAidl = new GnssDeathRecipientAidl(); + status_t linked = IInterface::asBinder(gnssHalAidl)->linkToDeath(gnssHalDeathRecipientAidl); + if (linked != OK) { + ALOGE("Unable to link to GNSS AIDL HAL death notification"); + } else { + ALOGD("Successfully linked to GNSS AIDL HAl death notification"); + } + } if (gnssHal != nullptr) { gnssHalDeathRecipient = new GnssDeathRecipient(); diff --git a/services/core/jni/gnss/Gnss.h b/services/core/jni/gnss/Gnss.h index c6743d62af459..458da8a6e5142 100644 --- a/services/core/jni/gnss/Gnss.h +++ b/services/core/jni/gnss/Gnss.h @@ -28,6 +28,7 @@ #include #include #include +#include #include #include "AGnss.h" @@ -50,13 +51,24 @@ namespace android::gnss { struct GnssDeathRecipient : virtual public hardware::hidl_death_recipient { // hidl_death_recipient interface virtual void serviceDied(uint64_t cookie, const wp& who) override { - ALOGE("IGNSS hidl service failed, trying to recover..."); + ALOGE("GNSS HIDL service failed, trying to recover..."); + onServiceDied(); + } + static void onServiceDied() { JNIEnv* env = android::AndroidRuntime::getJNIEnv(); env->CallVoidMethod(android::mCallbacksObj, method_reportGnssServiceDied); } }; +struct GnssDeathRecipientAidl : virtual public IBinder::DeathRecipient { + // IBinder::DeathRecipient implementation + virtual void binderDied(const wp& who) override { + ALOGE("GNSS AIDL service failed, trying to recover..."); + GnssDeathRecipient::onServiceDied(); + } +}; + class GnssHal { public: GnssHal(); @@ -109,6 +121,7 @@ public: private: sp gnssHalDeathRecipient = nullptr; + sp gnssHalDeathRecipientAidl = nullptr; sp gnssHal = nullptr; sp gnssHal_V1_1 = nullptr; sp gnssHal_V2_0 = nullptr;