Commit Graph

104 Commits

Author SHA1 Message Date
John Firebaugh
5eda74a514 Merge branch 'release-ios-3.2.0-android-4.0.0' 2016-03-30 17:43:37 -07:00
Jason Wray
593f3d511a [ios] Make showAnnotations default padding proportional at smaller frame sizes 2016-03-29 15:17:04 -04:00
Jason Wray
d20795b891 [ios] Don't use negative content insets
When a map view was smaller than the entire viewport, negative content insets would be applied. Negative content insets would only be valid if the map view extended outside of its frame, which cannot happen.

Fixes #4440.
2016-03-29 15:17:04 -04:00
Minh Nguyễn
2a56565a9c [ios, osx] Wrap coordinates converted from points
ref #4444
2016-03-25 11:03:06 -07:00
Minh Nguyễn
b57f0fb987 [ios] Fix up center coordinate after lopsided pinch gesture
The gesture recognizer only reports the gesture’s current center point, so use the previous center point to anchor the transition.

Fixes #4315.
2016-03-22 10:52:10 -07:00
Jesse Bounds
b163e99499 [iOS] Send turnstile event as much as once per day
Previously, the post of the turnstile event was a side effect of the
map.load event and would happen when the host app was started from a
terminated state at the first initialization of MGLMapView. The
turnstile event post was guarded with dispatch_once so that it would
only ever be sent once during the lifecycle of the application after
it started from the terminated state.

This changes that behavior by:

- Allowing a new turnstile event to be posted as much as once per
day
- Only triggering a map.view event when a map is initialized if the map
is loaded outside of the 'background' application state
- Sending a map.view event whenever a MGLMapView is instantiated
and the application did become active or enters foreground

iOS turnstile event sending behavior is now:

- A map.view event is generated whenever a map is loaded and also
when a map is shown again when the host app becomes active and moves
into the foreground
- Turnstile events are still triggered by mapviews and will be sent as
frequently as once per day for a host app that is not terminated and
also whenever a host app is terminated and restarted
w
2016-03-21 14:09:11 -07:00
Jesse Bounds
4f816dcfbe [iOS] Increase distance filter to 5 m 2016-03-18 14:20:18 -07:00
Minh Nguyễn
b493bdc649 [ios, osx] Unified offline and ambient caches
There is now only one instance of mbgl::OfflineFileSource, created when the shared MGLOfflineStorage object is initialized. Also create and use the shared MGLOfflineStorage object when initializing an MGLMapView object. The unified cache file is located in a subdirectory of Application Support, where the SDK has control over the file’s lifetime. The subdirectory is already named after the host application’s bundle identifier, ensuring that each Mapbox-powered application has an independent tile limit. If there’s an ambient cache in a subdirectory of Caches, delete it. If there’s an offline cache in a subdirectory of Documents on iOS or Caches on OS X, move it to the unified cache location in a subdirectory of Application Support.

Fixes the iOS/OS X side of #4338.
2016-03-18 14:02:32 -07:00
Bruno de Oliveira Abinader
88cff6e29d [ios] Update class transition usage 2016-03-18 01:26:22 +02:00
Jesse Bounds
aa60d29534 [iOS] Use CFBundleIdentifier instead of CFBundleName in UA string
Although often recommended, CFBundleName is not guaranteed to exist in
an app's configuration. As an identifier of telemetry data, even when
it is present it can be inconsistent because of localization.

CFBundleIdentifier, although possibly longer, will be consistent
across locales and for the lifetime of an app in the App Store even
if the app name changes in any locale.
2016-03-17 14:01:48 -07:00
Bruno de Oliveira Abinader
8e30a4a080 [core] Harden Transform anchor & padding usage
Use optional values for anchor & padding in Map and Transform functions
instead of NaNs. Added unit tests to stress some edge cases.
2016-03-13 21:38:20 +02:00
Minh Nguyễn
e36218a866 [osx] Added OS X support for offline downloads 2016-03-10 17:08:58 -08:00
Minh Nguyễn
29688e2cd8 [ios] Disable implicit animation of user dot bounds
ref #1125
2016-03-10 12:03:26 -08:00
Jason Wray
64b163ee5d [ios] Add description strings to constituent classes 2016-03-10 13:48:00 -05:00
Minh Nguyễn
c2cd9335e9 [ios] Non-embedded static framework
Added a new ifabric Make target for packaging up a static framework similar to the one released as 3.0.1. Place artwork and certificate assets inside Mapbox.bundle inside Mapbox.framework. Link SystemConfiguration in the umbrella header.

Distinguish between the framework bundle and the resources bundle. For the dynamic frameworks and embedded static frameworks, the two are the same; for the non-embedded static framework, the latter resides inside the former.
2016-03-08 11:20:12 -08:00
Minh Nguyễn
0875a066cb [ios] Cleaned up NSLocalizedString usage
The format string would be localized, not the string resulting from expanding its placeholders. Also unindented a wildly indented block of code.
2016-03-05 21:49:57 -08:00
Minh Nguyễn
2d2ba3a482 [ios] Use MGLErrorDomain for errors 2016-03-05 21:44:22 -08:00
boundsj
d10d3eef43 [iOS] #4148 Update event serialization to the V2 specification.
This updates the endpoint for events to "v2" and updates
appUserTurnstile, map.load, map.click, map.dragend, and location
to the V2 spec.
2016-03-03 17:45:10 -08:00
Bruno de Oliveira Abinader
c17e954983 [android|ios|osx] Fix return type for pixelForLatLng 2016-03-01 20:58:54 +00:00
Bruno de Oliveira Abinader
4994b3dc57 [core] PrecisionPoint is now ScreenCoordinate 2016-03-01 20:58:54 +00:00
Jesse Bounds
09c9100891 Introduce MGLLocation Manager
https://github.com/mapbox/mapbox-gl-native/pull/4115

This change makes background data gathering more efficient by disabling
standard location updates when the device has been stationary for at
least five minutes. It also establishes region monitoring and
significant location change monitoring so that if the device appears to
be in motion again then background telemetry data collection can resume.
All of this reduces the amount of time required for telemetry data
collection to the time the device is in motion only. It also only
applies to host apps that already run in the background and have the
always location permission from their users.

This also includes some changes to make the internal pause/resume API of
the MGLMapboxEvents class less complex and autonomous. The side effects
of the map view waking or sleeping are no longer required for mapbox
events to work as intended.
2016-02-26 14:19:04 -08:00
Jesse Bounds
9a97a4d34f [ios] Introduce API Client
Addresses https://github.com/mapbox/mapbox-gl-native/issues/3704

This introduces a new utility class that wraps networking via
NSURLSession. All related code that used to live inside the telemetry
MGLMapboxEvents class has been pulled into the new MGLAPIClient.
An API client instance is used as a service by telemetry and can be
reused in the future when and if our networking needs grow or become
more complex.
2016-02-24 14:45:42 -08:00
Jesse Bounds
f3ff38d125 [ios] Reduce async complexity 2016-02-24 09:32:26 -08:00
Minh Nguyễn
17f44d7bd9 Merge branch 'release-ios-v3.1.0' 2016-02-24 09:06:43 -08:00
Minh Nguyễn
d836638407 [ios] Fixed zoom level for map feedback tool
The map feedback tool uses mapbox.js, so its zoom levels are one off the zoom levels used by Mapbox GL.
2016-02-22 09:44:43 -08:00
Jason Wray
15b9f3171a [ios] Refactor MGLMapView's location services
- Pause location services when the app goes to sleep; address iOS 8 blue bar issue.
- Only ask for location permissions if not already granted/denied.
- Cleanup usage of `.isDormant` → `.dormant`

Partially addresses #2945, for which a full and complete fix waits until #4030.
2016-02-19 13:14:54 -05:00
Jason Wray
390057b569 [ios] Set default polyline and polygon color to the map view tint color
Fixes #3927
2016-02-18 19:23:15 -05:00
Jesse Bounds
9891d0eb79 [iOS] Generate and send a turnstile event when map view event is queued
This change adds logic to push a turnstile event whenever a map view
event is queued. It guards against sending the turnstile event more
than once per session.

Note that `pushTurnstileEvent` is actually a "force push" in that it
flushes the queue and, since it enqueues a turnstile event, the
flush's call to `postEvents` will attempt to send any queued events
even if telemetry is paused. This has the side effect of defeating
the other queue / timing / flush logic in place whenever map load
(and now implicitly turnstile) events are pushed.
2016-02-15 11:35:07 -08:00
John Firebaugh
13e2acbc75 [ios, osx] Consolidate remaining files in platform/{ios,osx} 2016-02-12 14:53:52 -08:00
Minh Nguyễn
51d7d204db [ios, osx] Exclude misses from nearby annotations
After filtering out elements of a vector using std::remove_if(), it’s apparently necessary to resize the vector. Otherwise, removing only has the effect of shifting the non-matching items to the end of the vector. This change reduces the annotation tap target back to almost what it was before #3261, except that these days the target is centered around the annotation image rather than the center point. There remains a much smaller slop area around the annotation, but nothing close to the effective padding before this change.

Fixes #3880.
2016-02-10 22:02:46 -08:00
Minh Nguyễn
bd59ab9a52 [core, ios, osx] Only constrain after adding to a window
Introduced a setter/getter for constrain mode. On iOS and OS X, the zoom level inspectable causes the zoom level to be set independently from the longitude and latitude. Thus, the latitude inspectable had no effect because the latitude was constrained to 0 at z0. Temporarily removing the heightwise constraint allows the map to center on the intended location before zooming, which is the usual case for storyboards and XIBs. On iOS, the only guarantee we have timing-wise is that all the inspectables are applied after initialization but before the view is added to a window. So we reimpose the heightwise constraint as soon as the view is added to a window, that is, before the user has a chance to pan the map out of bounds.

Fixes #3868.
2016-02-10 15:15:29 -08:00
Minh Nguyễn
71611ec612 [ios, osx] Fixed crash reselecting annotation
Handle the case where the currently selected annotation isn’t one of the nearby annotations. This hasn’t come up before on OS X because clicking an annotation while another annotation is selected only dismisses the callout popover.

Fixes #3284.
2016-02-10 09:38:04 -08:00
Minh Nguyễn
2080d19764 [ios] Conform to SMCalloutViewDelegate
#3322 #3456 replaced SMCalloutViewDelegate conformance with MGLCalloutViewDelegate conformance. Unfortunately, the two protocols differ in some symbols. This change restores SMCalloutViewDelegate methods alongside MGLCalloutViewDelegate methods.

Fixes #3871.
2016-02-09 23:56:25 -08:00
Minh Nguyễn
35fdf32de5 [ios] Load categories in MGLAccountManager for Fabric
These categories need to be loaded explicitly so that they’re linked into the application binary. In the dynamic framework, they’re loaded inside the InitializeMapbox() framework initializer; for static frameworks, we recommend setting the -ObjC flag. Fabric uses the static framework without setting the -ObjC flag, so these redundant calls are needed.
2016-02-09 14:56:01 -08:00
Konstantin Käfer
2f06ca74e2 [core] move platform/gl.hpp to gl/gl.hpp 2016-02-08 12:50:00 +01:00
Minh Nguyễn
e8b8f5e493 [ios] Fixed designable warning when showing user location
Turn the Shows User Location inspectable into a no-op when running in the designables agent. Otherwise, we complain that the agent lacks Location Services permissions.
2016-02-03 11:14:09 -08:00
John Firebaugh
37c27f3a8f [core] Improve LatLngBounds API
* Use "named constructors": empty, world, hull
* Make the two-argument constructor lenient (i.e., it is a hull operation)
* Add various accessors
* Enforce a single empty representation
2016-02-02 23:04:18 -08:00
Minh Nguyễn
7694eebe88 [ios] Renamed -showAnnotations:withEdgeInsets:animated:
Renamed -showAnnotations:withEdgeInsets:animated: to -showAnnotations:edgePadding:animated: for consistency with other methods. Reworded documentation comments to avoid hard-coding too many specifics that are prone to getting outdated.
2016-02-01 20:55:55 -08:00
Jordan Moncharmont
909832624e Custom edgeInsets for fitting in showAnnotations
Keeps sensible defaults already in place, but allows callers to override.
2016-02-01 20:55:55 -08:00
Minh Nguyễn
6995452541 [ios] Restored toggleDebug
Restored (but deprecated) a method removed in #3100 to avoid a major version bump.
2016-01-28 22:36:58 -08:00
Minh Nguyễn
6b3b3f3ff6 [ios] Debug mask
Ported MGLMapDebugMaskOptions from the OS X SDK. Deprecated debugActive and -cycleDebugOptions.
2016-01-28 22:23:07 -08:00
Minh Nguyễn
8cdd02bc8f [ios] Eliminated “flashlight mode”
Avoid resetting user tracking state when going from location or course tracking mode to heading tracking mode.

Fixes #3710.
2016-01-28 17:57:44 -08:00
Ansis Brammanis
371a210be8 [ios] getters, setters for minZoom, maxZoom
adds:
minimumZoomLevel
setMinimumZoomLevel
maximumZoomLevel
setMaximumZoomLevel
2016-01-28 15:10:26 -08:00
Jesse Bounds
fab847c128 [ios] Remove incorrect tab whitespace in method
This just removes some whitespace that made the implementation of
`pushTurnstileEvent` in `MGLMapboxEvents` look a little strange.

The indentation was right below an early return conditional
(with no braces) so it felt like the right thing to do (for
readability) to clean it up. Choosing and enforcing a consistent style
for conditionals with one line might be a good idea, too, but this
small change does not go there.
2016-01-27 13:46:31 -08:00
Minh Nguyễn
a5283b5798 [ios] Update location after clearing target coordinate 2016-01-26 22:59:27 -08:00
Minh Nguyễn
8a23bdcd01 [core, ios, osx] Tilt around visual center point
The tilt gesture on both iOS and OS X now respects the content insets. On iOS, in user tracking mode, it additionally respects the user dot’s position if it’s aligned to the top or bottom of the view.
2016-01-26 18:49:01 -08:00
Minh Nguyễn
97fc2120c4 [ios] Fixed entering tracking mode at launch
Entering user tracking mode at launch now zooms in and shows the user dot or user puck. The user dot’s heading indicator now points in the correct direction during the animation to the initial location. Course changes are reflected immediately even in the absence of location changes.

Fixes #1145.
2016-01-26 18:48:56 -08:00
Minh Nguyễn
14c052f5ce [ios] Refactored location updates
Broke out -locationManager:didUpdateLocations:animated: into multiple self-contained methods, simplifying the logic considerably.

Eliminated a jump after device rotation in non-centered tracking mode.
2016-01-26 17:19:23 -08:00
Minh Nguyễn
7057a1bb4a [ios] Bifocal viewport in course tracking mode
When a targetCoordinate is specified in course tracking mode, the map automatically resizes the viewport to show both the user puck and the target, one at the top and the other at the bottom. The user puck now rotates its arrow in the course direction, no longer assuming that the viewport is facing the same way as the course.
2016-01-26 17:19:22 -08:00
Minh Nguyễn
c5017652b9 [ios] Turn map around when user dot is top-aligned
Also fixed top- and bottom-aligned user dot center points to account for the content inset’s offset within the map view bounds.
2016-01-26 17:19:22 -08:00