// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

module ash.mojom;

// There is another copy of the VoiceInteractionState definition in
// //components/arc/common/voice_interaction_framework.mojom
// Please also update the other one if you change it.
// The duplicate definition is because we do not use extensible widely
// (crbug.com/731893).

// The initial state is NOT_READY, then it will either becomes STOPPED or
// RUNNING. If the mojo connection is lost, the state will be set back to
// NOT_READY.
enum VoiceInteractionState {
  // Voice interaction service is not ready yet, request sent will be waiting.
  NOT_READY = 0,
  // Voice interaction session is stopped.
  STOPPED,
  // Voice interaction session is currently running.
  RUNNING
};

enum AssistantAllowedState {
  // Assistant feature is allowed.
  ALLOWED = 0,
  // Disallowed because ARC++ is disallowed. There could be many specific
  // reasones why ARC++ is disallowed. This enum is a catch all. Some enums
  // below will show specific reasons.
  DISALLOWED_BY_ARC_DISALLOWED,
  // Disallowed because ARC++ is disabled by policy.
  DISALLOWED_BY_ARC_POLICY,
  // Disallowed because user's locale is not compatible.
  DISALLOWED_BY_LOCALE,
  // Disallowed because the feature flag is off.
  DISALLOWED_BY_FLAG,
  // Disallowed because current user is not primary user.
  DISALLOWED_BY_NONPRIMARY_USER,
  // Disallowed because current user is supervised user.
  DISALLOWED_BY_SUPERVISED_USER,
  // Disallowed because incognito mode.
  DISALLOWED_BY_INCOGNITO,
  // Disallowed because the device is in demo mode.
  DISALLOWED_BY_DEMO_MODE,
  // Disallowed because the device is in public session.
  DISALLOWED_BY_PUBLIC_SESSION,
  // Disallowed because the user's account type is currently not supported.
  DISALLOWED_BY_ACCOUNT_TYPE
};

// Allows observing changes to voice interaction status and settings.
interface VoiceInteractionObserver {
  // Called when voice interaction session state changes.
  OnVoiceInteractionStatusChanged(VoiceInteractionState state);

  // Called when voice interaction is enabled/disabled in settings.
  OnVoiceInteractionSettingsEnabled(bool enabled);

  // Called when voice interaction service is allowed/disallowed to access
  // the "context" (text and graphic content that is currently on screen).
  OnVoiceInteractionContextEnabled(bool enabled);

  // Called when hotword listening is enabled/disabled.
  OnVoiceInteractionHotwordEnabled(bool enabled);

  // Called when hotword is set to always on/only with power source.
  OnVoiceInteractionHotwordAlwaysOn(bool always_on);

  // Called when consent status is updated.
  OnVoiceInteractionConsentStatusUpdated(ConsentStatus consent_status);

  // Called when assistant feature allowed state has changed.
  OnAssistantFeatureAllowedChanged(AssistantAllowedState state);

  // Called when locale is changed in pref. The locale is in the format can be
  // "en-US" or simply "en". When locale is not set in pref, it returns empty
  // string.
  OnLocaleChanged(string locale);
};

// Interface for ash client (Chrome) to connect to the voice interaction
// controller, which notifies changes of voice interaction related flags.
interface VoiceInteractionController {
  // Called when the voice interaction state is changed.
  NotifyStatusChanged(VoiceInteractionState state);

  // Called when the voice interaction settings is enabled/disabled.
  NotifySettingsEnabled(bool enabled);

  // Called when the voice interaction context is enabled/disabled.
  // If context is enabled the screenshot will be passed in voice
  // interaction session.
  NotifyContextEnabled(bool enabled);

  // Called when the hotword listening is enabled/disabled.
  NotifyHotwordEnabled(bool enabled);

  // Called when the hotword is set to always on/only with power source.
  NotifyHotwordAlwaysOn(bool enabled);

  // Called when the consent status is obtained from the server.
  NotifyConsentStatus(ConsentStatus consent_status);

  // Notify if voice interaction feature is allowed or not. e.g. not allowed
  // if disabled by policy.
  NotifyFeatureAllowed(AssistantAllowedState state);

  // Called when the notification is enabled/disabled.
  NotifyNotificationEnabled(bool enabled);

  // Called when the locale is changed.
  NotifyLocaleChanged(string locale);

  // Called when the launch with mic open state is changed.
  NotifyLaunchWithMicOpen(bool launch_with_mic_open);

  // Add an observer.
  AddObserver(VoiceInteractionObserver observer);
};

// The status of the user's consent. The enum values cannot be changed because
// they are persisted on disk.
enum ConsentStatus {
  // The status is unknown.
  kUnknown = 0,

  // The user accepted activity control access.
  kActivityControlAccepted = 1,

  // The user is not authorized to give consent.
  kUnauthorized = 2,

  // The user's consent information is not found. This is typically the case
  // when consent from the user has never been requested.
  kNotFound = 3,
};
