Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
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
Expand Up @@ -116,11 +116,45 @@ - (void)handleMethodCall:(nonnull FlutterMethodCall*)call result:(nonnull Flutte
NSNumber* arg = [call arguments];
int64_t viewId = [arg longLongValue];
[self onDisposeWithViewID:viewId result:result];
} else if ([[call method] isEqualToString:@"acceptGesture"]) {
[self handleAcceptGesture:call result:result];
} else if ([[call method] isEqualToString:@"rejectGesture"]) {
[self handleRejectGesture:call result:result];
} else {
result(FlutterMethodNotImplemented);
}
}

- (void)handleAcceptGesture:(FlutterMethodCall*)call result:(FlutterResult)result {
NSDictionary<NSString*, id>* args = [call arguments];
NSAssert(args && args[@"id"], @"id argument is required");
int64_t viewId = [args[@"id"] longLongValue];
if (_platformViews.count(viewId) == 0) {
result([FlutterError errorWithCode:@"unknown_view"
message:@"trying to set gesture state for an unknown view"
details:[NSString stringWithFormat:@"view id: '%lld'", viewId]]);
return;
}

// TODO(cbracken): Implement. https://github.com/flutter/flutter/issues/124492
result(nil);
}

- (void)handleRejectGesture:(FlutterMethodCall*)call result:(FlutterResult)result {
NSDictionary<NSString*, id>* args = [call arguments];
NSAssert(args && args[@"id"], @"id argument is required");
int64_t viewId = [args[@"id"] longLongValue];
if (_platformViews.count(viewId) == 0) {
result([FlutterError errorWithCode:@"unknown_view"
message:@"trying to set gesture state for an unknown view"
details:[NSString stringWithFormat:@"view id: '%lld'", viewId]]);
return;
}

// TODO(cbracken): Implement. https://github.com/flutter/flutter/issues/124492
result(nil);
}

- (void)disposePlatformViews {
if (_platformViewsToDispose.empty()) {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,4 +161,120 @@
EXPECT_TRUE(errored);
}

TEST(FlutterPlatformViewController, TestAcceptGesture) {
FlutterPlatformViewController* platformViewController =
[[FlutterPlatformViewController alloc] init];
[platformViewController registerViewFactory:[TestFlutterPlatformViewFactory alloc]
withId:@"MockPlatformView"];

// Create the PlatformView.
const NSNumber* viewId = [NSNumber numberWithLongLong:2];
FlutterMethodCall* methodCallOnCreate = [FlutterMethodCall
methodCallWithMethodName:@"create"
arguments:@{@"id" : viewId, @"viewType" : @"MockPlatformView"}];
__block bool created = false;
FlutterResult resultOnCreate = ^(id result) {
// If a platform view is successfully created, the result is nil.
if (result == nil) {
created = true;
}
};
[platformViewController handleMethodCall:methodCallOnCreate result:resultOnCreate];

// Call acceptGesture.
FlutterMethodCall* methodCallAcceptGesture =
[FlutterMethodCall methodCallWithMethodName:@"acceptGesture" arguments:@{@"id" : viewId}];
__block bool acceptGestureCalled = false;
FlutterResult resultAcceptGesture = ^(id result) {
// If a acceptGesture is successful, the result is nil.
if (result == nil) {
acceptGestureCalled = true;
}
};
[platformViewController handleMethodCall:methodCallAcceptGesture result:resultAcceptGesture];

EXPECT_TRUE(created);
EXPECT_TRUE(acceptGestureCalled);
}

TEST(FlutterPlatformViewController, TestAcceptGestureOnMissingViewId) {
FlutterPlatformViewController* platformViewController =
[[FlutterPlatformViewController alloc] init];
[platformViewController registerViewFactory:[TestFlutterPlatformViewFactory alloc]
withId:@"MockPlatformView"];

// Call rejectGesture.
FlutterMethodCall* methodCallAcceptGesture =
[FlutterMethodCall methodCallWithMethodName:@"acceptGesture" arguments:@{
@"id" : @20
}];
__block bool errored = false;
FlutterResult result = ^(id result) {
if ([result isKindOfClass:[FlutterError class]]) {
errored = true;
}
};
[platformViewController handleMethodCall:methodCallAcceptGesture result:result];

EXPECT_TRUE(errored);
}

TEST(FlutterPlatformViewController, TestRejectGesture) {
FlutterPlatformViewController* platformViewController =
[[FlutterPlatformViewController alloc] init];
[platformViewController registerViewFactory:[TestFlutterPlatformViewFactory alloc]
withId:@"MockPlatformView"];

// Create the PlatformView.
const NSNumber* viewId = [NSNumber numberWithLongLong:2];
FlutterMethodCall* methodCallOnCreate = [FlutterMethodCall
methodCallWithMethodName:@"create"
arguments:@{@"id" : viewId, @"viewType" : @"MockPlatformView"}];
__block bool created = false;
FlutterResult resultOnCreate = ^(id result) {
// If a platform view is successfully created, the result is nil.
if (result == nil) {
created = true;
}
};
[platformViewController handleMethodCall:methodCallOnCreate result:resultOnCreate];

// Call rejectGesture.
FlutterMethodCall* methodCallRejectGesture =
[FlutterMethodCall methodCallWithMethodName:@"rejectGesture" arguments:@{@"id" : viewId}];
__block bool rejectGestureCalled = false;
FlutterResult resultRejectGesture = ^(id result) {
// If a rejectGesture is successful, the result is nil.
if (result == nil) {
rejectGestureCalled = true;
}
};
[platformViewController handleMethodCall:methodCallRejectGesture result:resultRejectGesture];

EXPECT_TRUE(created);
EXPECT_TRUE(rejectGestureCalled);
}

TEST(FlutterPlatformViewController, TestRejectGestureOnMissingViewId) {
FlutterPlatformViewController* platformViewController =
[[FlutterPlatformViewController alloc] init];
[platformViewController registerViewFactory:[TestFlutterPlatformViewFactory alloc]
withId:@"MockPlatformView"];

// Call rejectGesture.
FlutterMethodCall* methodCallRejectGesture =
[FlutterMethodCall methodCallWithMethodName:@"rejectGesture" arguments:@{
@"id" : @20
}];
__block bool errored = false;
FlutterResult result = ^(id result) {
if ([result isKindOfClass:[FlutterError class]]) {
errored = true;
}
};
[platformViewController handleMethodCall:methodCallRejectGesture result:result];

EXPECT_TRUE(errored);
}

} // namespace flutter::testing