Skip to content

Commit

Permalink
Always set orientation preferences on iOS 16+ (#38230)
Browse files Browse the repository at this point in the history
  • Loading branch information
jmagman committed Dec 13, 2022
1 parent 9872cc7 commit dd1dc72
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 20 deletions.
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];
[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

0 comments on commit dd1dc72

Please sign in to comment.