Description
On Android, using your sample FlyoutPage project, the application crashes on a simple orientation change.
https://github.com/dotnet/maui/assets/140050432/46b96486-f2b3-4d0e-82fa-21dd4a60ca6b
The command 'dotnet workload list' give the following output on my setup:
Welcome to .NET 8.0!
SDK Version: 8.0.200
Installed Workload Id Manifest Version Installation Source
maui-windows 8.0.6/8.0.100 VS 17.10.34607.79, VS 17.9.34616.47
maccatalyst 17.2.8022/8.0.100 VS 17.10.34607.79, VS 17.9.34616.47
ios 17.2.8022/8.0.100 VS 17.10.34607.79, VS 17.9.34616.47
android 34.0.79/8.0.100 VS 17.10.34607.79, VS 17.9.34616.47
aspire 8.0.0-preview.3.24105.21/8.0.100 VS 17.10.34607.79
Steps to Reproduce
- Download maui-sample project (https://github.com/dotnet/maui-samples/tree/main/8.0/Navigation/FlyoutPageSample)
- Allow all possible orientations in the Android Activity by adding "ScreenOrientation = ScreenOrientation.FullSensor" in the MainActivity class
- Install and launch the app on a device or emulator
- Give the device/emulator a portrait or reverse portrait orientation and close the left navigation menu if it's already opened
- Reopen the left navigation menu (the page displayed on the right side must now have a semi transparent overlay)
- Turn the device in landscape or reverse landscape orientation
- The app crashes
Link to public reproduction project repository
https://github.com/dotnet/maui-samples/tree/main/8.0/Navigation/FlyoutPageSample
Version with bug
Unknown/Other
Is this a regression from previous behavior?
Not sure, did not test other versions
Last version that worked well
Unknown/Other
Affected platforms
Android
Affected platform versions
Android API 32, Android API 34...
Did you find any workaround?
No response
Relevant log output
[AndroidRuntime] Shutting down VM
[AndroidRuntime] FATAL EXCEPTION: main
[AndroidRuntime] Process: com.companyname.flyoutpagesample, PID: 13830
[AndroidRuntime] java.lang.ClassCastException: androidx.appcompat.widget.LinearLayoutCompat$LayoutParams cannot be cast to androidx.drawerlayout.widget.DrawerLayout$LayoutParams
[AndroidRuntime] at androidx.drawerlayout.widget.DrawerLayout.getDrawerViewAbsoluteGravity(DrawerLayout.java:991)
[AndroidRuntime] at androidx.drawerlayout.widget.DrawerLayout.checkDrawerViewAbsoluteGravity(DrawerLayout.java:996)
[AndroidRuntime] at androidx.drawerlayout.widget.DrawerLayout$ViewDragCallback.onViewPositionChanged(DrawerLayout.java:2292)
[AndroidRuntime] at androidx.customview.widget.ViewDragHelper.continueSettling(ViewDragHelper.java:779)
[AndroidRuntime] at androidx.drawerlayout.widget.DrawerLayout.computeScroll(DrawerLayout.java:1375)
[AndroidRuntime] at android.view.View.updateDisplayListIfDirty(View.java:21562)
[AndroidRuntime] at android.view.View.draw(View.java:22435)
[AndroidRuntime] at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
[AndroidRuntime] at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
[AndroidRuntime] at android.view.View.updateDisplayListIfDirty(View.java:21570)
[AndroidRuntime] at android.view.View.draw(View.java:22435)
[AndroidRuntime] at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
[AndroidRuntime] at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
[AndroidRuntime] at android.view.View.updateDisplayListIfDirty(View.java:21570)
[AndroidRuntime] at android.view.View.draw(View.java:22435)
[AndroidRuntime] at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
[AndroidRuntime] at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
[AndroidRuntime] at android.view.View.updateDisplayListIfDirty(View.java:21570)
[AndroidRuntime] at android.view.View.draw(View.java:22435)
[AndroidRuntime] at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
[AndroidRuntime] at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
[AndroidRuntime] at android.view.View.updateDisplayListIfDirty(View.java:21570)
[AndroidRuntime] at android.view.View.draw(View.java:22435)
[AndroidRuntime] at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
[AndroidRuntime] at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
[AndroidRuntime] at android.view.View.updateDisplayListIfDirty(View.java:21570)
[AndroidRuntime] at android.view.View.draw(View.java:22435)
[AndroidRuntime] at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
[AndroidRuntime] at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
[AndroidRuntime] at android.view.View.draw(View.java:22707)
[AndroidRuntime] at com.android.internal.policy.DecorView.draw(DecorView.java:819)
[AndroidRuntime] at android.view.View.updateDisplayListIfDirty(View.java:21579)
[AndroidRuntime] at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:534)
[AndroidRuntime] at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:540)
[AndroidRuntime] at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:616)
[AndroidRuntime] at android.view.ViewRootImpl.draw(ViewRootImpl.java:4531)
[AndroidRuntime] at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4251)
[AndroidRuntime] at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3374)
[AndroidRuntime] at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2179)
[AndroidRuntime] at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8798)
[AndroidRuntime] at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1037)
[AndroidRuntime] at android.view.Choreographer.doCallbacks(Choreographer.java:845)
[AndroidRuntime] at android.view.Choreographer.doFrame(Choreographer.java:780)
[AndroidRuntime] at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1022)
[AndroidRuntime] at android.os.Handler.handleCallback(Handler.java:938)
[AndroidRuntime] at android.os.Handler.dispatchMessage(Handler.java:99)
[AndroidRuntime] at android.os.Looper.loopOnce(Looper.java:201)
[AndroidRuntime] at android.os.Looper.loop(Looper.java:288)
[AndroidRuntime] at android.app.ActivityThread.main(ActivityThread.java:7870)
[AndroidRuntime] at java.lang.reflect.Method.invoke(Native Method)
[AndroidRuntime] at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
[AndroidRuntime] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
**Java.Lang.ClassCastException:** 'androidx.appcompat.widget.LinearLayoutCompat$LayoutParams cannot be cast to androidx.drawerlayout.widget.DrawerLayout$LayoutParams'
[monodroid-assembly] Shared library 'liblog' not loaded, p/invoke '__android_log_print' may fail
[MonoDroid] UNHANDLED EXCEPTION:
[MonoDroid] Java.Lang.ClassCastException: androidx.appcompat.widget.LinearLayoutCompat$LayoutParams cannot be cast to androidx.drawerlayout.widget.DrawerLayout$LayoutParams
[MonoDroid]
[MonoDroid] --- End of managed Java.Lang.ClassCastException stack trace ---
[MonoDroid] java.lang.ClassCastException: androidx.appcompat.widget.LinearLayoutCompat$LayoutParams cannot be cast to androidx.drawerlayout.widget.DrawerLayout$LayoutParams
[MonoDroid] at androidx.drawerlayout.widget.DrawerLayout.getDrawerViewAbsoluteGravity(DrawerLayout.java:991)
[MonoDroid] at androidx.drawerlayout.widget.DrawerLayout.checkDrawerViewAbsoluteGravity(DrawerLayout.java:996)
[MonoDroid] at androidx.drawerlayout.widget.DrawerLayout$ViewDragCallback.onViewPositionChanged(DrawerLayout.java:2292)
[MonoDroid] at androidx.customview.widget.ViewDragHelper.continueSettling(ViewDragHelper.java:779)
[MonoDroid] at androidx.drawerlayout.widget.DrawerLayout.computeScroll(DrawerLayout.java:1375)
[MonoDroid] at android.view.View.updateDisplayListIfDirty(View.java:21562)
[MonoDroid] at android.view.View.draw(View.java:22435)
[MonoDroid] at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
[MonoDroid] at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
[MonoDroid] at android.view.View.updateDisplayListIfDirty(View.java:21570)
[MonoDroid] at android.view.View.draw(View.java:22435)
[MonoDroid] at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
[MonoDroid] at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
[MonoDroid] at android.view.View.updateDisplayListIfDirty(View.java:21570)
[MonoDroid] at android.view.View.draw(View.java:22435)
[MonoDroid] at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
[MonoDroid] at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
[MonoDroid] at android.view.View.updateDisplayListIfDirty(View.java:21570)
[MonoDroid] at android.view.View.draw(View.java:22435)
[MonoDroid] at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
[MonoDroid] at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
[MonoDroid] at android.view.View.updateDisplayListIfDirty(View.java:21570)
[MonoDroid] at android.view.View.draw(View.java:22435)
[MonoDroid] at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
[MonoDroid] at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
[MonoDroid] at android.view.View.updateDisplayListIfDirty(View.java:21570)
[MonoDroid] at android.view.View.draw(View.java:22435)
[MonoDroid] at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
[MonoDroid] at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
[MonoDroid] at android.view.View.draw(View.java:22707)
[MonoDroid] at com.android.internal.policy.DecorView.draw(DecorView.java:819)
[MonoDroid] at android.view.View.updateDisplayListIfDirty(View.java:21579)
[MonoDroid] at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:534)
[MonoDroid] at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:540)
[MonoDroid] at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:616)
[MonoDroid] at android.view.ViewRootImpl.draw(ViewRootImpl.java:4531)
[MonoDroid] at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4251)
[MonoDroid] at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3374)
[MonoDroid] at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2179)
[MonoDroid] at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8798)
[MonoDroid] at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1037)
[MonoDroid] at android.view.Choreographer.doCallbacks(Choreographer.java:845)
[MonoDroid] at android.view.Choreographer.doFrame(Choreographer.java:780)
[MonoDroid] at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1022)
[MonoDroid] at android.os.Handler.handleCallback(Handler.java:938)
[MonoDroid] at android.os.Handler.dispatchMessage(Handler.java:99)
[MonoDroid] at android.os.Looper.loopOnce(Looper.java:201)
[MonoDroid] at android.os.Looper.loop(Looper.java:288)
[MonoDroid] at android.app.ActivityThread.main(ActivityThread.java:7870)
[MonoDroid] at java.lang.reflect.Method.invoke(Native Method)
[MonoDroid] at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
[MonoDroid] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
[MonoDroid]
[MonoDroid] --- End of managed Java.Lang.ClassCastException stack trace ---
[MonoDroid] java.lang.ClassCastException: androidx.appcompat.widget.LinearLayoutCompat$LayoutParams cannot be cast to androidx.drawerlayout.widget.DrawerLayout$LayoutParams
[MonoDroid] at androidx.drawerlayout.widget.DrawerLayout.getDrawerViewAbsoluteGravity(DrawerLayout.java:991)
[MonoDroid] at androidx.drawerlayout.widget.DrawerLayout.checkDrawerViewAbsoluteGravity(DrawerLayout.java:996)
[MonoDroid] at androidx.drawerlayout.widget.DrawerLayout$ViewDragCallback.onViewPositionChanged(DrawerLayout.java:2292)
[MonoDroid] at androidx.customview.widget.ViewDragHelper.continueSettling(ViewDragHelper.java:779)
[MonoDroid] at androidx.drawerlayout.widget.DrawerLayout.computeScroll(DrawerLayout.java:1375)
[MonoDroid] at android.view.View.updateDisplayListIfDirty(View.java:21562)
[MonoDroid] at android.view.View.draw(View.java:22435)
[MonoDroid] at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
[MonoDroid] at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
[MonoDroid] at android.view.View.updateDisplayListIfDirty(View.java:21570)
[MonoDroid] at android.view.View.draw(View.java:22435)
[MonoDroid] at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
[MonoDroid] at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
[MonoDroid] at android.view.View.updateDisplayListIfDirty(View.java:21570)
[MonoDroid] at android.view.View.draw(View.java:22435)
[MonoDroid] at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
[MonoDroid] at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
[MonoDroid] at android.view.View.updateDisplayListIfDirty(View.java:21570)
[MonoDroid] at android.view.View.draw(View.java:22435)
[MonoDroid] at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
[MonoDroid] at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
[MonoDroid] at android.view.View.updateDisplayListIfDirty(View.java:21570)
[MonoDroid] at android.view.View.draw(View.java:22435)
[MonoDroid] at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
[MonoDroid] at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
[MonoDroid] at android.view.View.updateDisplayListIfDirty(View.java:21570)
[MonoDroid] at android.view.View.draw(View.java:22435)
[MonoDroid] at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
[MonoDroid] at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
[MonoDroid] at android.view.View.draw(View.java:22707)
[MonoDroid] at com.android.internal.policy.DecorView.draw(DecorView.java:819)
[MonoDroid] at android.view.View.updateDisplayListIfDirty(View.java:21579)
[MonoDroid] at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:534)
[MonoDroid] at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:540)
[MonoDroid] at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:616)
[MonoDroid] at android.view.ViewRootImpl.draw(ViewRootImpl.java:4531)
[MonoDroid] at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4251)
[MonoDroid] at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3374)
[MonoDroid] at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2179)
[MonoDroid] at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8798)
[MonoDroid] at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1037)
[MonoDroid] at android.view.Choreographer.doCallbacks(Choreographer.java:845)
[MonoDroid] at android.view.Choreographer.doFrame(Choreographer.java:780)
[MonoDroid] at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1022)
[MonoDroid] at android.os.Handler.handleCallback(Handler.java:938)
[MonoDroid] at android.os.Handler.dispatchMessage(Handler.java:99)
[MonoDroid] at android.os.Looper.loopOnce(Looper.java:201)
[MonoDroid] at android.os.Looper.loop(Looper.java:288)
[MonoDroid] at android.app.ActivityThread.main(ActivityThread.java:7870)
[MonoDroid] at java.lang.reflect.Method.invoke(Native Method)
[MonoDroid] at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
[MonoDroid] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
Description
On Android, using your sample FlyoutPage project, the application crashes on a simple orientation change.
https://github.com/dotnet/maui/assets/140050432/46b96486-f2b3-4d0e-82fa-21dd4a60ca6b
The command 'dotnet workload list' give the following output on my setup:
Welcome to .NET 8.0!
SDK Version: 8.0.200
Installed Workload Id Manifest Version Installation Source
maui-windows 8.0.6/8.0.100 VS 17.10.34607.79, VS 17.9.34616.47
maccatalyst 17.2.8022/8.0.100 VS 17.10.34607.79, VS 17.9.34616.47
ios 17.2.8022/8.0.100 VS 17.10.34607.79, VS 17.9.34616.47
android 34.0.79/8.0.100 VS 17.10.34607.79, VS 17.9.34616.47
aspire 8.0.0-preview.3.24105.21/8.0.100 VS 17.10.34607.79
Steps to Reproduce
Link to public reproduction project repository
https://github.com/dotnet/maui-samples/tree/main/8.0/Navigation/FlyoutPageSample
Version with bug
Unknown/Other
Is this a regression from previous behavior?
Not sure, did not test other versions
Last version that worked well
Unknown/Other
Affected platforms
Android
Affected platform versions
Android API 32, Android API 34...
Did you find any workaround?
No response
Relevant log output