apps-android-commons: Crash: Application crashes on uploading a large image

Summary:

The application crashes on uploading a very large image. In this case, the image size was 28.69MB.

Steps to reproduce:

  1. Find an image which has a large size.
  2. Try uploading it.

System logs:

java.lang.RuntimeException: Canvas: trying to draw too large(192000000bytes) bitmap.
        2020-02-02 05:35:10.603 30429-30429/fr.free.nrw.commons.beta E/AndroidRuntime: FATAL EXCEPTION: main
    Process: fr.free.nrw.commons.beta, PID: 30429
    java.lang.RuntimeException: Canvas: trying to draw too large(192000000bytes) bitmap.
        at android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:229)
        at android.view.RecordingCanvas.drawBitmap(RecordingCanvas.java:98)
        at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:545)
        at android.widget.ImageView.onDraw(ImageView.java:1360)
        at android.view.View.draw(View.java:20238)
        at android.view.View.updateDisplayListIfDirty(View.java:19113)
        at android.view.View.draw(View.java:19966)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4337)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4114)
        at android.view.View.updateDisplayListIfDirty(View.java:19104)
        at android.view.View.draw(View.java:19966)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4337)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4114)
        at android.view.View.draw(View.java:20241)
        at androidx.viewpager.widget.ViewPager.draw(ViewPager.java:2426)
        at android.view.View.updateDisplayListIfDirty(View.java:19113)
        at android.view.View.draw(View.java:19966)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4337)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4114)
        at android.view.View.updateDisplayListIfDirty(View.java:19104)
        at android.view.View.draw(View.java:19966)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4337)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4114)
        at android.view.View.updateDisplayListIfDirty(View.java:19104)
        at android.view.View.draw(View.java:19966)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4337)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4114)
        at android.view.View.updateDisplayListIfDirty(View.java:19104)
        at android.view.View.draw(View.java:19966)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4337)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4114)
        at android.view.View.updateDisplayListIfDirty(View.java:19104)
        at android.view.View.draw(View.java:19966)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4337)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4114)
        at android.view.View.updateDisplayListIfDirty(View.java:19104)
        at android.view.View.draw(View.java:19966)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4337)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4114)
        at android.view.View.draw(View.java:20241)
        at com.android.internal.policy.DecorView.draw(DecorView.java:784)
        at android.view.View.updateDisplayListIfDirty(View.java:19113)
        at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:686)
        at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:692)
        at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:801)
        at android.view.ViewRootImpl.draw(ViewRootImpl.java:3403)
        at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3193)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2562)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1532)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7406)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1092)
        at android.view.Choreographer.doCallbacks(Choreographer.java:888)
        at android.view.Choreographer.doFrame(Choreographer.java:819)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1078)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:201)
        at android.app.ActivityThread.main(ActivityThread.java:6823)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)


Device and Android version:

What make and model device: Redmi Note 7 Pro What Android version: Android 9

Commons app version: version: 2.12.2-debug branch: master

Would you like to work on the issue?

Yes. I would like to work on this issue.

About this issue

  • Original URL
  • State: open
  • Created 4 years ago
  • Comments: 15 (12 by maintainers)

Most upvoted comments

Going to tag @nicolas-raoul for this one, as I am not sure what the Commons community’s stance is on extremely large uploads - it will affect whether we choose to compress before or after.

@Pratham2305 Yes, you’re right, but there are other consequences of using android:hardwareAccelerated="false". So, I think it is not the best solution.