Skip to content

Fix issue where the toast bar is not shown if not called from main thread #1727

@maskaravivek

Description

@maskaravivek

Summary:

Sometimes the toast is not shown if the caller thread isn't the UI thread.

Steps to reproduce:

Try to download an image.

Add System logs:

2018-07-19 15:04:29.857 19670-19957/fr.free.nrw.commons.debug E/unknown:: unhandled exception
    java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
        at android.os.Handler.<init>(Handler.java:200)
        at android.os.Handler.<init>(Handler.java:114)
        at android.widget.Toast$TN$2.<init>(Toast.java:340)
        at android.widget.Toast$TN.<init>(Toast.java:340)
        at android.widget.Toast.<init>(Toast.java:103)
        at android.widget.Toast.makeText(Toast.java:256)
        at fr.free.nrw.commons.utils.ViewUtil.showLongToast(ViewUtil.java:22)
        at fr.free.nrw.commons.utils.ImageUtils.setWallpaper(ImageUtils.java:200)
        at fr.free.nrw.commons.utils.ImageUtils.access$000(ImageUtils.java:36)
        at fr.free.nrw.commons.utils.ImageUtils$1.onNewResultImpl(ImageUtils.java:181)
        at com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber.onNewResultImpl(BaseBitmapDataSubscriber.java:62)
        at com.facebook.datasource.BaseDataSubscriber.onNewResult(BaseDataSubscriber.java:48)
        at com.facebook.datasource.AbstractDataSource$1.run(AbstractDataSource.java:178)
        at com.facebook.common.executors.CallerThreadExecutor.execute(CallerThreadExecutor.java:49)
        at com.facebook.datasource.AbstractDataSource.notifyDataSubscriber(AbstractDataSource.java:169)
        at com.facebook.datasource.AbstractDataSource.notifyDataSubscribers(AbstractDataSource.java:160)
        at com.facebook.datasource.AbstractDataSource.setResult(AbstractDataSource.java:212)
        at com.facebook.imagepipeline.datasource.AbstractProducerToDataSourceAdapter.onNewResultImpl(AbstractProducerToDataSourceAdapter.java:73)
        at com.facebook.imagepipeline.datasource.CloseableProducerToDataSourceAdapter.onNewResultImpl(CloseableProducerToDataSourceAdapter.java:57)
        at com.facebook.imagepipeline.datasource.CloseableProducerToDataSourceAdapter.onNewResultImpl(CloseableProducerToDataSourceAdapter.java:25)
        at com.facebook.imagepipeline.datasource.AbstractProducerToDataSourceAdapter$1.onNewResultImpl(AbstractProducerToDataSourceAdapter.java:51)
        at com.facebook.imagepipeline.producers.BaseConsumer.onNewResult(BaseConsumer.java:99)
        at com.facebook.imagepipeline.producers.MultiplexProducer$Multiplexer.onNextResult(MultiplexProducer.java:444)
        at com.facebook.imagepipeline.producers.MultiplexProducer$Multiplexer$ForwardingConsumer.onNewResultImpl(MultiplexProducer.java:501)
        at com.facebook.imagepipeline.producers.MultiplexProducer$Multiplexer$ForwardingConsumer.onNewResultImpl(MultiplexProducer.java:498)
        at com.facebook.imagepipeline.producers.BaseConsumer.onNewResult(BaseConsumer.java:99)
        at com.facebook.imagepipeline.producers.BitmapMemoryCacheProducer$1.onNewResultImpl(BitmapMemoryCacheProducer.java:145)
        at com.facebook.imagepipeline.producers.BitmapMemoryCacheProducer$1.onNewResultImpl(BitmapMemoryCacheProducer.java:103)
        at com.facebook.imagepipeline.producers.BaseConsumer.onNewResult(BaseConsumer.java:99)
        at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.handleResult(DecodeProducer.java:350)
        at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.doDecode(DecodeProducer.java:272)
        at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.access$200(DecodeProducer.java:109)
        at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder$1.run(DecodeProducer.java:142)
        at com.facebook.imagepipeline.producers.JobScheduler.doJob(JobScheduler.java:204)
        at com.facebook.imagepipeline.producers.JobScheduler.access$000(JobScheduler.java:24)
        at com.facebook.imagepipeline.producers.JobScheduler$1.run(JobScheduler.java:75)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
        at com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:42)
        at java.lang.Thread.run(Thread.java:760)

Would you like to work on the issue?

Yes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions