ionic-team / capacitor-plugins

Official plugins for Capacitor ⚡️
511 stars 579 forks source link

@capacitor/screen-orientation: iOS: orientation() and screenOrientationChange event report orientation change although orientation is locked #1446

Open WIStudent opened 1 year ago

WIStudent commented 1 year ago

Bug Report

Plugin(s)

@capacitor/screen-orientation@4.1.0

Capacitor Version

💊   Capacitor Doctor  💊 

Latest Dependencies:

  @capacitor/cli: 4.7.0
  @capacitor/core: 4.7.0
  @capacitor/android: 4.7.0
  @capacitor/ios: 4.7.0

Installed Dependencies:

  @capacitor/core: 4.7.0
  @capacitor/cli: 4.7.0
  @capacitor/ios: 4.7.0
  @capacitor/android: 4.7.0

[success] iOS looking great! 👌

Platform(s)

Current Behavior

After locking the orientation

await ScreenOrientation.lock({orientation: "portrait-primary"})

the screenOrientationChange listener still reports changed orientations when the device is rotated as if the orientation was not locked. Calling

const {type} = await ScreenOrientation.orientation()

also returns the orientation as if the screen orientation was not locked.

The document orientation itself is locked correctly though, no matter how the device is rotated.

Expected Behavior

The screenOrientationChange listener should only report changes when the screen orientation is actually changed, not when the device is rotated while the screen orientation is locked. Likewise ScreenOrientation.orientation() should return the correct screen orientation when it is locked, no matter how the device is rotated.

This does not seem to be an issue on Android. There the screenOrientationChange listener gets only called after ScreenOrientation.lock() if it actually changed the screen orientation. ScreenOrientation.orientation() also returns the correct screen orientation after ScreenOrientation.lock() was called.

Code Reproduction

Other Technical Details

Additional Context

WIStudent commented 1 year ago

This behavior can be reproduced with this reproduction app: https://github.com/WIStudent/capacitor-screen-orientation-issue-reproduction-app IMG_0032 Even though the screen is locked to landscape-primary, the orientation() function and the event listener return the current device orientation when the device is rotated.

codepip55 commented 6 months ago

I'm encountering this same issue in my app, any timeline on a fix?