Always set orientation preferences on iOS 16+ (#38230)

diff --git a/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm b/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm
index 2716ba2..37b7c1d 100644
--- a/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm
+++ b/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm
@@ -1544,21 +1544,17 @@
           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 =
diff --git a/shell/platform/darwin/ios/framework/Source/FlutterViewControllerTest.mm b/shell/platform/darwin/ios/framework/Source/FlutterViewControllerTest.mm
index 7ed4c05..5cbd2aa 100644
--- a/shell/platform/darwin/ios/framework/Source/FlutterViewControllerTest.mm
+++ b/shell/platform/darwin/ios/framework/Source/FlutterViewControllerTest.mm
@@ -891,13 +891,17 @@
   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*
@@ -919,9 +923,6 @@
     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, *)) {