diff --git a/Apps/Wikipedia/Wikipedia/Code/NSUserActivity+WMFExtensions.h b/Apps/Wikipedia/Wikipedia/Code/NSUserActivity+WMFExtensions.h index b50d03f..cdfc5ba 100644 --- a/Apps/Wikipedia/Wikipedia/Code/NSUserActivity+WMFExtensions.h +++ b/Apps/Wikipedia/Wikipedia/Code/NSUserActivity+WMFExtensions.h @@ -1,3 +1,4 @@ +@import CoreLocation; @import Foundation; NS_ASSUME_NONNULL_BEGIN @@ -46,6 +47,8 @@ extern NSString *const WMFNavigateToActivityNotification; - (nullable NSURL *)wmf_linkURL; +- (nullable CLLocation *)wmf_locationFromURL; + - (NSURL *)wmf_contentURL; + (NSURL *)wmf_baseURLForActivityOfType:(WMFUserActivityType)type; diff --git a/Apps/Wikipedia/Wikipedia/Code/NSUserActivity+WMFExtensions.m b/Apps/Wikipedia/Wikipedia/Code/NSUserActivity+WMFExtensions.m index 9cd7460..b547216 100644 --- a/Apps/Wikipedia/Wikipedia/Code/NSUserActivity+WMFExtensions.m +++ b/Apps/Wikipedia/Wikipedia/Code/NSUserActivity+WMFExtensions.m @@ -291,6 +291,18 @@ __attribute__((annotate("returns_localized_nsstring"))) static inline NSString * } } +- (CLLocation *)wmf_locationFromURL { + NSNumber *latitude = self.userInfo[@"WMFCoordinatesLatitude"]; + NSNumber *longitude = self.userInfo[@"WMFCoordinatesLongitude"]; + + if (latitude != nil && longitude != nil) { + return [[CLLocation alloc] initWithLatitude:(CLLocationDegrees)[latitude floatValue] + longitude:(CLLocationDegrees)[longitude floatValue]]; + } else { + return nil; + } +} + - (NSURL *)wmf_contentURL { return self.userInfo[@"WMFURL"]; } diff --git a/Apps/Wikipedia/WikipediaUnitTests/Code/NSUserActivity+WMFExtensionsTest.m b/Apps/Wikipedia/WikipediaUnitTests/Code/NSUserActivity+WMFExtensionsTest.m index cafb12c..66ae5a0 100644 --- a/Apps/Wikipedia/WikipediaUnitTests/Code/NSUserActivity+WMFExtensionsTest.m +++ b/Apps/Wikipedia/WikipediaUnitTests/Code/NSUserActivity+WMFExtensionsTest.m @@ -64,6 +64,16 @@ XCTAssert([activity.userInfo[@"WMFCoordinatesLongitude"] isEqualToNumber:@4.895168]); } +- (void)testPlacesURLWithCoordinatesButNegatives { + NSURL *url = [NSURL URLWithString:@"wikipedia://places?coordinates=-34.603722,-58.381592"]; + NSUserActivity *activity = [NSUserActivity wmf_activityForWikipediaScheme:url]; + + XCTAssertEqual(activity.wmf_type, WMFUserActivityTypePlaces); + XCTAssertNil(activity.webpageURL); + XCTAssert([activity.userInfo[@"WMFCoordinatesLatitude"] isEqualToNumber:@-34.603722]); + XCTAssert([activity.userInfo[@"WMFCoordinatesLongitude"] isEqualToNumber:@-58.381592]); +} + - (void)testPlacesURLWithCoordinatesButNoLongitude { NSURL *url = [NSURL URLWithString:@"wikipedia://places?coordinates=52.370216,"]; NSUserActivity *activity = [NSUserActivity wmf_activityForWikipediaScheme:url];