/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsISupports.idl"

[scriptable, builtinclass, uuid(b76a3de4-79f4-4cbb-a0e2-871095eacb2c)]
interface nsIAudioManager : nsISupports
{
  /**
   * Microphone muted?
   */
  attribute boolean microphoneMuted;

  /**
   * The master volume.
   */
  attribute float masterVolume;

  /**
   * Master volume muted?
   */
  attribute boolean masterMuted;

  /**
   * Are we playing audio from the FM radio?
   */
  attribute boolean fmRadioAudioEnabled;
 
  /**
   * Set the phone's audio mode.
   */
  const long PHONE_STATE_INVALID          = -2;
  const long PHONE_STATE_CURRENT          = -1;
  const long PHONE_STATE_NORMAL           = 0;
  const long PHONE_STATE_RINGTONE         = 1;
  const long PHONE_STATE_IN_CALL          = 2;
  const long PHONE_STATE_IN_COMMUNICATION = 3;

  attribute long phoneState;

  /**
   * Configure a particular device ("force") to be used for one of the uses
   * (communication, media playback, etc.)
   */
  const long FORCE_NONE            = 0; // the default
  const long FORCE_SPEAKER         = 1;
  const long FORCE_HEADPHONES      = 2;
  const long FORCE_BT_SCO          = 3;
  const long FORCE_BT_A2DP         = 4;
  const long FORCE_WIRED_ACCESSORY = 5;
  const long FORCE_BT_CAR_DOCK     = 6;
  const long FORCE_BT_DESK_DOCK    = 7;

  const long USE_COMMUNICATION     = 0;
  const long USE_MEDIA             = 1;
  const long USE_RECORD            = 2;
  const long USE_DOCK              = 3;

  void setForceForUse(in long usage, in long force);
  long getForceForUse(in long usage);

  /**
   * Control the volume of various audio streams
   */
  const long STREAM_TYPE_VOICE_CALL = 0;
  const long STREAM_TYPE_SYSTEM = 1;
  const long STREAM_TYPE_RING = 2;
  const long STREAM_TYPE_MUSIC = 3;
  const long STREAM_TYPE_ALARM = 4;
  const long STREAM_TYPE_NOTIFICATION = 5;
  const long STREAM_TYPE_BLUETOOTH_SCO = 6;
  const long STREAM_TYPE_ENFORCED_AUDIBLE = 7;
  const long STREAM_TYPE_DTMF = 8;
  const long STREAM_TYPE_TTS = 9;
  const long STREAM_TYPE_FM = 10;

  void setStreamVolumeIndex(in long stream, in long index);
  long getStreamVolumeIndex(in long stream);
  long getMaxStreamVolumeIndex(in long stream);
};
