Skip to content

FlyoutPage Android app crashing on orientation change #20858

@PratzelBoy

Description

@PratzelBoy

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

  1. Download maui-sample project (https://github.com/dotnet/maui-samples/tree/main/8.0/Navigation/FlyoutPageSample)
  2. Allow all possible orientations in the Android Activity by adding "ScreenOrientation = ScreenOrientation.FullSensor" in the MainActivity class
  3. Install and launch the app on a device or emulator
  4. Give the device/emulator a portrait or reverse portrait orientation and close the left navigation menu if it's already opened
  5. Reopen the left navigation menu (the page displayed on the right side must now have a semi transparent overlay)
  6. Turn the device in landscape or reverse landscape orientation
  7. 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)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status

    Done

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions