diff options
| author | 2022-02-01 07:40:24 +0000 | |
|---|---|---|
| committer | 2022-02-01 07:41:14 +0000 | |
| commit | 2b1010003e848b2246babb8d7d5f7cadf24635c0 (patch) | |
| tree | bb3e79deb5061dcc4acdcb7f412667320cc567cc | |
| parent | 454aff818016f91fe9a73b0ce25ba59dc963f024 (diff) | |
Revert "Add GnssVisibilityControl AIDL HAL (frameworks/base)"
This reverts commit 454aff818016f91fe9a73b0ce25ba59dc963f024.
Reason for revert: Causing boot failures
BUG: 217304780
Change-Id: I5a5591a4684677ce7d47782ebe78f1158a5b0b05
| -rw-r--r-- | services/core/jni/Android.bp | 1 | ||||
| -rw-r--r-- | services/core/jni/com_android_server_location_GnssLocationProvider.cpp | 98 | ||||
| -rw-r--r-- | services/core/jni/gnss/Android.bp | 2 | ||||
| -rw-r--r-- | services/core/jni/gnss/GnssVisibilityControl.cpp | 84 | ||||
| -rw-r--r-- | services/core/jni/gnss/GnssVisibilityControl.h | 70 | ||||
| -rw-r--r-- | services/core/jni/gnss/GnssVisibilityControlCallback.cpp | 87 | ||||
| -rw-r--r-- | services/core/jni/gnss/GnssVisibilityControlCallback.h | 137 |
7 files changed, 76 insertions, 403 deletions
diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp index 63f08539bdff..95ef5f76b765 100644 --- a/services/core/jni/Android.bp +++ b/services/core/jni/Android.bp @@ -160,6 +160,7 @@ cc_defaults { "android.hardware.gnss@2.0", "android.hardware.gnss@2.1", "android.hardware.gnss.measurement_corrections@1.0", + "android.hardware.gnss.visibility_control@1.0", "android.hardware.graphics.bufferqueue@1.0", "android.hardware.graphics.bufferqueue@2.0", "android.hardware.graphics.common@1.2", diff --git a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp index f24ea38a0e7b..0da8f7ef0dea 100644 --- a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp +++ b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp @@ -37,6 +37,7 @@ #include <android/hardware/gnss/BnGnssPsdsCallback.h> #include <android/hardware/gnss/measurement_corrections/1.0/IMeasurementCorrections.h> #include <android/hardware/gnss/measurement_corrections/1.1/IMeasurementCorrections.h> +#include <android/hardware/gnss/visibility_control/1.0/IGnssVisibilityControl.h> #include <binder/IServiceManager.h> #include <nativehelper/JNIHelp.h> #include <pthread.h> @@ -58,7 +59,6 @@ #include "gnss/GnssGeofence.h" #include "gnss/GnssMeasurement.h" #include "gnss/GnssNavigationMessage.h" -#include "gnss/GnssVisibilityControl.h" #include "gnss/Utils.h" #include "hardware_legacy/power.h" #include "jni.h" @@ -162,6 +162,9 @@ using IMeasurementCorrections_V1_1 = android::hardware::gnss::measurement_correc using android::hardware::gnss::measurement_corrections::V1_0::IMeasurementCorrectionsCallback; using android::hardware::gnss::measurement_corrections::V1_0::GnssSingleSatCorrectionFlags; +using android::hardware::gnss::visibility_control::V1_0::IGnssVisibilityControl; +using android::hardware::gnss::visibility_control::V1_0::IGnssVisibilityControlCallback; + using android::hardware::gnss::BlocklistedSource; using android::hardware::gnss::GnssConstellationType; using android::hardware::gnss::GnssPowerStats; @@ -207,6 +210,7 @@ sp<IGnssNi> gnssNiIface = nullptr; sp<IGnssPowerIndication> gnssPowerIndicationIface = nullptr; sp<IMeasurementCorrections_V1_0> gnssCorrectionsIface_V1_0 = nullptr; sp<IMeasurementCorrections_V1_1> gnssCorrectionsIface_V1_1 = nullptr; +sp<IGnssVisibilityControl> gnssVisibilityControlIface = nullptr; sp<IGnssAntennaInfo> gnssAntennaInfoIface = nullptr; std::unique_ptr<GnssConfigurationInterface> gnssConfigurationIface = nullptr; @@ -217,7 +221,6 @@ std::unique_ptr<android::gnss::GnssGeofenceInterface> gnssGeofencingIface = null std::unique_ptr<android::gnss::AGnssInterface> agnssIface = nullptr; std::unique_ptr<android::gnss::GnssDebugInterface> gnssDebugIface = nullptr; std::unique_ptr<android::gnss::AGnssRilInterface> agnssRilIface = nullptr; -std::unique_ptr<android::gnss::GnssVisibilityControlInterface> gnssVisibilityControlIface = nullptr; #define WAKE_LOCK_NAME "GPS" @@ -855,6 +858,54 @@ Return<void> GnssNiCallback::niNotifyCb( return Void(); } +/* + * GnssVisibilityControlCallback implements callback methods of IGnssVisibilityControlCallback.hal. + */ +struct GnssVisibilityControlCallback : public IGnssVisibilityControlCallback { + Return<void> nfwNotifyCb(const IGnssVisibilityControlCallback::NfwNotification& notification) + override; + Return<bool> isInEmergencySession() override; +}; + +Return<void> GnssVisibilityControlCallback::nfwNotifyCb( + const IGnssVisibilityControlCallback::NfwNotification& notification) { + JNIEnv* env = getJniEnv(); + jstring proxyAppPackageName = env->NewStringUTF(notification.proxyAppPackageName.c_str()); + jstring otherProtocolStackName = env->NewStringUTF(notification.otherProtocolStackName.c_str()); + jstring requestorId = env->NewStringUTF(notification.requestorId.c_str()); + + if (proxyAppPackageName && otherProtocolStackName && requestorId) { + env->CallVoidMethod(mCallbacksObj, method_reportNfwNotification, proxyAppPackageName, + notification.protocolStack, otherProtocolStackName, + notification.requestor, requestorId, notification.responseType, + notification.inEmergencyMode, notification.isCachedLocation); + } else { + ALOGE("%s: OOM Error\n", __func__); + } + + if (requestorId) { + env->DeleteLocalRef(requestorId); + } + + if (otherProtocolStackName) { + env->DeleteLocalRef(otherProtocolStackName); + } + + if (proxyAppPackageName) { + env->DeleteLocalRef(proxyAppPackageName); + } + + checkAndClearExceptionFromCallback(env, __FUNCTION__); + return Void(); +} + +Return<bool> GnssVisibilityControlCallback::isInEmergencySession() { + JNIEnv* env = getJniEnv(); + auto result = env->CallBooleanMethod(mCallbacksObj, method_isInEmergencySession); + checkAndClearExceptionFromCallback(env, __FUNCTION__); + return result; +} + /* Initializes the GNSS service handle. */ static void android_location_gnss_hal_GnssNative_set_gps_service_handle() { gnssHalAidl = waitForVintfService<IGnssAidl>(); @@ -1271,21 +1322,12 @@ static void android_location_gnss_hal_GnssNative_init_once(JNIEnv* env, jobject } } - if (gnssHalAidl != nullptr && gnssHalAidl->getInterfaceVersion() >= 2) { - sp<android::hardware::gnss::visibility_control::IGnssVisibilityControl> - gnssVisibilityControlAidl; - auto status = gnssHalAidl->getExtensionGnssVisibilityControl(&gnssVisibilityControlAidl); - if (checkAidlStatus(status, - "Unable to get a handle to GnssVisibilityControl AIDL interface.")) { - gnssVisibilityControlIface = - std::make_unique<gnss::GnssVisibilityControlAidl>(gnssVisibilityControlAidl); - } - } else if (gnssHal_V2_0 != nullptr) { - auto gnssVisibilityControlHidl = gnssHal_V2_0->getExtensionVisibilityControl(); - if (checkHidlReturn(gnssVisibilityControlHidl, - "Unable to get a handle to GnssVisibilityControl HIDL interface")) { - gnssVisibilityControlIface = - std::make_unique<gnss::GnssVisibilityControlHidl>(gnssVisibilityControlHidl); + if (gnssHal_V2_0 != nullptr) { + auto gnssVisibilityControl = gnssHal_V2_0->getExtensionVisibilityControl(); + if (!gnssVisibilityControl.isOk()) { + ALOGD("Unable to get a handle to GnssVisibilityControl interface"); + } else { + gnssVisibilityControlIface = gnssVisibilityControl; } } @@ -1410,12 +1452,12 @@ static jboolean android_location_gnss_hal_GnssNative_init(JNIEnv* /* env */, jcl ALOGI("Unable to initialize IAGnssRil interface."); } - // Set IGnssVisibilityControl callback. + // Set IGnssVisibilityControl.hal callback. if (gnssVisibilityControlIface != nullptr) { - gnssVisibilityControlIface->setCallback( - std::make_unique<gnss::GnssVisibilityControlCallback>()); - } else { - ALOGI("Unable to initialize IGnssVisibilityControl interface."); + sp<IGnssVisibilityControlCallback> gnssVisibilityControlCbIface = + new GnssVisibilityControlCallback(); + auto result = gnssVisibilityControlIface->setCallback(gnssVisibilityControlCbIface); + checkHidlReturn(result, "IGnssVisibilityControl setCallback() failed."); } // Set IMeasurementCorrections.hal callback. @@ -2259,7 +2301,17 @@ static jboolean android_location_GnssVisibilityControl_enable_nfw_location_acces ALOGI("IGnssVisibilityControl interface not available."); return JNI_FALSE; } - return gnssVisibilityControlIface->enableNfwLocationAccess(env, proxyApps); + + const jsize length = env->GetArrayLength(proxyApps); + hidl_vec<hidl_string> hidlProxyApps(length); + for (int i = 0; i < length; ++i) { + jstring proxyApp = (jstring) (env->GetObjectArrayElement(proxyApps, i)); + ScopedJniString jniProxyApp(env, proxyApp); + hidlProxyApps[i] = jniProxyApp; + } + + auto result = gnssVisibilityControlIface->enableNfwLocationAccess(hidlProxyApps); + return checkHidlReturn(result, "IGnssVisibilityControl enableNfwLocationAccess() failed."); } static const JNINativeMethod sCoreMethods[] = { diff --git a/services/core/jni/gnss/Android.bp b/services/core/jni/gnss/Android.bp index bed72a8aa87c..d8de5a604b3d 100644 --- a/services/core/jni/gnss/Android.bp +++ b/services/core/jni/gnss/Android.bp @@ -38,8 +38,6 @@ cc_library_shared { "GnssMeasurementCallback.cpp", "GnssNavigationMessage.cpp", "GnssNavigationMessageCallback.cpp", - "GnssVisibilityControl.cpp", - "GnssVisibilityControlCallback.cpp", "Utils.cpp", ], } diff --git a/services/core/jni/gnss/GnssVisibilityControl.cpp b/services/core/jni/gnss/GnssVisibilityControl.cpp deleted file mode 100644 index a7bab9b1d88d..000000000000 --- a/services/core/jni/gnss/GnssVisibilityControl.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2021 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// Define LOG_TAG before <log/log.h> to overwrite the default value. -#define LOG_TAG "GnssVisibilityControlJni" - -#include "GnssVisibilityControl.h" - -#include "Utils.h" - -using IGnssVisibilityControlAidl = - android::hardware::gnss::visibility_control::IGnssVisibilityControl; -using IGnssVisibilityControlHidl = - android::hardware::gnss::visibility_control::V1_0::IGnssVisibilityControl; - -namespace android::gnss { - -// Implementation of GnssVisibilityControl (AIDL HAL) - -GnssVisibilityControlAidl::GnssVisibilityControlAidl( - const sp<IGnssVisibilityControlAidl>& iGnssVisibilityControl) - : mIGnssVisibilityControlAidl(iGnssVisibilityControl) { - assert(mIGnssVisibilityControlAidl != nullptr); -} - -jboolean GnssVisibilityControlAidl::setCallback( - const std::unique_ptr<GnssVisibilityControlCallback>& callback) { - auto status = mIGnssVisibilityControlAidl->setCallback(callback->getAidl()); - return checkAidlStatus(status, "IGnssVisibilityControlAidl setCallback() failed."); -} - -jboolean GnssVisibilityControlAidl::enableNfwLocationAccess(JNIEnv* env, jobjectArray proxyApps) { - int length = env->GetArrayLength(proxyApps); - std::vector<std::string> aidlProxyApps(length); - for (int i = 0; i < length; ++i) { - jstring proxyApp = (jstring)(env->GetObjectArrayElement(proxyApps, i)); - ScopedJniString jniProxyApp(env, proxyApp); - aidlProxyApps[i] = std::string(jniProxyApp.c_str()); - } - auto status = mIGnssVisibilityControlAidl->enableNfwLocationAccess(aidlProxyApps); - return checkAidlStatus(status, "IGnssVisibilityControlAidl enableNfwLocationAccess() failed"); -} - -// Implementation of GnssVisibilityControlHidl - -GnssVisibilityControlHidl::GnssVisibilityControlHidl( - const sp<IGnssVisibilityControlHidl>& iGnssVisibilityControl) - : mIGnssVisibilityControlHidl(iGnssVisibilityControl) { - assert(mIGnssVisibilityControlHidl != nullptr); -} - -jboolean GnssVisibilityControlHidl::setCallback( - const std::unique_ptr<GnssVisibilityControlCallback>& callback) { - auto result = mIGnssVisibilityControlHidl->setCallback(callback->getHidl()); - return checkHidlReturn(result, "IGnssVisibilityControlHidl setCallback() failed."); -} - -jboolean GnssVisibilityControlHidl::enableNfwLocationAccess(JNIEnv* env, jobjectArray proxyApps) { - const jsize length = env->GetArrayLength(proxyApps); - hardware::hidl_vec<hardware::hidl_string> hidlProxyApps(length); - for (int i = 0; i < length; ++i) { - jstring proxyApp = (jstring)(env->GetObjectArrayElement(proxyApps, i)); - ScopedJniString jniProxyApp(env, proxyApp); - hidlProxyApps[i] = jniProxyApp; - } - - auto result = mIGnssVisibilityControlHidl->enableNfwLocationAccess(hidlProxyApps); - return checkHidlReturn(result, "IGnssVisibilityControlHidl enableNfwLocationAccess() failed."); -} - -} // namespace android::gnss diff --git a/services/core/jni/gnss/GnssVisibilityControl.h b/services/core/jni/gnss/GnssVisibilityControl.h deleted file mode 100644 index e330a459a7a0..000000000000 --- a/services/core/jni/gnss/GnssVisibilityControl.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2021 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ANDROID_SERVER_GNSS_VISIBILITYCONTROL_H -#define _ANDROID_SERVER_GNSS_VISIBILITYCONTROL_H - -#pragma once - -#ifndef LOG_TAG -#error LOG_TAG must be defined before including this file. -#endif - -#include <android/hardware/gnss/visibility_control/BnGnssVisibilityControl.h> -#include <log/log.h> - -#include "GnssVisibilityControlCallback.h" -#include "jni.h" - -namespace android::gnss { - -class GnssVisibilityControlInterface { -public: - virtual ~GnssVisibilityControlInterface() {} - virtual jboolean enableNfwLocationAccess(JNIEnv* env, jobjectArray proxyApps) = 0; - virtual jboolean setCallback( - const std::unique_ptr<GnssVisibilityControlCallback>& callback) = 0; -}; - -class GnssVisibilityControlAidl : public GnssVisibilityControlInterface { -public: - GnssVisibilityControlAidl( - const sp<android::hardware::gnss::visibility_control::IGnssVisibilityControl>& - iGnssVisibilityControl); - jboolean enableNfwLocationAccess(JNIEnv* env, jobjectArray proxyApps) override; - jboolean setCallback(const std::unique_ptr<GnssVisibilityControlCallback>& callback) override; - -private: - const sp<android::hardware::gnss::visibility_control::IGnssVisibilityControl> - mIGnssVisibilityControlAidl; -}; - -class GnssVisibilityControlHidl : public GnssVisibilityControlInterface { -public: - GnssVisibilityControlHidl( - const sp<android::hardware::gnss::visibility_control::V1_0::IGnssVisibilityControl>& - iGnssVisibilityControl); - jboolean enableNfwLocationAccess(JNIEnv* env, jobjectArray proxyApps) override; - jboolean setCallback(const std::unique_ptr<GnssVisibilityControlCallback>& callback) override; - -private: - const sp<android::hardware::gnss::visibility_control::V1_0::IGnssVisibilityControl> - mIGnssVisibilityControlHidl; -}; - -} // namespace android::gnss - -#endif // _ANDROID_SERVER_GNSS_VISIBILITYCONTROL_H diff --git a/services/core/jni/gnss/GnssVisibilityControlCallback.cpp b/services/core/jni/gnss/GnssVisibilityControlCallback.cpp deleted file mode 100644 index 2a9fedd31dfd..000000000000 --- a/services/core/jni/gnss/GnssVisibilityControlCallback.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (C) 2021 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define LOG_TAG "GnssVisibilityControlCbJni" - -#include "GnssVisibilityControlCallback.h" - -namespace android::gnss { - -// using android::hardware::hidl_vec; -using binder::Status; -using hardware::Return; - -namespace { -jmethodID method_reportNfwNotification; -jmethodID method_isInEmergencySession; - -} // anonymous namespace - -void GnssVisibilityControl_class_init_once(JNIEnv* env, jclass clazz) { - method_reportNfwNotification = - env->GetMethodID(clazz, "reportNfwNotification", - "(Ljava/lang/String;BLjava/lang/String;BLjava/lang/String;BZZ)V"); - method_isInEmergencySession = env->GetMethodID(clazz, "isInEmergencySession", "()Z"); -} - -// Implementation of GnssVisibilityControlCallbackAidl class. - -Status GnssVisibilityControlCallbackAidl::nfwNotifyCb( - const android::hardware::gnss::visibility_control::IGnssVisibilityControlCallback:: - NfwNotification& notification) { - GnssVisibilityControlCallbackUtil::nfwNotifyCb(notification); - return Status::ok(); -} - -Status GnssVisibilityControlCallbackAidl::isInEmergencySession(bool* _aidl_return) { - *_aidl_return = GnssVisibilityControlCallbackUtil::isInEmergencySession(); - return Status::ok(); -} - -// Implementation of GnssVisibilityControlCallbackHidl class. - -Return<void> GnssVisibilityControlCallbackHidl::nfwNotifyCb( - const IGnssVisibilityControlCallback::NfwNotification& notification) { - GnssVisibilityControlCallbackUtil::nfwNotifyCb(notification); - return hardware::Void(); -} - -Return<bool> GnssVisibilityControlCallbackHidl::isInEmergencySession() { - return GnssVisibilityControlCallbackUtil::isInEmergencySession(); -} - -// Implementation of GnssVisibilityControlCallbackUtil class. - -bool GnssVisibilityControlCallbackUtil::isInEmergencySession() { - JNIEnv* env = getJniEnv(); - auto result = env->CallBooleanMethod(mCallbacksObj, method_isInEmergencySession); - checkAndClearExceptionFromCallback(env, __FUNCTION__); - return result; -} - -template <> -jstring ToJstring(JNIEnv* env, const String16& value) { - const char16_t* str = value.string(); - size_t len = value.size(); - return env->NewString(reinterpret_cast<const jchar*>(str), len); -} - -template <> -jstring ToJstring(JNIEnv* env, const hardware::hidl_string& value) { - return env->NewStringUTF(value.c_str()); -} - -} // namespace android::gnss diff --git a/services/core/jni/gnss/GnssVisibilityControlCallback.h b/services/core/jni/gnss/GnssVisibilityControlCallback.h deleted file mode 100644 index 28283efdc40e..000000000000 --- a/services/core/jni/gnss/GnssVisibilityControlCallback.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (C) 2021 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ANDROID_SERVER_GNSS_VISIBILITYCONTROLCALLBACK_H -#define _ANDROID_SERVER_GNSS_VISIBILITYCONTROLCALLBACK_H - -#pragma once - -#ifndef LOG_TAG -#error LOG_TAG must be defined before including this file. -#endif - -#include <android/hardware/gnss/visibility_control/1.0/IGnssVisibilityControl.h> -#include <android/hardware/gnss/visibility_control/BnGnssVisibilityControlCallback.h> -#include <log/log.h> - -#include "Utils.h" -#include "jni.h" - -namespace android::gnss { - -namespace { - -extern jmethodID method_reportNfwNotification; - -} // anonymous namespace - -void GnssNavigationMessage_class_init_once(JNIEnv* env, jclass clazz); - -/* - * GnssVisibilityControlCallbackAidl class implements the callback methods required by the - * android::hardware::gnss::visibility_control::IGnssVisibilityControlCallback interface. - */ -class GnssVisibilityControlCallbackAidl - : public hardware::gnss::visibility_control::BnGnssVisibilityControlCallback { -public: - GnssVisibilityControlCallbackAidl() {} - binder::Status nfwNotifyCb( - const android::hardware::gnss::visibility_control::IGnssVisibilityControlCallback:: - NfwNotification& notification) override; - binder::Status isInEmergencySession(bool* _aidl_return) override; -}; - -/* - * GnssVisibilityControlCallbackHidl implements callback methods of - * IGnssVisibilityControlCallback 1.0 interface. - */ -class GnssVisibilityControlCallbackHidl - : public android::hardware::gnss::visibility_control::V1_0::IGnssVisibilityControlCallback { -public: - GnssVisibilityControlCallbackHidl() {} - hardware::Return<void> nfwNotifyCb( - const IGnssVisibilityControlCallback::NfwNotification& notification) override; - hardware::Return<bool> isInEmergencySession() override; -}; - -class GnssVisibilityControlCallback { -public: - GnssVisibilityControlCallback() {} - sp<GnssVisibilityControlCallbackAidl> getAidl() { - if (callbackAidl == nullptr) { - callbackAidl = sp<GnssVisibilityControlCallbackAidl>::make(); - } - return callbackAidl; - } - - sp<GnssVisibilityControlCallbackHidl> getHidl() { - if (callbackHidl == nullptr) { - callbackHidl = sp<GnssVisibilityControlCallbackHidl>::make(); - } - return callbackHidl; - } - -private: - sp<GnssVisibilityControlCallbackAidl> callbackAidl; - sp<GnssVisibilityControlCallbackHidl> callbackHidl; -}; - -struct GnssVisibilityControlCallbackUtil { - template <class T> - static void nfwNotifyCb(const T& notification); - static bool isInEmergencySession(); - -private: - GnssVisibilityControlCallbackUtil() = delete; -}; - -template <class T> -static jstring ToJstring(JNIEnv* env, const T& value); - -template <class T> -void GnssVisibilityControlCallbackUtil::nfwNotifyCb(const T& notification) { - JNIEnv* env = getJniEnv(); - jstring proxyAppPackageName = ToJstring(env, notification.proxyAppPackageName); - jstring otherProtocolStackName = ToJstring(env, notification.otherProtocolStackName); - jstring requestorId = ToJstring(env, notification.requestorId); - - if (proxyAppPackageName && otherProtocolStackName && requestorId) { - env->CallVoidMethod(mCallbacksObj, method_reportNfwNotification, proxyAppPackageName, - notification.protocolStack, otherProtocolStackName, - notification.requestor, requestorId, notification.responseType, - notification.inEmergencyMode, notification.isCachedLocation); - } else { - ALOGE("%s: OOM Error\n", __func__); - } - - if (requestorId) { - env->DeleteLocalRef(requestorId); - } - - if (otherProtocolStackName) { - env->DeleteLocalRef(otherProtocolStackName); - } - - if (proxyAppPackageName) { - env->DeleteLocalRef(proxyAppPackageName); - } - - checkAndClearExceptionFromCallback(env, __FUNCTION__); -} - -} // namespace android::gnss - -#endif // _ANDROID_SERVER_GNSS_VISIBILITYCONTROLCALLBACK_H |