From cfbdcd259497ec5800028074ae487e5d4f112e5c Mon Sep 17 00:00:00 2001 From: destradaa Date: Wed, 30 Apr 2014 11:29:11 -0700 Subject: [PATCH] Make sure the FlpHardwareProvider is only advertised to GmsCore if the platform supports it. b/14117917 Change-Id: Id6c2444893bcf192049e3233d1296eac16fcf826 --- .../server/LocationManagerService.java | 48 ++++++++++--------- .../server/location/FlpHardwareProvider.java | 6 +-- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java index 62deec23663b3..d6ecb4663da39 100644 --- a/services/core/java/com/android/server/LocationManagerService.java +++ b/services/core/java/com/android/server/LocationManagerService.java @@ -426,29 +426,33 @@ public class LocationManagerService extends ILocationManager.Stub { Slog.e(TAG, "no geocoder provider found"); } - // bind to fused provider - FlpHardwareProvider flpHardwareProvider = FlpHardwareProvider.getInstance(mContext); - FusedProxy fusedProxy = FusedProxy.createAndBind( - mContext, - mLocationHandler, - flpHardwareProvider.getLocationHardware(), - com.android.internal.R.bool.config_enableFusedLocationOverlay, - com.android.internal.R.string.config_fusedLocationProviderPackageName, - com.android.internal.R.array.config_locationProviderPackageNames); - if(fusedProxy == null) { - Slog.e(TAG, "No FusedProvider found."); - } + // bind to fused provider if supported + if (FlpHardwareProvider.isSupported()) { + FlpHardwareProvider flpHardwareProvider = FlpHardwareProvider.getInstance(mContext); + FusedProxy fusedProxy = FusedProxy.createAndBind( + mContext, + mLocationHandler, + flpHardwareProvider.getLocationHardware(), + com.android.internal.R.bool.config_enableFusedLocationOverlay, + com.android.internal.R.string.config_fusedLocationProviderPackageName, + com.android.internal.R.array.config_locationProviderPackageNames); + if(fusedProxy == null) { + Slog.e(TAG, "Unable to bind FusedProxy."); + } - // bind to geofence provider - GeofenceProxy provider = GeofenceProxy.createAndBind(mContext, - com.android.internal.R.bool.config_enableGeofenceOverlay, - com.android.internal.R.string.config_geofenceProviderPackageName, - com.android.internal.R.array.config_locationProviderPackageNames, - mLocationHandler, - gpsProvider.getGpsGeofenceProxy(), - flpHardwareProvider.getGeofenceHardware()); - if (provider == null) { - Slog.e(TAG, "no geofence provider found"); + // bind to geofence provider + GeofenceProxy provider = GeofenceProxy.createAndBind(mContext, + com.android.internal.R.bool.config_enableGeofenceOverlay, + com.android.internal.R.string.config_geofenceProviderPackageName, + com.android.internal.R.array.config_locationProviderPackageNames, + mLocationHandler, + gpsProvider.getGpsGeofenceProxy(), + flpHardwareProvider.getGeofenceHardware()); + if (provider == null) { + Slog.e(TAG, "Unable to bind FLP Geofence proxy."); + } + } else { + Slog.e(TAG, "FLP HAL not supported."); } String[] testProviderStrings = resources.getStringArray( diff --git a/services/core/java/com/android/server/location/FlpHardwareProvider.java b/services/core/java/com/android/server/location/FlpHardwareProvider.java index 79f192d8c9398..09f1c567dd593 100644 --- a/services/core/java/com/android/server/location/FlpHardwareProvider.java +++ b/services/core/java/com/android/server/location/FlpHardwareProvider.java @@ -69,6 +69,7 @@ public class FlpHardwareProvider { sSingletonInstance = new FlpHardwareProvider(context); } + nativeInit(); return sSingletonInstance; } @@ -96,6 +97,7 @@ public class FlpHardwareProvider { } public static boolean isSupported() { + nativeInit(); return nativeIsSupported(); } @@ -216,9 +218,9 @@ public class FlpHardwareProvider { // Core members private static native void nativeClassInit(); private static native boolean nativeIsSupported(); + private static native void nativeInit(); // FlpLocationInterface members - private native void nativeInit(); private native int nativeGetBatchSize(); private native void nativeStartBatching(int requestId, FusedBatchOptions options); private native void nativeUpdateBatchingOptions(int requestId, FusedBatchOptions optionsObject); @@ -258,12 +260,10 @@ public class FlpHardwareProvider { public static final String GEOFENCING = "Geofencing"; public IFusedLocationHardware getLocationHardware() { - nativeInit(); return mLocationHardware; } public IFusedGeofenceHardware getGeofenceHardware() { - nativeInit(); return mGeofenceHardwareService; }