'How to create an instance of Room Dao or Repository or Viewmodel in GlanceAppWidget class using Jetpack Compose
I am trying to load list of data in App Widget using jetpack compose and i have stored in Room Local database, how i can retrive the data in GlanceAppWidget class.
Solution 1:[1]
You need to work with GlanceAppWidgetReceiver class. You can create coroutine and access your domain layer. After that, you can find your GlanceAppWidget class and send your data your widget class. Please have look this article to full example : https://medium.com/better-programming/android-jetpack-glance-for-app-widgets-bd7a704624ba
@AndroidEntryPoint
class MarketWidgetReceiver : GlanceAppWidgetReceiver() {
override val glanceAppWidget: GlanceAppWidget = MarketWidget()
private val coroutineScope = MainScope()
@Inject
lateinit var marketInformationUseCase: MarketInformationUseCase
override fun onUpdate(
context: Context,
appWidgetManager: AppWidgetManager,
appWidgetIds: IntArray
) {
super.onUpdate(context, appWidgetManager, appWidgetIds)
observeData(context)
}
override fun onReceive(context: Context, intent: Intent) {
super.onReceive(context, intent)
if (intent.action == MarketRefreshCallback.UPDATE_ACTION) {
observeData(context)
}
}
private fun observeData(context: Context) {
coroutineScope.launch {
val marketInformation =
marketInformationUseCase.getMarketInformation(MarketInformationTimespan.TIMESPAN_1DAYS)
val glanceId =
GlanceAppWidgetManager(context).getGlanceIds(MarketWidget::class.java).firstOrNull()
glanceId?.let {
updateAppWidgetState(context, PreferencesGlanceStateDefinition, it) { pref ->
pref.toMutablePreferences().apply {
this[currentPrice] =
marketInformation.currentPrice
this[changeRate] =
marketInformation.changeRate
this[isChangeRatePositive] =
marketInformation.changeStatus == MarketInformationChangeStatus.POSITIVE
}
}
glanceAppWidget.update(context, it)
}
}
}
companion object {
val currentPrice = stringPreferencesKey("currentPrice")
val changeRate = stringPreferencesKey("changeRate")
val isChangeRatePositive = booleanPreferencesKey("isChangeRatePositive")
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Enes Zor |