diff options
author | David Christie <dnchrist@google.com> | 2015-04-12 20:57:57 -0700 |
---|---|---|
committer | David Christie <dnchrist@google.com> | 2015-04-13 17:25:27 -0700 |
commit | 15003f19e5e5a443222569401f167a3ac0e1de3a (patch) | |
tree | 74259f8732f9e5aa7cc8bb96b1d44d7d8ebdb59c /services | |
parent | ffca45a2cdd778e6edd5c3959bf53c6192b7e035 (diff) | |
download | frameworks_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.java | 14 | ||||
-rw-r--r-- | services/core/jni/com_android_server_location_FlpHardwareProvider.cpp | 21 |
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) { |