Beispiel #1
0
        private static string GetKeywordConfigurationStatusDescription(ActivationSignalDetectionConfiguration config, string configName)
        {
            string status = string.Empty;

            if (!config.AvailabilityInfo.HasSystemResourceAccess)
            {
                status = $"Voice activation is unavailable for {configName}. Please verify against keyword conflicts.";
            }
            else if (!config.AvailabilityInfo.IsEnabled)
            {
                status = $"{configName} is programmatically disabled by the app.";
            }
            else if (!config.AvailabilityInfo.HasPermission)
            {
                // Lack of permission is not config specific and is already accounted for, so do not add that here.
            }
            else if (!config.IsActive)
            {
                status = $"{configName} is unavailable for an unknown reason.";
            }

            return(status);
        }
Beispiel #2
0
        /// <summary>
        /// Queries the Conversational Agent Platform for the current state of the selected
        /// configuration and generates a UIAudioStatus object representing the state of voice
        /// activation.
        /// </summary>
        /// <returns> A UIAudioStatus representing current voice activation state. </returns>
        public static async Task <UIAudioStatus> GetVoiceActivationStatusAsync()
        {
            var services            = (App.Current as App).Services;
            var keywordRegistration = services.GetRequiredService <IKeywordRegistration>();
            var agentSessionManager = services.GetRequiredService <IAgentSessionManager>();

            var session = await agentSessionManager.GetSessionAsync();

            var configs = await keywordRegistration.GetOrCreateKeywordConfigurationsAsync();

            var audioControl = await AudioCaptureControl.GetInstanceAsync();

            string        glyph  = Glyphs.Cancel;
            Color         color  = Colors.Red;
            List <string> status = new List <string>();
            ActivationSignalDetectionConfiguration swKeywordConfiguration      = null;
            ActivationSignalDetectionConfiguration hwKeywordConfiguration      = null;
            ActivationSignalDetectionConfiguration defaultKeywordConfiguration = null;

            foreach (var configuration in configs)
            {
                string modelDataType = await configuration.GetModelDataTypeAsync();

                if (string.IsNullOrEmpty(modelDataType))
                {
                    hwKeywordConfiguration = configuration;
                }
                else
                {
                    swKeywordConfiguration = configuration;
                }
            }

            if (swKeywordConfiguration != null)
            {
                defaultKeywordConfiguration = swKeywordConfiguration;
            }
            else if (hwKeywordConfiguration != null)
            {
                defaultKeywordConfiguration = hwKeywordConfiguration;
            }

            if (session == null)
            {
                status.Add("Unable to obtain agent session. Please verify registration.");
            }
            else if (configs.Count == 0)
            {
                status.Add("No valid keyword configuration. Please check your source code configuration.");
            }
            else if (swKeywordConfiguration != null && !swKeywordConfiguration.AvailabilityInfo.HasPermission)
            {
                status.Add("Voice activation permissions are currently denied.");
            }
            else if (hwKeywordConfiguration != null && !hwKeywordConfiguration.AvailabilityInfo.HasPermission)
            {
                status.Add("Voice activation permissions are currently denied.");
            }
            else if (audioControl.CaptureMuted || audioControl.CaptureVolumeLevel < 5f)
            {
                glyph = Glyphs.Warning;
                color = Colors.DarkOrange;
                status.Add("Voice activation is available but may be degraded due to microphone state.");
            }
            else if (!MVARegistrationHelpers.IsBackgroundTaskRegistered)
            {
                glyph = Glyphs.Warning;
                color = Colors.DarkOrange;
                status.Add("Background task is not configured and voice activation will only work while the application is already active.");
            }
            else if (VoiceActivationIsPowerRestricted())
            {
                glyph = Glyphs.Warning;
                color = Colors.DarkOrange;
                status.Add("The system is currently power restricted and voice activation may not be available.");
            }
            else if (swKeywordConfiguration != null && swKeywordConfiguration.AvailabilityInfo.IsEnabled && MVARegistrationHelpers.IsBackgroundTaskRegistered)
            {
                glyph = Glyphs.FeedbackApp;
                color = Colors.Green;
                status.Add(VoiceActivationEnabledMessage);
            }
            else if (hwKeywordConfiguration != null && hwKeywordConfiguration.AvailabilityInfo.IsEnabled && MVARegistrationHelpers.IsBackgroundTaskRegistered)
            {
                glyph = Glyphs.FeedbackApp;
                color = Colors.Green;
                status.Add(VoiceActivationEnabledMessage);
            }
            else
            {
                glyph = Glyphs.Warning;
                color = Colors.DarkOrange;
            }

            if (swKeywordConfiguration != null)
            {
                string configStatus = GetKeywordConfigurationStatusDescription(swKeywordConfiguration, "swKeywordConfig");
                if (!string.IsNullOrEmpty(configStatus))
                {
                    status.Add(configStatus);
                }
            }

            if (hwKeywordConfiguration != null)
            {
                string configStatus = GetKeywordConfigurationStatusDescription(hwKeywordConfiguration, "hwKeywordConfig");
                if (!string.IsNullOrEmpty(configStatus))
                {
                    status.Add(configStatus);
                }
            }

            return(new UIAudioStatus(glyph, color, status));
        }