Configurable SDKClient

The SDKClient consists of the SDKClientBuilder and the SDKClientRegistry. Together they provide a configurable method to allow you to add AVS Device SDK features to your device.

The AVS Device SDK provides a few feature clients to conveniently add functionality to your applications by building on top of the functionality provided by the DefaultClient. You can use the SDKClientBuilder to construct these features in an appropriate order and make them available via the SDKClientRegistry. The DefaultClient is provided as one of the feature clients.

Feature clients

Feature Client Description Depends on
AlexaPresentationFeatureClient Provides support for APL directives through the use of Alexa.Presentation and Alexa.Presentation.APL components DefaultClient
PresentationOrchestratorFeatureClient Provides functionality to manage and track the lifecycle of presentations across multiple windows through the use of the PresentationOrchestrator, PresentationOrchestratorClient, and VisualTimeoutManager components VisualStateTrackerFeatureClient
VisualCharacteristicsFeatureClient Provides functionality to report the visual characteristics of a device through the use of the VisualCharacteristics and VisualCharacteristicsSerializer components DefaultClient
VisualStateTrackerFeatureClient (optional)
VisualStateTrackerFeatureClient Provides visual state tracking functionality through the use of the VisualActivityTracker and PresentationOrchestratorStateTracker components DefaultClient

The IPCServerSampleApp shows how to use all these feature clients to create a Smart Screen Sample Application.

For example:

/*
 * Creating the various feature clients which will add all the features that are used by the application.
 * The FeatureClientBuilder will glue them all together and build a single client which can access them
 */
sdkClient::SDKClientBuilder sdkClientBuilder;

/*
 * Creating the DefaultClient builder - this client builds most of the core functionality required by the
 * application
 */
auto defaultClientBuilder = defaultClient::DefaultClientBuilder::create(...);
sdkClientBuilder.withFeature(std::move(defaultClientBuilder));

/**
 * Creating the VisualCharacteristicsFeatureClientBuilder, this will add visual characteristics features to the
 * application
 */
auto visualCharacteristicsFeatureBuilder = featureClient::VisualCharacteristicsFeatureClientBuilder::create();
sdkClientBuilder.withFeature(std::move(visualCharacteristicsFeatureBuilder));

/**
 * Creating the VisualStateTrackerFeatureClientBuilder, this will add visual state tracking features to the
 * application
 */
auto visualStateTrackerFeatureBuilder = featureClient::VisualStateTrackerFeatureClientBuilder::create();
sdkClientBuilder.withFeature(std::move(visualStateTrackerFeatureBuilder));

/**
 * Creating the PresentationOrchestratorFeatureClientBuilder, this will add presentation orchestrator features to
 * the application
 */
auto presentationOrchestratorFeatureBuilder = featureClient::PresentationOrchestratorFeatureClientBuilder::create();
sdkClientBuilder.withFeature(std::move(presentationOrchestratorFeatureBuilder));

/**
 * Creating the AlexaPresentationFeatureClientBuilder, this will add APL features to the application
 */
auto alexaPresentationFeatureBuilder =
    featureClient::AlexaPresentationFeatureClientBuilder::create(APLVersion, aplRuntimePresentationAdapter);
sdkClientBuilder.withFeature(std::move(alexaPresentationFeatureBuilder));

m_clientRegistry = sdkClientBuilder.build();
if (!m_clientRegistry) {
    ACSDK_CRITICAL(LX("Failed to build SDK Client!"));
    return false;
}

auto defaultClient = m_clientRegistry->get<defaultClient::DefaultClient>();
auto poFeatureClient = m_clientRegistry->get<featureClient::PresentationOrchestratorFeatureClient>();
auto aplFeatureClient = m_clientRegistry->get<featureClient::AlexaPresentationFeatureClient>();