Permalink
Browse files

- Add ability to detect if location was mocked

Summary:
Since API 18, Android locations have had the `isFromMockProvider()` function, to verify the validity of a provided location.  This was one of many methods one could verify location data, but as of Marshmallow, the other ways of detecting if "Mock Locations" is on in developer settings has been deprecated or defunct.

This means some devices can only detect location mocking by exposing the method on the location object.

This change provides that exposure.
Closes #9390

Differential Revision: D3858205

Pulled By: bestander

fbshipit-source-id: 3bae429cc0596ea01926c5be204f4403e4a2414f
  • Loading branch information...
1 parent f839627 commit c6024f6391a78502dee6f2841c53daf37a61ed6c @GantMan GantMan committed with Facebook Github Bot 1 Sep 20, 2016
@@ -31,7 +31,7 @@ type GeoOptions = {
}
/**
- * The Geolocation API follows the web spec:
+ * The Geolocation API extends the web spec:
* https://developer.mozilla.org/en-US/docs/Web/API/Geolocation
*
* As a browser polyfill, this API is available through the `navigator.geolocation`
@@ -48,6 +48,9 @@ type GeoOptions = {
*
* `<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />`
*
+ * Android API >= 18 Positions will also contain a `mocked` boolean to indicate if position
+ * was created from a mock provider.
+ *
*/
var Geolocation = {
@@ -214,6 +214,11 @@ private static WritableMap locationToMap(Location location) {
coords.putDouble("speed", location.getSpeed());
map.putMap("coords", coords);
map.putDouble("timestamp", location.getTime());
+
+ if (android.os.Build.VERSION.SDK_INT >= 18) {
+ map.putBoolean("mocked", location.isFromMockProvider());
+ }
+
return map;
}
View
@@ -0,0 +1,14 @@
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+declare class Position {
+ coords: Coordinates,
+ timestamp: number,
+ mocked: boolean,
+}

0 comments on commit c6024f6

Please sign in to comment.