public override void OnOrientationChanged(int orientation)
{
if (orientation == OrientationEventListener.OrientationUnknown)
{
return;
}
// Avoid changing orientation whilst the screen is locked
if (ScreenReceiver.ScreenLocked)
{
return;
}
if (_naturalOrientation.Value == Orientation.Landscape)
{
orientation += 270;
}
// Round orientation into one of 4 positions, either 0, 90, 180, 270.
int ort = ((orientation + 45) / 90 * 90) % 360;
var disporientation = DisplayOrientation.Unknown;
switch (ort)
{
case 90: disporientation = AndroidCompatibility.FlipLandscape ? DisplayOrientation.LandscapeLeft : DisplayOrientation.LandscapeRight;
break;
case 270: disporientation = AndroidCompatibility.FlipLandscape ? DisplayOrientation.LandscapeRight : DisplayOrientation.LandscapeLeft;
break;
case 0: disporientation = DisplayOrientation.Portrait;
break;
case 180: disporientation = DisplayOrientation.PortraitDown;
break;
default:
disporientation = DisplayOrientation.LandscapeLeft;
break;
}
// Only auto-rotate if target orientation is supported and not current
AndroidGameWindow gameWindow = (AndroidGameWindow)Game.Instance.Window;
if ((gameWindow.GetEffectiveSupportedOrientations() & disporientation) != 0 &&
disporientation != gameWindow.CurrentOrientation)
{
gameWindow.SetOrientation(disporientation, true);
}
}