Glance simplifie la gestion des interactions des utilisateurs via les classes Action
. Aperçu
Les classes Action
définissent les actions qu'un utilisateur peut effectuer, et vous pouvez spécifier le
effectuée en réponse à l'action. Vous pouvez appliquer un Action
à n'importe quel
à l'aide de la méthode GlanceModifier.clickable
.
Les widgets d'application dépendent d'un processus distant. Les actions sont donc définies au moment de leur création.
et l'exécution a lieu dans le processus à distance. Dans la version native de RemoteViews
,
cette opération s'effectue via PendingIntents
.
Les actions suivantes sont décrites sur cette page:
Lancer une activité
Pour lancer une activité suite à une interaction de l'utilisateur, indiquez
la fonction actionStartActivity
à un Button
ou à un autre composable via la
Modificateur GlanceModifier.clickable
(..).
Fournissez l'un des éléments suivants dans actionStartActivity
:
- La classe d'activité cible
ComponentName
- Une intention
Glance traduit l'action en PendingIntent
avec la cible fournie et
paramètres. Dans l'exemple suivant, NavigationActivity
est lancé lorsqu'un
l'utilisateur clique sur le bouton:
@Composable fun MyContent() { // .. Button( text = "Go Home", onClick = actionStartActivity<MyActivity>() ) }
Lancer un service
Comme pour le lancement d'une activité, lancez un service lors d'une interaction de l'utilisateur à l'aide d'un
des méthodes actionStartService
.
Fournissez l'un des éléments suivants dans actionStartService
:
- La classe d'activité cible
ComponentName
- Un intent
@Composable fun MyButton() { // .. Button( text = "Sync", onClick = actionStartService<SyncService>( isForegroundService = true // define how the service is launched ) ) }
Envoyer un événement de diffusion
Envoyez un événement de diffusion en cas d'interaction d'un utilisateur à l'aide de l'une des
Méthodes actionSendBroadcast
:
Fournissez l'un des éléments suivants dans actionSendBroadcast
:
- Action de chaîne
ComponentName
- Un intent
- Classe
BroadcastReceiver
@Composable fun MyButton() { // .. Button( text = "Send", onClick = actionSendBroadcast<MyReceiver>() ) }
Effectuer des actions personnalisées
Au lieu de lancer une cible spécifique, Glance peut utiliser une action lambda ou une
actionRunCallback
pour effectuer une action, comme mettre à jour l'UI ou l'état de
l'interaction de l'utilisateur.
Exécuter des actions lambda
Vous pouvez utiliser les fonctions lambda comme rappels des interactions de l'interface utilisateur.
Par exemple, transmettez la fonction lambda à GlanceModifier.clickable
.
modificateur:
Text( text = "Submit", modifier = GlanceModifier.clickable { submitData() } )
Vous pouvez également le transmettre au paramètre onClick
sur les composables compatibles:
Button( text = "Submit", onClick = { submitData() } )
Exécuter ActionCallback
Vous pouvez également utiliser les méthodes actionRunCallback
pour effectuer une action sur
l'interaction de l'utilisateur. Pour ce faire, fournissez une implémentation personnalisée de la classe
ActionCallback
:
@Composable private fun MyContent() { // .. Image( provider = ImageProvider(R.drawable.ic_hourglass_animated), modifier = GlanceModifier.clickable( onClick = actionRunCallback<RefreshAction>() ), contentDescription = "Refresh" ) } class RefreshAction : ActionCallback { override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { // TODO implement } }
Lors du clic de l'utilisateur, la méthode suspend onAction
de l'objet fourni
ActionCallback
est appelé, en exécutant la logique définie (par exemple, en demandant
actualiser les données).
Pour mettre à jour le widget une fois l'action effectuée, créez une instance et
appeler update
(..). Pour en savoir plus, consultez Gérer l'état de GlanceAppWidget.
.
class RefreshAction : ActionCallback { override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { // do some work but offset long-term tasks (e.g a Worker) MyAppWidget().update(context, glanceId) } }
Fournir des paramètres aux actions
Pour fournir des informations supplémentaires à une action, utilisez la méthode ActionParameters
.
pour créer une paire clé-valeur typée. Par exemple, pour définir les clics
destination:
private val destinationKey = ActionParameters.Key<String>( NavigationActivity.KEY_DESTINATION ) class MyAppWidget : GlanceAppWidget() { // .. @Composable private fun MyContent() { // .. Button( text = "Home", onClick = actionStartActivity<NavigationActivity>( actionParametersOf(destinationKey to "home") ) ) Button( text = "Work", onClick = actionStartActivity<NavigationActivity>( actionParametersOf(destinationKey to "work") ) ) } override suspend fun provideGlance(context: Context, id: GlanceId) { provideContent { MyContent() } } }
En dessous, les paramètres sont inclus dans l'intent utilisé pour lancer activité, ce qui permet à l'activité cible de la récupérer.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val destination = intent.extras?.getString(KEY_DESTINATION) ?: return // ... } }
Les paramètres sont également fournis à ActionCallback
. Utilisez la classe
Parameters.Key
pour récupérer la valeur:
class RefreshAction : ActionCallback { private val destinationKey = ActionParameters.Key<String>( NavigationActivity.KEY_DESTINATION ) override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { val destination: String = parameters[destinationKey] ?: return // ... } }