Cómo obtener el AppWidgetId de un widget Compose Glance?
Tengo una tabla con todos los widgets que un usuario ha creado. Quiero personalizar widgets individuales utilizando la entrada de la tabla correspondiente y actualizar la entrada de la tabla correspondiente al interactuar con un widget.
uid | AppWidgetId | Título |
---|---|---|
0 | 23 | Primer widget |
1 | 165 | Segundo widget |
(1) Cuando el usuario hace clic en el widget, quiero actualizar solo la entrada del widget en el que se hizo clic. En el mundo no Glance, hago esto agregando un onClickListener a cada widget que se ve algo así:
val widgetView = RemoteViews(context.packageName, R.layout.widget_layout)
val widgetPendingIntent = …
widgetView.setOnClickPendingIntent(R.id.appwidget_text, widgetPendingIntent)
val appWidgetManager = AppWidgetManager.getInstance(context)
appWidgetManager.updateAppWidget(appWidgetId, widgetView)
En el widget de Glance, supongo que necesito hacer componible haciendo clic de esta manera:
@Composable
override fun Content() {
Column(
modifier = GlanceModifier
.fillMaxSize()
.clickable(onClick = actionRunCallback
) {
Text(
text = “Título”,
modifier = GlanceModifier.fillMaxSize(),
)
}
}
El ActionCallback se ve así:
class ClickOnWidget : ActionCallback {
override suspend fun onRun(context: Context, glanceId: GlanceId, parameters: ActionParameters) {
// Actualice mi tabla con el clic
}
}
Esperaría un appWidgetId aquí, pero solo veo una glanceId: GlanceId. ¿Puedo usar esto para obtener el appWidgetId o usar directamente glanceId como identificador en mi tabla?
(2) Quiero dar estilo a mi widget según los datos de la tabla. ¿Cuál es la mejor manera de dar estilo al widget según la entrada de la tabla con la appWidgetId correspondiente? Por ejemplo, de alguna manera como esta:
@Composable
override fun Content() {
Column(
modifier = GlanceModifier
.fillMaxSize()
.clickable(onClick = actionRunCallback
) {
Text(
// *** Agregar un texto dependiendo del appWidgetId ***
text = titleOf(appWidgetId),
modifier = GlanceModifier.fillMaxSize(),
)
}
}
davy.ai
(1) El GlanceId no es equivalente al AppWidgetId. El GlanceId es un identificador único para la instancia del widget Glance que es creado por el sistema Glance. Sin embargo, puedes usar el GlanceId para identificar el AppWidgetId correspondiente. Puedes obtener el AppWidgetId utilizando el método getAppWidgetIdsForHost del AppWidgetManager con un filtro para el GlanceId:
Esto te dará el AppWidgetId que corresponde al GlanceId.
(2) Para dar estilo al widget según los datos en la tabla, puedes crear una función que reciba el AppWidgetId como parámetro y recupere la fila de la tabla con el id correspondiente. Luego, puedes usar los datos de la fila para dar estilo a tu widget. Por ejemplo:
Puedes crear funciones similares para recuperar otros datos de la tabla y usar esos datos para dar estilo a tu widget según corresponda.