summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorDavid Christie <dnchrist@google.com>2015-04-12 20:57:57 -0700
committerDavid Christie <dnchrist@google.com>2015-04-13 17:25:27 -0700
commit15003f19e5e5a443222569401f167a3ac0e1de3a (patch)
tree74259f8732f9e5aa7cc8bb96b1d44d7d8ebdb59c /services
parentffca45a2cdd778e6edd5c3959bf53c6192b7e035 (diff)
downloadframeworks_base-15003f19e5e5a443222569401f167a3ac0e1de3a.zip
frameworks_base-15003f19e5e5a443222569401f167a3ac0e1de3a.tar.gz
frameworks_base-15003f19e5e5a443222569401f167a3ac0e1de3a.tar.bz2
Add a status callback for location batching in FLP HAL
-Allows GmsCore to know when location is unsuccessful so it can switch to a SW solution. Change-Id: I3d1df7b828f7fb189446881eea87d9a952310614
Diffstat (limited to 'services')
-rw-r--r--services/core/java/com/android/server/location/FlpHardwareProvider.java14
-rw-r--r--services/core/jni/com_android_server_location_FlpHardwareProvider.cpp21
2 files changed, 34 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/location/FlpHardwareProvider.java b/services/core/java/com/android/server/location/FlpHardwareProvider.java
index 94a1cd8..f41d930 100644
--- a/services/core/java/com/android/server/location/FlpHardwareProvider.java
+++ b/services/core/java/com/android/server/location/FlpHardwareProvider.java
@@ -136,6 +136,20 @@ public class FlpHardwareProvider {
maybeSendCapabilities();
}
+ private void onBatchingStatus(int status) {
+ IFusedLocationHardwareSink sink;
+ synchronized (mLocationSinkLock) {
+ sink = mLocationSink;
+ }
+ try {
+ if (sink != null) {
+ sink.onStatusChanged(status);
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "RemoteException calling onBatchingStatus");
+ }
+ }
+
private void maybeSendCapabilities() {
IFusedLocationHardwareSink sink;
boolean haveBatchingCapabilities;
diff --git a/services/core/jni/com_android_server_location_FlpHardwareProvider.cpp b/services/core/jni/com_android_server_location_FlpHardwareProvider.cpp
index 5b5634b..81cdcb0 100644
--- a/services/core/jni/com_android_server_location_FlpHardwareProvider.cpp
+++ b/services/core/jni/com_android_server_location_FlpHardwareProvider.cpp
@@ -34,6 +34,7 @@ static hw_device_t* sHardwareDevice = NULL;
static jmethodID sOnLocationReport = NULL;
static jmethodID sOnDataReport = NULL;
static jmethodID sOnBatchingCapabilities = NULL;
+static jmethodID sOnBatchingStatus = NULL;
static jmethodID sOnGeofenceTransition = NULL;
static jmethodID sOnGeofenceMonitorStatus = NULL;
static jmethodID sOnGeofenceAdd = NULL;
@@ -100,6 +101,19 @@ static void BatchingCapabilitiesCallback(int32_t capabilities) {
CheckExceptions(sCallbackEnv, __FUNCTION__);
}
+static void BatchingStatusCallback(int32_t status) {
+ if(!IsValidCallbackThread()) {
+ return;
+ }
+
+ sCallbackEnv->CallVoidMethod(
+ sCallbacksObj,
+ sOnBatchingStatus,
+ status
+ );
+ CheckExceptions(sCallbackEnv, __FUNCTION__);
+}
+
static int SetThreadEvent(ThreadEvent event) {
JavaVM* javaVm = AndroidRuntime::getJavaVM();
@@ -175,6 +189,10 @@ static void ClassInit(JNIEnv* env, jclass clazz) {
clazz,
"onBatchingCapabilities",
"(I)V");
+ sOnBatchingStatus = env->GetMethodID(
+ clazz,
+ "onBatchingStatus",
+ "(I)V");
sOnGeofencingCapabilities = env->GetMethodID(
clazz,
"onGeofencingCapabilities",
@@ -558,7 +576,8 @@ FlpCallbacks sFlpCallbacks = {
AcquireWakelock,
ReleaseWakelock,
SetThreadEvent,
- BatchingCapabilitiesCallback
+ BatchingCapabilitiesCallback,
+ BatchingStatusCallback
};
static void ReportData(char* data, int length) {