Не обновляется виджет вне приложения

Всем привет. Помогите разобраться с виджетом. Есть виджет, отображающий список. ListView. Есть кнопка обновить. Список подтягивается из базы данных. Проблема в том, что когда я захожу в приложение, сворачиваю его и нажимаю обновить на виджете, то он не обновляется, ничего не меняется даже есть я в базе данных в списке меняю элементы. А если я выхожу из приложения полностью, чтобы по приложению отработал ондестрой, и нажимаю на виджете обновить, то он без проблем подтягивает актуальную версию списка из БД. Помогите решить эту проблему. Вот мой виджет:

const val ACTION_ON_CLICK = "itemonclick"
const val ITEM_POSITION = "item_position"

class FavoriteGatesWidgetProvider :
    AppWidgetProvider(),
    KoinComponent,
    WidgetRepository.ResponseListener {

    private val widgetRepository: WidgetRepository by lazy { WidgetRepository(this) }
    private val remoteViews =
        RemoteViews(TPSApplication.app.packageName, R.layout.favorite_gates_widget)
    private var listResponse: Resource<List<FavoriteGate>>? = null

    override fun onUpdate(
        context: Context,
        appWidgetManager: AppWidgetManager,
        appWidgetIds: IntArray
    ) {
        Log.e("FFFF", "onUpdate")
        for (appWidgetId in appWidgetIds) {
            updateAppWidget(context, appWidgetManager, appWidgetId)
        }
    }

    override fun onReceive(context: Context?, intent: Intent?) {
        super.onReceive(context, intent)
        Log.e("FFFF", "onreceive")
        if (intent?.action.equals(ACTION_ON_CLICK, true)) {
            val itemPos = intent?.getIntExtra(ITEM_POSITION, -1)
            if (itemPos != -1) {
                Toast.makeText(
                    context, "Открывается $itemPos",
                    Toast.LENGTH_SHORT
                ).show()

                widgetRepository.openGate()
            }
        } else if (intent?.action.equals(ACTION_APPWIDGET_UPDATE, true)) {
            getGatesList()
        }
    }

    override fun onEnabled(context: Context) {
        Log.e("FFFF", "enable")
        getGatesList()
    }

    override fun onDisabled(context: Context) {
        Log.e("FFFF", "disable")
        // Enter relevant functionality for when the last widget is disabled
    }

    private fun updateAppWidget(
        context: Context,
        appWidgetManager: AppWidgetManager,
        appWidgetId: Int
    ) {
        //setList(remoteViews, context, appWidgetId, listResponse ?: Resource(Status.ERROR, null, null, null))
        setUpdateButton(remoteViews, context, appWidgetId)
        setListClick(remoteViews, context, appWidgetId)
        appWidgetManager.updateAppWidget(appWidgetId, remoteViews)
        //appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId, R.id.listview_gate_list)
    }

    private fun setList(rv: RemoteViews, context: Context, appWidgetId: Int, listResponse: Resource<List<FavoriteGate>>) {
        if (listResponse.status == Status.SUCCESS && listResponse.data != null) {
            Intent(context, WidgetService::class.java).also { adapter ->
                adapter.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
                val data: Uri = Uri.parse(adapter.toUri(Intent.URI_INTENT_SCHEME))
                adapter.data = data
                // сюда помещать список
                val bundle = Bundle().apply {
                    putParcelableArrayList("list", listResponse.data as ArrayList<out Parcelable>)
                }
                adapter.putExtra("list", bundle)
                rv.setRemoteAdapter(R.id.listview_gate_list, adapter)
            }
        }
    }

    private fun setUpdateButton(rv: RemoteViews, context: Context, appWidgetId: Int) {
        Intent(context, FavoriteGatesWidgetProvider::class.java).also { updIntent ->
            updIntent.action = ACTION_APPWIDGET_UPDATE
            updIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, intArrayOf(appWidgetId))
            PendingIntent.getBroadcast(context, appWidgetId, updIntent, 0).let { updatePending ->
                rv.setOnClickPendingIntent(R.id.button_update, updatePending)
            }
        }
    }

    private fun setListClick(rv: RemoteViews, context: Context, appWidgetId: Int) {
        val listClickIntent = Intent(context, FavoriteGatesWidgetProvider::class.java)
        listClickIntent.action = ACTION_ON_CLICK
        val listClickPIntent = PendingIntent.getBroadcast(
            context, 0,
            listClickIntent, 0
        )
        rv.setPendingIntentTemplate(R.id.listview_gate_list, listClickPIntent)
    }

    override fun onOpenGateResponseReceived(gateResponse: Resource<OpenGateResponse>) {
        remoteViews.setTextViewText(R.id.textview_gate_status, "qweqwe")
        val updIntent = Intent(TPSApplication.app, FavoriteGatesWidgetProvider::class.java)
        updIntent.action = ACTION_APPWIDGET_UPDATE
        val updPIntent = PendingIntent.getBroadcast(
            TPSApplication.app,
            1, updIntent, 0
        )
        Intent().also { clickIntent ->
            remoteViews.setTextViewText(R.id.textview_gate_status, "asdasdasdasd")
            remoteViews.setOnClickFillInIntent(R.id.textview_gate_status, clickIntent)
        }
    }

    override fun onGatesListResponseReceived(listResponse: Resource<List<FavoriteGate>>) {
        Log.e("FFFF", "listresponce" + listResponse?.data?.size.toString())
        this.listResponse = listResponse
        val componentName = ComponentName(TPSApplication.app, FavoriteGatesWidgetProvider::class.java)
        val manager = AppWidgetManager.getInstance(TPSApplication.app)
        setList(remoteViews, TPSApplication.app, manager.getAppWidgetIds(componentName)[0], listResponse)
        manager.updateAppWidget(componentName, remoteViews)
    }
    fun getGatesList() { widgetRepository.getGatesList() }
}

WidgetFactory

class WidgetFactory(val context: Context, val intent: Intent) :
    RemoteViewsService.RemoteViewsFactory, KoinComponent {

    private var gatesArray = mutableListOf<FavoriteGate>()

    override fun onCreate() {}

    override fun onDataSetChanged() {
        val bundle = intent.getBundleExtra("list")
        val list = bundle?.getParcelableArrayList<FavoriteGate>("list")
        gatesArray = list as MutableList<FavoriteGate>
    }

    override fun onDestroy() {}

    override fun getCount() = gatesArray.size ?: 0

    override fun getViewAt(position: Int): RemoteViews {
        val rView = RemoteViews(
            context.packageName,
            R.layout.item_list_widget
        )
        try {
            rView.setTextViewText(R.id.textview_gate_name, gatesArray[position].name)
        } catch (e: IndexOutOfBoundsException) {
        }

        Intent().also { clickIntent ->
            clickIntent.putExtra(ITEM_POSITION, position)
            rView.setOnClickFillInIntent(R.id.button_gate, clickIntent)
        }
        return rView
    }

    override fun getLoadingView() = null

    override fun getViewTypeCount() = 1

    override fun getItemId(position: Int) = position.toLong()

    override fun hasStableIds() = true
}

WidgetService

class WidgetService : RemoteViewsService() {
    override fun onGetViewFactory(intent: Intent) = WidgetFactory(applicationContext, intent)
}

Ответы (0 шт):