summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Shubham Dubey <dubeyshubham@google.com> 2022-02-01 07:40:24 +0000
committer Shubham Dubey <dubeyshubham@google.com> 2022-02-01 07:41:14 +0000
commit2b1010003e848b2246babb8d7d5f7cadf24635c0 (patch)
treebb3e79deb5061dcc4acdcb7f412667320cc567cc
parent454aff818016f91fe9a73b0ce25ba59dc963f024 (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.bp1
-rw-r--r--services/core/jni/com_android_server_location_GnssLocationProvider.cpp98
-rw-r--r--services/core/jni/gnss/Android.bp2
-rw-r--r--services/core/jni/gnss/GnssVisibilityControl.cpp84
-rw-r--r--services/core/jni/gnss/GnssVisibilityControl.h70
-rw-r--r--services/core/jni/gnss/GnssVisibilityControlCallback.cpp87
-rw-r--r--services/core/jni/gnss/GnssVisibilityControlCallback.h137
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