How to instantiate Presenter in AppWidgetProvider?

56 views Asked by At

I am trying to use a presenter with AppWidgetProvider.

I have an instance variable as following

private latelinit var presenter: Presenter

Then inside onEnabled, I set the presenter. And then inside onUpdate, I am using the presenter.

    override fun onEnabled(context: Context?) {
        Log.d("DEBUG", "Inside onEnabled")
        setPresenter(Presenter(this))
        super.onEnabled(context)
    }
    
    override fun onUpdate(
        context: Context,
        appWidgetManager: AppWidgetManager,
        appWidgetIds: IntArray
    ) {
        Log.d("DEBUG", "Inside onUpdate")
        presenter!!.onUpdate(context, appWidgetIds)
    }

    override fun setPresenter(presenter: Presenter) {
        this.presenter = presenter
        Log.d("DEBUG", "Inside onSetPresenter Presenter set")
    }

As per logs, onEnabled is called prior to onUpdate which is what I expect. However, when I use presenter inside onUpdate, it complains of Presenter not being initialized.

What is the right way to set presenter inside an AppWidgetProvider?

1

There are 1 answers

2
CommonsWare On

What is the right way to set presenter inside an AppWidgetProvider?

You would not "set" it. At most, you would create an instance in onUpdate() and use it.

An AppWidgetProvider is a manifest-registered BroadcastReceiver. An instance of your AppWidgetProvider will be used for a single callback, then discarded. Storing data in properties of the AppWidgetProvider, such as your presenter, is useless.