dom/speakermanager/SpeakerManager.h
author Wes Kocher <wkocher@mozilla.com>
Mon, 04 Apr 2016 15:41:17 -0700
changeset 315344 2e4a8e49b5421ca53853e2a614c4ce569d47d908
parent 305399 e22b3043887ed36bf2c634c2924a7c8d39d226b1
permissions -rw-r--r--
Backed out 5 changesets (bug 911216) for apparently tripling the runtime of SM(p) jobs along with introducing a failure in SM(p) Backed out changeset d70235224525 (bug 911216) Backed out changeset 2f503e373e6f (bug 911216) Backed out changeset 2e98f8b36bc6 (bug 911216) Backed out changeset bd5acdf4a2a1 (bug 911216) Backed out changeset 58716e562690 (bug 911216) MozReview-Commit-ID: 807ajHOZvQn

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* 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/. */

#ifndef mozilla_dom_SpeakerManager_h
#define mozilla_dom_SpeakerManager_h

#include "mozilla/DOMEventTargetHelper.h"
#include "mozilla/dom/MozSpeakerManagerBinding.h"

namespace mozilla {
namespace dom {
/* This class is used for UA to control devices's speaker status.
 * After UA set the speaker status, the UA should handle the
 * forcespeakerchange event and change the speaker status in UI.
 * The device's speaker status would set back to normal when UA close the application.
 */
class SpeakerManager final
  : public DOMEventTargetHelper
  , public nsIDOMEventListener
{
  friend class SpeakerManagerService;
  friend class SpeakerManagerServiceChild;

  NS_DECL_ISUPPORTS_INHERITED
  NS_DECL_NSIDOMEVENTLISTENER

public:
  void Init(nsPIDOMWindowInner* aWindow);

  nsPIDOMWindowInner* GetParentObject() const;

  virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
  /**
   * WebIDL Interface
   */
  // Get this api's force speaker setting.
  bool Forcespeaker();
  // Force acoustic sound go through speaker. Don't force to speaker if application
  // stay in the background and re-force when application
  // go to foreground
  void SetForcespeaker(bool aEnable);
  // Get the device's speaker forced setting.
  bool Speakerforced();

  void SetAudioChannelActive(bool aIsActive);
  IMPL_EVENT_HANDLER(speakerforcedchange)

  static already_AddRefed<SpeakerManager>
  Constructor(const GlobalObject& aGlobal, ErrorResult& aRv);

protected:
  SpeakerManager();
  ~SpeakerManager();
  void DispatchSimpleEvent(const nsAString& aStr);
  // This api's force speaker setting
  bool mForcespeaker;
  bool mVisible;
};

} // namespace dom
} // namespace mozilla

#endif // mozilla_dom_SpeakerManager_h