Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 2.16.1

* Updates heatmaps passed between Dart and native to use typed data.

## 2.16.0

* Adds compatibility with SDK version 10.x for apps targeting iOS 16+.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,38 +37,37 @@ - (void)testGetValueOrNilWithNSNull {
XCTAssertNil(FGMGetValueOrNilFromDict(dict, key));
}

- (void)testLocationFromLatLong {
NSArray<NSNumber *> *latlong = @[ @1, @2 ];
CLLocationCoordinate2D location = [FGMHeatmapConversions locationFromLatLong:latlong];
XCTAssertEqual(location.latitude, 1);
XCTAssertEqual(location.longitude, 2);
}

- (void)testPointFromArray {
NSArray<NSNumber *> *array = @[ @1, @2 ];
CGPoint point = [FGMHeatmapConversions pointFromArray:array];
XCTAssertEqual(point.x, 1);
XCTAssertEqual(point.y, 2);
}

- (void)testArrayFromLocation {
CLLocationCoordinate2D location = CLLocationCoordinate2DMake(1, 2);
NSArray<NSNumber *> *array = [FGMHeatmapConversions arrayFromLocation:location];
XCTAssertEqual([array[0] integerValue], 1);
XCTAssertEqual([array[1] integerValue], 2);
}

- (void)testColorFromRGBA {
NSNumber *rgba = @(0x01020304);
UIColor *color = [FGMHeatmapConversions colorFromRGBA:rgba];
- (void)testColorFromPlatformColor {
double platformRed = 1 / 255.0;
double platformGreen = 2 / 255.0;
double platformBlue = 3 / 255.0;
double platformAlpha = 4 / 255.0;
UIColor *color = FGMGetColorForPigeonColor([FGMPlatformColor makeWithRed:platformRed
green:platformGreen
blue:platformBlue
alpha:platformAlpha]);
CGFloat red, green, blue, alpha;
BOOL success = [color getRed:&red green:&green blue:&blue alpha:&alpha];
XCTAssertTrue(success);
const CGFloat accuracy = 0.0001;
XCTAssertEqualWithAccuracy(red, 2 / 255.0, accuracy);
XCTAssertEqualWithAccuracy(green, 3 / 255.0, accuracy);
XCTAssertEqualWithAccuracy(blue, 4 / 255.0, accuracy);
XCTAssertEqualWithAccuracy(alpha, 1 / 255.0, accuracy);
XCTAssertEqualWithAccuracy(red, platformRed, accuracy);
XCTAssertEqualWithAccuracy(green, platformGreen, accuracy);
XCTAssertEqualWithAccuracy(blue, platformBlue, accuracy);
XCTAssertEqualWithAccuracy(alpha, platformAlpha, accuracy);
}

- (void)testPlatformColorFromColor {
double red = 1 / 255.0;
double green = 2 / 255.0;
double blue = 3 / 255.0;
double alpha = 4 / 255.0;
UIColor *color = [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
FGMPlatformColor *platformColor = FGMGetPigeonColorForColor(color);
const CGFloat accuracy = 0.0001;
XCTAssertEqualWithAccuracy(red, platformColor.red, accuracy);
XCTAssertEqualWithAccuracy(green, platformColor.green, accuracy);
XCTAssertEqualWithAccuracy(blue, platformColor.blue, accuracy);
XCTAssertEqualWithAccuracy(alpha, platformColor.alpha, accuracy);
}

- (void)testPointsFromLatLongs {
Expand Down Expand Up @@ -386,53 +385,46 @@ - (void)testLengthsFromPatterns {
XCTAssertEqual(secondSpanLength.doubleValue, dashLength);
}

- (void)testWeightedLatLngFromArray {
NSArray *weightedLatLng = @[ @[ @1, @2 ], @3 ];

GMUWeightedLatLng *weightedLocation =
[FGMHeatmapConversions weightedLatLngFromArray:weightedLatLng];

// The location gets projected to different values
XCTAssertEqual([weightedLocation intensity], 3);
}

- (void)testWeightedLatLngFromArrayThrowsForInvalidInput {
NSArray *weightedLatLng = @[];

XCTAssertThrows([FGMHeatmapConversions weightedLatLngFromArray:weightedLatLng]);
}

- (void)testWeightedDataFromArray {
NSNumber *intensity1 = @3;
NSNumber *intensity2 = @6;
NSArray *data = @[ @[ @[ @1, @2 ], intensity1 ], @[ @[ @4, @5 ], intensity2 ] ];
- (void)testWeightedDataFromPlatformWeightedData {
CGFloat intensity1 = 3.0;
CGFloat intensity2 = 6.0;
NSArray<FGMPlatformWeightedLatLng *> *data = @[
[FGMPlatformWeightedLatLng makeWithPoint:[FGMPlatformLatLng makeWithLatitude:10 longitude:20]
weight:intensity1],
[FGMPlatformWeightedLatLng makeWithPoint:[FGMPlatformLatLng makeWithLatitude:30 longitude:40]
weight:intensity2],
];

NSArray<GMUWeightedLatLng *> *weightedData = [FGMHeatmapConversions weightedDataFromArray:data];
XCTAssertEqual([weightedData[0] intensity], [intensity1 floatValue]);
XCTAssertEqual([weightedData[1] intensity], [intensity2 floatValue]);
NSArray<GMUWeightedLatLng *> *weightedData = FGMGetWeightedDataForPigeonWeightedData(data);
XCTAssertEqual([weightedData[0] intensity], intensity1);
XCTAssertEqual([weightedData[1] intensity], intensity2);
}

- (void)testGradientFromDictionary {
NSNumber *startPoint = @0.6;
NSNumber *colorMapSize = @200;
NSDictionary *gradientData = @{
@"colors" : @[
// Color.fromARGB(255, 0, 255, 255)
@4278255615,
],
@"startPoints" : @[ startPoint ],
@"colorMapSize" : colorMapSize,
};

GMUGradient *gradient = [FGMHeatmapConversions gradientFromDictionary:gradientData];
- (void)testGradientFromPlatformGradient {
CGFloat startPoint = 0.6;
CGFloat platformRed = 0.1;
CGFloat platformGreen = 0.2;
CGFloat platformBlue = 0.3;
CGFloat platformAlpha = 0.4;
NSInteger colorMapSize = 200;
FGMPlatformHeatmapGradient *platformGradient =
[FGMPlatformHeatmapGradient makeWithColors:@[ [FGMPlatformColor makeWithRed:platformRed
green:platformGreen
blue:platformBlue
alpha:platformAlpha] ]
startPoints:@[ @(startPoint) ]
colorMapSize:colorMapSize];

GMUGradient *gradient = FGMGetGradientForPigeonHeatmapGradient(platformGradient);
CGFloat red, green, blue, alpha;
[[gradient colors][0] getRed:&red green:&green blue:&blue alpha:&alpha];
XCTAssertEqual(red, 0);
XCTAssertEqual(green, 1);
XCTAssertEqual(blue, 1);
XCTAssertEqual(alpha, 1);
XCTAssertEqualWithAccuracy([[gradient startPoints][0] doubleValue], [startPoint doubleValue], 0);
XCTAssertEqual([gradient mapSize], [colorMapSize intValue]);
const CGFloat accuracy = 0.001;
XCTAssertEqualWithAccuracy(red, platformRed, accuracy);
XCTAssertEqualWithAccuracy(green, platformGreen, accuracy);
XCTAssertEqualWithAccuracy(blue, platformBlue, accuracy);
XCTAssertEqualWithAccuracy(alpha, platformAlpha, accuracy);
XCTAssertEqualWithAccuracy([[gradient startPoints][0] doubleValue], startPoint, accuracy);
XCTAssertEqual([gradient mapSize], colorMapSize);
}

@end
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,34 @@ @implementation GoogleMapsHeatmapControllerTests

- (void)testUpdateHeatmapSetsVisibilityLast {
PropertyOrderValidatingHeatmap *heatmap = [[PropertyOrderValidatingHeatmap alloc] init];
FGMPlatformHeatmapGradient *gradient = [FGMPlatformHeatmapGradient makeWithColors:@[
[FGMPlatformColor makeWithRed:0 green:0 blue:0 alpha:0],
[FGMPlatformColor makeWithRed:1.0 green:1.0 blue:1.0 alpha:1.0],
]
startPoints:@[ @(0), @(1) ]
colorMapSize:256];
[FLTGoogleMapHeatmapController
updateHeatmap:heatmap
fromOptions:@{
@"data" : @[ @[ @[ @(5), @(5) ], @(0.5) ], @[ @[ @(10), @(10) ], @(0.75) ] ],
@"gradient" : @{
@"colors" : @[ @(0), @(1) ],
@"startPoints" : @[ @(0), @(1) ],
@"colorMapSize" : @(256),
},
@"opacity" : @(0.5),
@"radius" : @(1),
@"minimumZoomIntensity" : @(1),
@"maximumZoomIntensity" : @(2),
}
withMapView:[GoogleMapsHeatmapControllerTests mapView]];
updateHeatmap:heatmap
fromPlatformHeatmap:[FGMPlatformHeatmap
makeWithHeatmapId:@"heatmap"
data:@[
[FGMPlatformWeightedLatLng
makeWithPoint:[FGMPlatformLatLng
makeWithLatitude:5.0
longitude:5.0]
weight:0.5],
[FGMPlatformWeightedLatLng
makeWithPoint:[FGMPlatformLatLng
makeWithLatitude:10.0
longitude:10.0]
weight:0.75],
]
gradient:gradient
opacity:0.5
radius:1
minimumZoomIntensity:1
maximumZoomIntensity:2]
withMapView:[GoogleMapsHeatmapControllerTests mapView]];
XCTAssertTrue(heatmap.hasSetMap);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ description: Demonstrates how to use the google_maps_flutter plugin.
publish_to: none

environment:
sdk: ^3.8.0
flutter: ">=3.32.0"
sdk: ^3.9.0
flutter: ">=3.35.0"

dependencies:
cupertino_icons: ^1.0.5
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ description: Demonstrates how to use the google_maps_flutter plugin.
publish_to: none

environment:
sdk: ^3.8.0
flutter: ">=3.32.0"
sdk: ^3.9.0
flutter: ">=3.35.0"

dependencies:
cupertino_icons: ^1.0.5
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ description: Demonstrates how to use the google_maps_flutter plugin.
publish_to: none

environment:
sdk: ^3.8.0
flutter: ">=3.32.0"
sdk: ^3.9.0
flutter: ">=3.35.0"

dependencies:
cupertino_icons: ^1.0.5
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ description: Shared Dart code for the example apps.
publish_to: none

environment:
sdk: ^3.8.0
flutter: ">=3.32.0"
sdk: ^3.9.0
flutter: ">=3.35.0"

dependencies:
cupertino_icons: ^1.0.5
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,28 @@ extern FGMPlatformGroundOverlay *FGMGetPigeonGroundOverlay(GMSGroundOverlay *gro
BOOL isCreatedWithBounds,
NSNumber *_Nullable zoomLevel);

extern GMUGradient *FGMGetGradientForPigeonHeatmapGradient(FGMPlatformHeatmapGradient *gradient);

extern FGMPlatformHeatmapGradient *FGMGetPigeonHeatmapGradientForGradient(GMUGradient *gradient);

/// Creates a GMUWeightedLatLng array from its Pigeon equivalent.
extern NSArray<GMUWeightedLatLng *> *FGMGetWeightedDataForPigeonWeightedData(
NSArray<FGMPlatformWeightedLatLng *> *weightedLatLngs);

/// Converts a GMUWeightedLatLng array to its Pigeon equivalent.
extern NSArray<FGMPlatformWeightedLatLng *> *FGMGetPigeonWeightedDataForWeightedData(
NSArray<GMUWeightedLatLng *> *weightedLatLngs);

/// Creates a GMSCameraUpdate from its Pigeon equivalent.
extern GMSCameraUpdate *_Nullable FGMGetCameraUpdateForPigeonCameraUpdate(
FGMPlatformCameraUpdate *update);

/// Creates a UIColor from its RGBA components, expressed as an integer.
/// Creates a UIColor from its Pigeon representation.
extern UIColor *FGMGetColorForPigeonColor(FGMPlatformColor *color);

/// Converts a UIColor to its Pigeon representation.
extern FGMPlatformColor *FGMGetPigeonColorForColor(UIColor *color);

/// Creates an array of GMSStrokeStyles using the given patterns and stroke color.
extern NSArray<GMSStrokeStyle *> *FGMGetStrokeStylesFromPatterns(
NSArray<FGMPlatformPatternItem *> *patterns, UIColor *strokeColor);
Expand All @@ -79,35 +94,4 @@ extern NSArray<GMSStrokeStyle *> *FGMGetStrokeStylesFromPatterns(
extern NSArray<NSNumber *> *FGMGetSpanLengthsFromPatterns(
NSArray<FGMPlatformPatternItem *> *patterns);

/// Legacy conversion utils for heatmaps, which are still using a JSON
/// representation instead of structured Pigeon data.
// TODO(stuartmorgan): Remove this once heatmaps are migrated to Pigeon.
@interface FGMHeatmapConversions : NSObject

extern NSString *const kHeatmapsToAddKey;
extern NSString *const kHeatmapIdKey;
extern NSString *const kHeatmapDataKey;
extern NSString *const kHeatmapGradientKey;
extern NSString *const kHeatmapOpacityKey;
extern NSString *const kHeatmapRadiusKey;
extern NSString *const kHeatmapMinimumZoomIntensityKey;
extern NSString *const kHeatmapMaximumZoomIntensityKey;
extern NSString *const kHeatmapGradientColorsKey;
extern NSString *const kHeatmapGradientStartPointsKey;
extern NSString *const kHeatmapGradientColorMapSizeKey;

+ (CLLocationCoordinate2D)locationFromLatLong:(NSArray *)latlong;
+ (CGPoint)pointFromArray:(NSArray *)array;
+ (NSArray *)arrayFromLocation:(CLLocationCoordinate2D)location;
+ (UIColor *)colorFromRGBA:(NSNumber *)data;
+ (NSNumber *)RGBAFromColor:(UIColor *)color;
+ (nullable GMUWeightedLatLng *)weightedLatLngFromArray:(NSArray<id> *)data;
+ (NSArray<id> *)arrayFromWeightedLatLng:(GMUWeightedLatLng *)weightedLatLng;
+ (NSArray<GMUWeightedLatLng *> *)weightedDataFromArray:(NSArray<NSArray<id> *> *)data;
+ (NSArray<NSArray<id> *> *)arrayFromWeightedData:(NSArray<GMUWeightedLatLng *> *)weightedData;
+ (GMUGradient *)gradientFromDictionary:(NSDictionary<NSString *, id> *)data;
+ (NSDictionary<NSString *, id> *)dictionaryFromGradient:(GMUGradient *)gradient;

@end

NS_ASSUME_NONNULL_END
Loading
Loading