Actions – Android
Lorsqu’une action de cartes est exécutée, la classe qui a été passée à l’appel de rendu qui implémente l' ICardActionHandler
interface est appelée. Voici comment définir votre gestionnaire d’actions :
public class ActionHandler implements ICardActionHandler
{
@Override
public void onAction(BaseActionElement actionElement, RenderedAdaptiveCard renderedCard)
{
ActionType actionType = actionElement.GetElementType();
if (actionType == ActionType.Submit)
{
onSubmit(actionElement, renderedCard);
}
else if (actionType == ActionType.ShowCard)
{
onShowCard(actionElement);
}
else if (actionType == ActionType.OpenUrl)
{
onOpenUrl(actionElement);
}
else if (actionType == ActionType.Custom)
{
//Handle activation of custom actions
...
}
}
private void onSubmit(BaseActionElement actionElement, RenderedAdaptiveCard renderedAdaptiveCard)
{
SubmitAction submitAction = null;
if (actionElement instanceof SubmitAction)
{
submitAction = (SubmitAction) actionElement;
}
else if ((submitAction = SubmitAction.dynamic_cast(actionElement)) == null)
{
throw new InternalError("Unable to convert BaseActionElement to ShowCardAction object model.");
}
String data = submitAction.GetDataJson();
Map<String, String> keyValueMap = renderedAdaptiveCard.getInputs();
if (!data.isEmpty())
{
try
{
JSONObject object = new JSONObject(data);
showToast("Submit data: " + object.toString() + "\nInput: " + keyValueMap.toString(), Toast.LENGTH_LONG);
}
catch (JSONException e)
{
showToast(e.toString(), Toast.LENGTH_LONG);
}
}
else
{
showToast("Submit input: " + keyValueMap.toString(), Toast.LENGTH_LONG);
}
}
private void onShowCard(BaseActionElement actionElement)
{
ShowCardAction showCardAction = null;
if (actionElement instanceof ShowCardAction)
{
showCardAction = (ShowCardAction) actionElement;
}
else if ((showCardAction = ShowCardAction.dynamic_cast(actionElement)) == null)
{
throw new InternalError("Unable to convert BaseActionElement to ShowCardAction object model.");
}
//Get the card from show card and create a view
RenderedAdaptiveCard renderedCard = AdaptiveCardRenderer.getInstance().render(context, fragmentManager, showCardAction.GetCard(), cardActionHandler, hostConfig);
ViewGroup viewGroup = (ViewGroup) renderedCard.getView();
...
}
private void onOpenUrl(BaseActionElement actionElement)
{
OpenUrlAction openUrlAction = null;
if (actionElement instanceof ShowCardAction)
{
openUrlAction = (OpenUrlAction) actionElement;
}
else if ((openUrlAction = OpenUrlAction.dynamic_cast(actionElement)) == null)
{
throw new InternalError("Unable to convert BaseActionElement to ShowCardAction object model.");
}
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(openUrlAction.GetUrl()));
this.startActivity(browserIntent);
}
}
Modifications avec rupture dans v 1.1
L’élément multimédia inclus dans cette version requiert que deux nouvelles méthodes soient implémentées par les classes qui implémentent ICardActionHandler
, ces méthodes sont les suivantes :
onMediaPlay
est appelé lorsque le bouton de lecture est enfoncé pour la première fois dans un élément multimédiaonMediaStop
est appelé lorsque le média atteint son extrémité
Les signatures pour ces méthodes sont les suivantes :
public void onMediaPlay(BaseCardElement mediaElement, RenderedAdaptiveCard renderedAdaptiveCard)
public void onMediaStop(BaseCardElement mediaElement, RenderedAdaptiveCard renderedAdaptiveCard)
Et l’implémentation de ActionHandler de l’exemple précédent ressemble à ce qui suit :
public class ActionHandler implements ICardActionHandler
{
@Override
public void onAction(BaseActionElement actionElement, RenderedAdaptiveCard renderedCard)
{ }
private void onSubmit(BaseActionElement actionElement, RenderedAdaptiveCard renderedAdaptiveCard)
{ }
private void onShowCard(BaseActionElement actionElement)
{ }
private void onOpenUrl(BaseActionElement actionElement)
{ }
@Override
public void onMediaPlay(BaseCardElement mediaElement, RenderedAdaptiveCard renderedAdaptiveCard)
{
// Your logic here, i.e.
showToast("Media started: " + mediaElement, Toast.LENGTH_LONG);
}
@Override
public void onMediaStop(BaseCardElement mediaElement, RenderedAdaptiveCard renderedAdaptiveCard)
{
// Your logic here, i.e.
showToast("Media ended playing: " + mediaElement, Toast.LENGTH_LONG);
}
}