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
26 changes: 11 additions & 15 deletions shell/platform/darwin/ios/framework/Source/FlutterViewController.mm
Original file line number Diff line number Diff line change
Expand Up @@ -1544,21 +1544,17 @@ - (void)performOrientationUpdate:(UIInterfaceOrientationMask)new_preferences {
continue;
}
UIWindowScene* windowScene = (UIWindowScene*)scene;
UIInterfaceOrientationMask currentInterfaceOrientation =
1 << windowScene.interfaceOrientation;
if (!(_orientationPreferences & currentInterfaceOrientation)) {
[self setNeedsUpdateOfSupportedInterfaceOrientations];
UIWindowSceneGeometryPreferencesIOS* preference =
[[UIWindowSceneGeometryPreferencesIOS alloc]
initWithInterfaceOrientations:_orientationPreferences];
[windowScene
requestGeometryUpdateWithPreferences:preference
errorHandler:^(NSError* error) {
os_log_error(OS_LOG_DEFAULT,
"Failed to change device orientation: %@",
error);
}];
}
UIWindowSceneGeometryPreferencesIOS* preference =
[[UIWindowSceneGeometryPreferencesIOS alloc]
initWithInterfaceOrientations:_orientationPreferences];
Copy link
Contributor

@cyanglaz cyanglaz Apr 5, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

autorelease]

The old code also wasn't releasing the preference object.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I actually recently caught this on the master branch in Instruments when I was looking at leaks, but I forgot to fix it there. I know it seems dumb but let's keep this matching #38230 with the leak since that's been baking awhile and we know it doesn't crash. This is a really tiny leak and I'll fix in master now 🙂

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

im surprised that it doesn't have a windowSceneGeometryPreferencesIOSWithInterfaceOrientations: method

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a really tiny leak and I'll fix in master now

#40957

[windowScene
requestGeometryUpdateWithPreferences:preference
errorHandler:^(NSError* error) {
os_log_error(OS_LOG_DEFAULT,
"Failed to change device orientation: %@",
error);
}];
[self setNeedsUpdateOfSupportedInterfaceOrientations];
}
} else {
UIInterfaceOrientationMask currentInterfaceOrientation =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -891,13 +891,17 @@ - (void)orientationTestWithOrientationUpdate:(UIInterfaceOrientationMask)mask
id mockApplication = OCMClassMock([UIApplication class]);
id mockWindowScene;
id deviceMock;
FlutterViewController* realVC = [[FlutterViewController alloc] initWithEngine:self.mockEngine
nibName:nil
bundle:nil];
if (@available(iOS 16.0, *)) {
mockWindowScene = OCMClassMock([UIWindowScene class]);
OCMStub([mockWindowScene interfaceOrientation]).andReturn(currentOrientation);
if (!didChange) {
if (realVC.supportedInterfaceOrientations == mask) {
OCMReject([mockWindowScene requestGeometryUpdateWithPreferences:[OCMArg any]
errorHandler:[OCMArg any]]);
} else {
// iOS 16 will decide whether to rotate based on the new preference, so always set it
// when it changes.
OCMExpect([mockWindowScene
requestGeometryUpdateWithPreferences:[OCMArg checkWithBlock:^BOOL(
UIWindowSceneGeometryPreferencesIOS*
Expand All @@ -919,9 +923,6 @@ - (void)orientationTestWithOrientationUpdate:(UIInterfaceOrientationMask)mask
OCMStub([mockApplication sharedApplication]).andReturn(mockApplication);
OCMStub([mockApplication statusBarOrientation]).andReturn(currentOrientation);
}
FlutterViewController* realVC = [[FlutterViewController alloc] initWithEngine:self.mockEngine
nibName:nil
bundle:nil];

[realVC performOrientationUpdate:mask];
if (@available(iOS 16.0, *)) {
Expand Down