Intent is used to instruct a module to perform an action. The intent contains the action name, the arguments for the action parameters, and an optional handler which explicitly specifies which module is meant to perform the action.
Modules can declare which actions they handle, and their associated parameters in their module facet. The modular framework will then index the module and treat it as a candidate for any incoming intents which contain the specified action, and don't have an explicit handler set.
When an intent is resolved the framework determines which module instance will handle it.
The framework then connects to the module's
fuchsia::modular::IntentHandler service, and calls
HandleIntent(). The framework will connect to the intent handler interface each time a new intent is seen for a particular module instance, and intents can be sent to modules which are already running. Modules are expected to handle the transition between different intents gracefully.
To illustrate the intended use of intents, consider the following fictional example: a new story has been created with a module displaying a list of restaurants and the module wants to show directions to the currently selected restaurant.
The restaurant module creates an intent with a
com.fuchsia.navigate action with two parameters
end, both of type
com.fuchsia.geolocation and passes it to the modular framework via
At this point, the framework will search for a module which has declared support for the
com.fuchsia.navigate action. Once such a module is found, it is added to the story and started. The framework then connects to the started module's
IntentHandler service and provides it with the intent.
At this point, the restaurant list module's selected restaurant changes. It again creates an intent, with the same action as before but with new location arguments and calls
The framework now knows there is already a module instance running (in this case
AddModuleToStory uses the
name parameter to identify module instances)o explicitly specify a which can handle the given action, and connects to its
IntentHandler interface and provides it with the new intent. The navigation module can then update its UI to display directions to the new restaurant.
If the restaurant module wanted a specific module (e.g.
Fuchsia Maps) to handle the intent, it would set the
Intent.handler to the component URL for the module.