From f6b103fed18d22f22750f4dbc8e18c0a29892dce Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Tue, 15 Oct 2019 17:03:34 -0700 Subject: [PATCH] Revert "Issue 13238: on iOS, force an orientation change when the current orientation is not allowed (#12295)" This reverts commit c38ed2ca1c8af167383fe5732539e281d41e9128. --- AUTHORS | 1 - .../framework/Source/FlutterViewController.mm | 34 +--- .../Source/FlutterViewControllerTest.m | 177 ------------------ 3 files changed, 6 insertions(+), 206 deletions(-) diff --git a/AUTHORS b/AUTHORS index d3f373b890f91..12355a9457e43 100644 --- a/AUTHORS +++ b/AUTHORS @@ -15,4 +15,3 @@ Simon Lightfoot Dwayne Slater Tetsuhiro Ueda shoryukenn -SOTEC GmbH & Co. KG \ No newline at end of file diff --git a/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm b/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm index 1af3dc648f34d..7e00737db8ead 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm @@ -828,36 +828,14 @@ - (void)onOrientationPreferencesUpdated:(NSNotification*)notification { if (update == nil) { return; } - [self performOrientationUpdate:update.unsignedIntegerValue]; - }); -} -- (void)performOrientationUpdate:(UIInterfaceOrientationMask)new_preferences { - if (new_preferences != _orientationPreferences) { - _orientationPreferences = new_preferences; - [UIViewController attemptRotationToDeviceOrientation]; - - UIInterfaceOrientationMask currentInterfaceOrientation = - 1 << [[UIApplication sharedApplication] statusBarOrientation]; - if (!(_orientationPreferences & currentInterfaceOrientation)) { - // Force orientation switch if the current orientation is not allowed - if (_orientationPreferences & UIInterfaceOrientationMaskPortrait) { - // This is no official API but more like a workaround / hack (using - // key-value coding on a read-only property). This might break in - // the future, but currently it´s the only way to force an orientation change - [[UIDevice currentDevice] setValue:@(UIInterfaceOrientationPortrait) forKey:@"orientation"]; - } else if (_orientationPreferences & UIInterfaceOrientationMaskPortraitUpsideDown) { - [[UIDevice currentDevice] setValue:@(UIInterfaceOrientationPortraitUpsideDown) - forKey:@"orientation"]; - } else if (_orientationPreferences & UIInterfaceOrientationMaskLandscapeLeft) { - [[UIDevice currentDevice] setValue:@(UIInterfaceOrientationLandscapeLeft) - forKey:@"orientation"]; - } else if (_orientationPreferences & UIInterfaceOrientationMaskLandscapeRight) { - [[UIDevice currentDevice] setValue:@(UIInterfaceOrientationLandscapeRight) - forKey:@"orientation"]; - } + NSUInteger new_preferences = update.unsignedIntegerValue; + + if (new_preferences != _orientationPreferences) { + _orientationPreferences = new_preferences; + [UIViewController attemptRotationToDeviceOrientation]; } - } + }); } - (BOOL)shouldAutorotate { diff --git a/shell/platform/darwin/ios/framework/Source/FlutterViewControllerTest.m b/shell/platform/darwin/ios/framework/Source/FlutterViewControllerTest.m index 7e98944dac963..b33e8cda6f56d 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterViewControllerTest.m +++ b/shell/platform/darwin/ios/framework/Source/FlutterViewControllerTest.m @@ -45,10 +45,6 @@ - (UIAccessibilityContrast)accessibilityContrast; @end #endif -@interface FlutterViewController (Tests) -- (void)performOrientationUpdate:(UIInterfaceOrientationMask)new_preferences; -@end - @implementation FlutterViewControllerTest - (void)testBinaryMessenger { @@ -256,179 +252,6 @@ - (void)testItReportsHighContrastWhenTraitCollectionRequestsIt { [mockTraitCollection stopMocking]; } -- (void)testPerformOrientationUpdateForcesOrientationChange { - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskPortrait - currentOrientation:UIInterfaceOrientationLandscapeLeft - didChangeOrientation:YES - resultingOrientation:UIInterfaceOrientationPortrait]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskPortrait - currentOrientation:UIInterfaceOrientationLandscapeRight - didChangeOrientation:YES - resultingOrientation:UIInterfaceOrientationPortrait]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskPortrait - currentOrientation:UIInterfaceOrientationPortraitUpsideDown - didChangeOrientation:YES - resultingOrientation:UIInterfaceOrientationPortrait]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskPortraitUpsideDown - currentOrientation:UIInterfaceOrientationLandscapeLeft - didChangeOrientation:YES - resultingOrientation:UIInterfaceOrientationPortraitUpsideDown]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskPortraitUpsideDown - currentOrientation:UIInterfaceOrientationLandscapeRight - didChangeOrientation:YES - resultingOrientation:UIInterfaceOrientationPortraitUpsideDown]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskPortraitUpsideDown - currentOrientation:UIInterfaceOrientationPortrait - didChangeOrientation:YES - resultingOrientation:UIInterfaceOrientationPortraitUpsideDown]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskLandscape - currentOrientation:UIInterfaceOrientationPortrait - didChangeOrientation:YES - resultingOrientation:UIInterfaceOrientationLandscapeLeft]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskLandscape - currentOrientation:UIInterfaceOrientationPortraitUpsideDown - didChangeOrientation:YES - resultingOrientation:UIInterfaceOrientationLandscapeLeft]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskLandscapeLeft - currentOrientation:UIInterfaceOrientationPortrait - didChangeOrientation:YES - resultingOrientation:UIInterfaceOrientationLandscapeLeft]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskLandscapeLeft - currentOrientation:UIInterfaceOrientationLandscapeRight - didChangeOrientation:YES - resultingOrientation:UIInterfaceOrientationLandscapeLeft]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskLandscapeLeft - currentOrientation:UIInterfaceOrientationPortraitUpsideDown - didChangeOrientation:YES - resultingOrientation:UIInterfaceOrientationLandscapeLeft]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskLandscapeRight - currentOrientation:UIInterfaceOrientationPortrait - didChangeOrientation:YES - resultingOrientation:UIInterfaceOrientationLandscapeRight]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskLandscapeRight - currentOrientation:UIInterfaceOrientationLandscapeLeft - didChangeOrientation:YES - resultingOrientation:UIInterfaceOrientationLandscapeRight]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskLandscapeRight - currentOrientation:UIInterfaceOrientationPortraitUpsideDown - didChangeOrientation:YES - resultingOrientation:UIInterfaceOrientationLandscapeRight]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskAllButUpsideDown - currentOrientation:UIInterfaceOrientationPortraitUpsideDown - didChangeOrientation:YES - resultingOrientation:UIInterfaceOrientationPortrait]; -} - -- (void)testPerformOrientationUpdateDoesNotForceOrientationChange { - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskAll - currentOrientation:UIInterfaceOrientationPortrait - didChangeOrientation:NO - resultingOrientation:0]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskAll - currentOrientation:UIInterfaceOrientationPortraitUpsideDown - didChangeOrientation:NO - resultingOrientation:0]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskAll - currentOrientation:UIInterfaceOrientationLandscapeLeft - didChangeOrientation:NO - resultingOrientation:0]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskAll - currentOrientation:UIInterfaceOrientationLandscapeRight - didChangeOrientation:NO - resultingOrientation:0]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskAllButUpsideDown - currentOrientation:UIInterfaceOrientationPortrait - didChangeOrientation:NO - resultingOrientation:0]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskAllButUpsideDown - currentOrientation:UIInterfaceOrientationLandscapeLeft - didChangeOrientation:NO - resultingOrientation:0]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskAllButUpsideDown - currentOrientation:UIInterfaceOrientationLandscapeRight - didChangeOrientation:NO - resultingOrientation:0]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskPortrait - currentOrientation:UIInterfaceOrientationPortrait - didChangeOrientation:NO - resultingOrientation:0]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskPortraitUpsideDown - currentOrientation:UIInterfaceOrientationPortraitUpsideDown - didChangeOrientation:NO - resultingOrientation:0]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskLandscape - currentOrientation:UIInterfaceOrientationLandscapeLeft - didChangeOrientation:NO - resultingOrientation:0]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskLandscape - currentOrientation:UIInterfaceOrientationLandscapeRight - didChangeOrientation:NO - resultingOrientation:0]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskLandscapeLeft - currentOrientation:UIInterfaceOrientationLandscapeLeft - didChangeOrientation:NO - resultingOrientation:0]; - - [self orientationTestWithOrientationUpdate:UIInterfaceOrientationMaskLandscapeRight - currentOrientation:UIInterfaceOrientationLandscapeRight - didChangeOrientation:NO - resultingOrientation:0]; -} - -// Perform an orientation update test that fails when the expected outcome -// for an orientation update is not met -- (void)orientationTestWithOrientationUpdate:(UIInterfaceOrientationMask)mask - currentOrientation:(UIInterfaceOrientation)currentOrientation - didChangeOrientation:(BOOL)didChange - resultingOrientation:(UIInterfaceOrientation)resultingOrientation { - id engine = OCMClassMock([FlutterEngine class]); - - id deviceMock = OCMPartialMock([UIDevice currentDevice]); - if (!didChange) { - OCMReject([deviceMock setValue:[OCMArg any] forKey:@"orientation"]); - } else { - OCMExpect([deviceMock setValue:@(resultingOrientation) forKey:@"orientation"]); - } - - FlutterViewController* realVC = [[FlutterViewController alloc] initWithEngine:engine - nibName:nil - bundle:nil]; - id mockApplication = OCMClassMock([UIApplication class]); - OCMStub([mockApplication sharedApplication]).andReturn(mockApplication); - OCMStub([mockApplication statusBarOrientation]).andReturn(currentOrientation); - - [realVC performOrientationUpdate:mask]; - OCMVerifyAll(deviceMock); - [engine stopMocking]; - [deviceMock stopMocking]; - [mockApplication stopMocking]; -} - // Creates a mocked UITraitCollection with nil values for everything except accessibilityContrast, // which is set to the given "contrast". - (UITraitCollection*)fakeTraitCollectionWithContrast:(UIAccessibilityContrast)contrast {