Crash after fresh install when importing OPML file: Canvas trying to draw too large bitmap
1. Environment
2. Describe the bug
After installing Read You (v0.11.1), I tried importing an OPML file exported from Fluent Reader on my PC. The app crashed immediately, throwing a java.lang.RuntimeException due to the Canvas attempting to draw a bitmap that’s too large (140935168 bytes). This happened right after a fresh install, and the file works fine in other apps.
3. Stack Trace
java.lang.RuntimeException: Canvas: trying to draw too large(140935168bytes) bitmap.
at android.graphics.RecordingCanvas.throwIfCannotDraw(RecordingCanvas.java:266)
at android.graphics.BaseRecordingCanvas.drawBitmap(BaseRecordingCanvas.java:97)
at androidx.compose.ui.graphics.AndroidCanvas.drawImageRect-HPBpro0(AndroidCanvas.android.kt:93)
at androidx.compose.ui.graphics.drawscope.CanvasDrawScope.drawImage-AZ2fEMs(CanvasDrawScope.kt:34)
at androidx.compose.ui.node.LayoutNodeDrawScope.drawImage-AZ2fEMs(LayoutNodeDrawScope.kt:25)
at androidx.compose.ui.graphics.drawscope.DrawScope.drawImage-AZ2fEMs$default(DrawScope.kt:103)
at androidx.compose.ui.graphics.painter.BitmapPainter.onDraw(BitmapPainter.kt:51)
at androidx.compose.ui.graphics.painter.Painter.draw-x_KDEd0(Painter.kt:123)
at coil.compose.CrossfadePainter.drawPainter(CrossfadePainter.kt:127)
at coil.compose.CrossfadePainter.onDraw(CrossfadePainter.kt:80)
at androidx.compose.ui.graphics.painter.Painter.draw-x_KDEd0(Painter.kt:123)
at coil.compose.AsyncImagePainter.onDraw(AsyncImagePainter.kt:46)
at androidx.compose.ui.graphics.painter.Painter.draw-x_KDEd0(Painter.kt:123)
at androidx.compose.ui.draw.PainterNode.draw(PainterModifier.kt:182)
at androidx.compose.ui.node.LayoutNodeDrawScope.drawDirect-eZhPAX0$ui_release(LayoutNodeDrawScope.kt:50)
at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:53)
at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:28)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:6)
at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:9)
at androidx.compose.ui.node.NodeCoordinator$drawBlock$1$1.invoke(NodeCoordinator.kt:9)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:114)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:48)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:136)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:3)
at androidx.compose.ui.node.NodeCoordinator$drawBlock$1.invoke(NodeCoordinator.kt:32)
at androidx.compose.ui.platform.GraphicsLayerOwnerLayer$recordLambda$1.invoke(GraphicsLayerOwnerLayer.android.kt:23)
at androidx.compose.ui.graphics.layer.GraphicsLayerV29.record(GraphicsLayerV29.android.kt:35)
at androidx.compose.ui.graphics.layer.GraphicsLayer.recordInternal(AndroidGraphicsLayer.android.kt:44)
at androidx.compose.ui.platform.GraphicsLayerOwnerLayer.updateDisplayList(GraphicsLayerOwnerLayer.android.kt:137)
at androidx.compose.ui.platform.AndroidComposeView.dispatchDraw(AndroidComposeView.android.kt:100)
at android.view.View.draw(View.java:23901)
at android.view.View.updateDisplayListIfDirty(View.java:22767)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
at android.view.View.updateDisplayListIfDirty(View.java:22714)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
at android.view.View.updateDisplayListIfDirty(View.java:22714)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
at android.view.View.updateDisplayListIfDirty(View.java:22714)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
at android.view.View.updateDisplayListIfDirty(View.java:22714)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
at android.view.View.updateDisplayListIfDirty(View.java:22714)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
at android.view.View.updateDisplayListIfDirty(View.java:22714)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:602)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:608)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:684)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:5440)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:5148)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:4212)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2919)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:10491)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1108)
at android.view.Choreographer.doCallbacks(Choreographer.java:866)
at android.view.Choreographer.doFrame(Choreographer.java:797)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1092)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
I am also seeing this error. When I try to view Unread feeds against a FreshRSS account, the feeds list suddenly "slides" in a blank view before I can select one, and after a few seconds Android tells me the app is not responding. If I continue telling Android to "Wait", eventually the above stack trace appears with a similar complaint about a similarly-sized bitmap (over 110 MB).
I suspect that if I can consume or mark Read the offending feed (not sure which it is right now) in another client, then Read You may unblock itself..
Update: found it, it was https://analognowhere.com/feed/rss.xml
Very like #693 and #780