Commit Graph

149 Commits

Author SHA1 Message Date
John Firebaugh
ce2a06e677 [core] Privatize math.hpp and vec.hpp 2016-05-05 11:16:57 -07:00
John Firebaugh
10e522d10b [core] Privatize various util headers (#4945) 2016-05-04 14:09:51 -07:00
Minh Nguyễn
9a280b8d9d [ios] Corrected map accessibility value
Corrected the English override strings for the map view’s accessibility value. Prior to this change, the accessibility value would say “0 annotation” instead of “0 annotations” for some reason.

The zoom level in the map view’s accessibility value is off by two.
2016-05-04 02:23:20 -07:00
Jason Wray
963ae18893 [ios] Fix analyzer's nullability complaints
- Redefine as local variables
- Check/assert that these local variables are not nil
2016-04-29 18:04:22 -04:00
Minh Nguyễn
51cd97861c [ios] Announce zoom level, visible annotations after zooming
Announce the zoom level and number of visible annotations after zooming using VoiceOver’s swipe up or swipe down gesture.

Works toward #4821.
2016-04-26 16:47:04 -07:00
Minh Nguyễn
8d5a6b515f [ios] Only post layout change notifications when focused
Constantly posting accessibility layout change notifications on every location change made it very difficult to stay focused on an accessibility element, be it the user dot or some other element. Now we only post the notification when the user dot is focused, user tracking mode is off (so the user dot actually has a chance to move around), and the application is active (not in the middle of application switching).
2016-04-26 14:19:10 -07:00
Minh Nguyễn
193a843013 [ios] Fixed ℹ️, user dot accessibility
The user location annotation view is created lazily, so if the user dot isn’t within view at launch, it doesn’t exist by the time UIKit first queries MGLMapView for child accessibility elements. This caused console spew about missing accessibility elements and prevented the ℹ️ from being visible to XCUITest.
2016-04-26 14:19:05 -07:00
Minh Nguyễn
27f77b6bfa [ios] Hide compass from VoiceOver when pointing north
Fixes #4820.
2016-04-26 00:16:20 -07:00
Jason Wray
8ce0fb4739 [ios] Update frame size when changing dot/puck mode
- Keeps the same center point
- `updateFrameWithSize:` does not take CGSize because there is not yet
  support for non-square user location annotations
2016-04-25 17:00:43 -04:00
Minh Nguyễn
d9a2a845de [ios] Added accessibility labels, hints, gestures
Fixed an issue where the “return to map” accessibility element lacked a label. Always update the title and subtitle of an annotation accessibility element, in case the title or subtitle changes from one showing to the next.

Added a hint for annotations. Use declarative rather than imperative for hints.

Marked the map view and its annotations as adjustable so that swiping up and down with VoiceOver zooms out and in, respectively.

Added accessibility values to toolbar buttons in iosapp.
2016-04-25 00:24:35 -07:00
Minh Nguyễn
7cc3928a19 [ios] Made annotation callouts accessible
Via nfarina/calloutview#84, SMCalloutView is now accessible. Activating a focused annotation now shows its callout view and focuses its left accessory view, if present, or the title view. There is a “return to map” accessibility element for dismissing the callout view and restoring focus to the annotation on the map.
2016-04-25 00:18:57 -07:00
Minh Nguyễn
9d3269eaa3 [ios] Restored user dot accessibility
Put the user dot back into rotation as an accessible element.
2016-04-25 00:18:06 -07:00
Minh Nguyễn
babc43ea62 [ios] Made annotations accessible
Lazily create and cache accessibility elements for visible annotations as UIAccessibility asks about them.

Sort the annotations’ accessibility elements by the annotations’ distance from the logical center (the center after accounting for padding, or the user dot when user tracking mode is on).

Updated the changelog.

Fixes #1493.
2016-04-25 00:17:02 -07:00
Minh Nguyễn
893a777a2f [ios] Made compass and user dot accessible
Made the compass behave like a button when visible. Added accessibility values and hints. The compass’s accessibility value uses the compass direction formatter. Turned off direct interaction with the map because it obscures the ornaments.

The user dot now reports the current coordinates. Its accessibility label now reflects its annotation’s title instead of the hardcoded label “User location”. (It’d be weird to address the VoiceOver user as “user”.)
2016-04-25 00:16:28 -07:00
Minh Nguyễn
9350075812 [ios] VoiceOver support for MGLMapView
Enabled direct interaction with `MGLMapView`, allowing for panning and so forth. Defined an accessibility value that announces the current center coordinate. Inset the map view accessibility frame to exclude ornaments from the interactive element.
2016-04-25 00:15:56 -07:00
Minh Nguyễn
f1200d47db [ios, osx] Made localizable strings unique; unlocalized iosapp
Assigned unique IDs to localizable English strings in code.

Made iosapp non-localizable. For the time being, it isn’t worth the trouble to localize more strings for this demo application than for the SDK itself.
2016-04-24 16:17:43 -07:00
Minh Nguyễn
6c9ca4be50 [ios] Made SDK and iosapp localizable
Made storyboards and strings throughout the SDK and iosapp localizable. Replaced the compass image with an unlabeled image. Draw a localizable string atop it at runtime.

Redefined NSLocalizedString() and NSLocalizedStringFromTable() macros to look at the SDK bundle rather than the main application bundle. This redefinition has no effect on the host application, because it’s in an internal header. That header must be included in all files that contain localizable strings. See NSBundle+MGLAdditions.h for a full explanation.

Added a make rule that runs genstrings and ensures UTF-8 output (since genstrings insists on UTF-16).

Use MGLCoordinateFormatter in iosapp for dropped pin callouts. Rely on subclasses of MGLPointAnnotation instead of annotation titles to distinguish between different kinds of point annotations.
2016-04-24 16:13:08 -07:00
Minh Nguyễn
3e22369f27 [ios, osx] Eliminated platform/{ios,osx}/include
Also updated various project references to be group-relative, so Xcode chooses the right directory by default when adding a new file.

Fixes #4770.
2016-04-23 10:35:59 -07:00
Minh Nguyễn
df0d1187da [ios, osx] Fixed direction, pitch restoration
Followup to #4790. Fixed a regression preventing the direction and pitch from being persisted across sessions.
2016-04-22 17:09:25 -07:00
Minh Nguyễn
466ed55200 [core, ios, osx] cameraThatFitsCoordinateBounds
Added an API to get a camera that you can pass into -[MGLMapView setCamera:] that fits the given coordinate bounds, by analogy with -[MKMapView regionThatFits:] or -[MKMapView mapRectThatFits:edgePadding:].

Added mbgl::Map::getCameraOptions() for getting the current camera options more conveniently.
2016-04-22 16:39:25 -07:00
Minh Nguyễn
1039f21527 [ios, osx] Fixed dangling KVO observer crash
Fixed a crash when deallocating an MGLMapView that has point annotations. Now we explicitly remove all the annotations from the view and thus remove all remaining KVO observers on those annotations.

Fixes #4805.
2016-04-22 15:43:55 -07:00
Minh Nguyễn
2aaa8b9474 [ios, osx] Ignore invalid observation context
If a subclass of MGLMapView registers itself as an observer of a non-multipoint annotation’s coordinate key path but fails to handle the change in its -observeValueForKeyPath:ofObject:change:context: implementation, the context would likely be a value other than the annotation’s tag. In that case, avoid doing anything in response to the coordinate changing. Even if the context in that case happens to match the annotation’s tag – say, because the developer passed in NULL (which is equal to 0) for the first added annotation (which would have a tag of 0) – the result would be an unnecessary but harmless update.
2016-04-20 14:23:57 -07:00
Minh Nguyễn
72086edb6e [ios, osx] Avoid observing coordinate on MGLMultiPoint
There’s no point observing the coordinate key path on MGLMultiPoint, since that property is immutable. Use the observation context instead of performing an annotation tag lookup when a coordinate has changed.
2016-04-20 14:23:57 -07:00
Minh Nguyễn
268884368a [ios, osx] Fixed crash removing multipoint or duplicate annotation
Fixed a crash removing a polyline or polygon by observing the coordinate key path on all annotations, not just non-MGLMultiPoints.

Pass in the annotation tag as the observation context. This fixes a crash when an annotation is added to the map view more than once, then removed more than once.
2016-04-20 14:23:57 -07:00
Minh Nguyễn
de0705c7ed [ios, osx] Use HTML links in documentation
Replaced Markdown syntax with HTML syntax for hyperlinks in documentation comments. HTML links work both inside Xcode (whether Objective-C or Swift) and on the Web (via jazzy).

Fixes #3961.
2016-04-20 07:41:05 -07:00
Minh Nguyễn
f8c52d5d38 [osx] Observe annotation coordinates
MGLMapView observes changes to the coordinate property of each MGLAnnotation added to it. Changing the coordinate property in a KVO-compliant way causes the annotation to be relocated and its callout view, if present, to be dismissed. To avoid observing the same annotation twice yet also avoid expensive lookups when adding or removing annotations, MGLMapView indexes added point annotations in an NSMutableSet.
2016-04-19 14:24:59 -07:00
Minh Nguyễn
3976448479 [ios] Refactored annotation image updating 2016-04-19 14:24:59 -07:00
Minh Nguyễn
8a4c2d4b0e [ios] Observe annotation coordinates
MGLMapView observes changes to the coordinate property of each MGLAnnotation added to it. Changing the coordinate property in a KVO-compliant way causes the annotation to be relocated and its callout view, if present, to be dismissed. To avoid observing the same annotation twice yet also avoid expensive lookups when adding or removing annotations, MGLMapView indexes added point annotations in an NSMutableSet.

In iosapp, tapping a callout view moves the selected annotation to the center of the screen and deselects it.

Fixes #1980.
2016-04-19 14:24:59 -07:00
Minh Nguyễn
7a5406bc50 [ios] Update annotations instead of replacing them
When refreshing an annotation’s image, update the annotation instead of replacing it outright.
2016-04-19 14:24:59 -07:00
Minh Nguyễn
bc9b52e0ab [ios] Annotation image deletion
Added an API for deleting unused annotation images’ images. When you nil out the image of an MGLAnnotationImage, MGLMapView deletes the sprite from the style and recreates any annotation associated with the MGLAnnotationImage instance; the MGLAnnotationImage’s falls back to SDK’s default annotation image.

In iosapp, deselecting an annotation resets its image to the default; deselecting it again restores the image.

ref #3185
2016-04-19 14:24:59 -07:00
Minh Nguyễn
3c4049c796 [ios] Toggle telemetry on main queue 2016-04-19 08:54:39 -07:00
Minh Nguyễn
e7ddaa9285 [ios] Assert that defaults change is on main thread 2016-04-19 08:02:57 -07:00
Minh Nguyễn
d76ef6e53b [ios] Fixed hang observing user defaults on background queue
Fixed a deadlock that could occur if the host application attempts to set user defaults on a background queue. Now we observer user defaults changes synchronously.
2016-04-18 23:13:42 -07:00
Minh Nguyễn
7606fc6548 [ios] Disable telemetry in simulator
When running in the simulator, disable telemetry outright instead of pointing it to the staging server.
2016-04-18 16:56:14 -07:00
Minh Nguyễn
4edd1e9658 [ios] Use staging server in simulator
Use the staging telemetry server when compiled for the iOS Simulator.

Fixes #3621.
2016-04-18 16:56:14 -07:00
Minh Nguyễn
27842221c9 [ios] Replaced MGLMapView redeclaration with internal header 2016-04-18 15:47:47 -07:00
Minh Nguyễn
1818576fe6 [ios] Made userTrackingMode KVO-compliant
Fixes #4363.
2016-04-18 15:19:15 -07:00
Minh Nguyễn
947f28f8bf [ios] Added action to reload style
Fixes #3102.
2016-04-18 14:57:09 -07:00
Minh Nguyễn
52abcb5a73 [ios] Animate user dot between user location updates
Use UIView animation to explicitly animate the user dot between user location updates. There is a tricky special case, which is that the callout must point to the annotation view’s implicit frame but must quickly rendezvous with the explicit frame.

Fixes #1041.
2016-04-17 22:44:18 -07:00
Minh Nguyễn
943c09f1c7 [ios, osx] Took advantage of C99
Now that #4641 has removed the prohibition against C99 extensions, this change removes many pragma statements that suppress warnings about variadic macros and designated initializers. Designated initializers and Elvis operators have been introduced wherever appropriate.
2016-04-16 23:29:40 -07:00
Minh Nguyễn
7ae6b13003 [ios] Only assert protocol conformance in Debug
Fixed some warnings when building Release.
2016-04-16 22:46:22 -07:00
Minh Nguyễn
b8c39667ff [ios] Moved SDK from gyp into Xcode project
Added a new Cocoa Touch dynamic framework target and Cocoa Touch static library target to the main iOS Xcode project. The targets are based on the templates provided by Xcode. They contain headers and source files in the darwin/ and ios/ subdirectories. Headers are explicitly marked public or project-internal instead of implicitly by subdirectory.

The SDK targets have a few dependencies that are managed by mason. Transform the config.gypi generated by configure into an .xcconfig file that Xcode uses to fill in compiler and linker flags.

Removed the iossdk target from platform.gypi and pared down the platform-lib target. make iproj opens the overall Xcode workspace instead of just the core project.

Resolved some warnings that are only now appearing because we’re using the standard warning and error flags instead of the pedantic and somewhat inappropriate flags that were forced by the gyp configuration files. Removed a console message informing developers of a long-ago deleted delegate method; the message was triggering a “selector not found” warning. Conditionalized some deprecated symbol usage that’s still needed for the static framework but not the dynamic framework, due to differing minimum deployment targets.

Added a build phase to the static library target that copies headers for use with the static library itself. This would allow us to potentially include a header in the dynamic framework but not the static library and vice-versa.

Updated the changelog to note that unused SVG files have been removed from the distribution.
2016-04-16 22:45:59 -07:00
John Firebaugh
204c7fee03 [core] Render from the main thread
Do not create a thread for the MapContext anymore.
2016-04-14 13:44:08 -07:00
Jason Wray
7e0a2e36e6 [ios] Convert telemetry test server setting to user default
- Previously looked in app's Info.plist, now looks at NSUserDefaults
2016-04-13 18:04:06 -04:00
Jason Wray
eda132d922 [ios] Restart user location heading updates on validation
Fixes #4668. Thanks to @JThramer for reporting.
2016-04-11 23:21:05 -04:00
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