Bumping gaia.json for 2 gaia revision(s) a=gaia-bump
[gecko.git] / dom / speakermanager / SpeakerManagerServiceChild.cpp
blobcb066d1e3f655a5e8a42acdaa91bd36f4f21c129
1 /* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
2 /* vim: set ts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "SpeakerManagerServiceChild.h"
8 #include "mozilla/Services.h"
9 #include "mozilla/StaticPtr.h"
10 #include "mozilla/unused.h"
11 #include "mozilla/dom/ContentChild.h"
12 #include "mozilla/dom/ContentParent.h"
13 #include "nsIObserverService.h"
14 #include "nsThreadUtils.h"
15 #include "AudioChannelService.h"
16 #include <cutils/properties.h>
18 using namespace mozilla;
19 using namespace mozilla::dom;
21 StaticRefPtr<SpeakerManagerServiceChild> gSpeakerManagerServiceChild;
23 // static
24 SpeakerManagerService*
25 SpeakerManagerServiceChild::GetOrCreateSpeakerManagerService()
27 MOZ_ASSERT(NS_IsMainThread());
29 // If we already exist, exit early
30 if (gSpeakerManagerServiceChild) {
31 return gSpeakerManagerServiceChild;
34 // Create new instance, register, return
35 nsRefPtr<SpeakerManagerServiceChild> service = new SpeakerManagerServiceChild();
37 gSpeakerManagerServiceChild = service;
39 return gSpeakerManagerServiceChild;
42 // static
43 SpeakerManagerService*
44 SpeakerManagerServiceChild::GetSpeakerManagerService()
46 MOZ_ASSERT(NS_IsMainThread());
48 return gSpeakerManagerServiceChild;
51 void
52 SpeakerManagerServiceChild::ForceSpeaker(bool aEnable, bool aVisible)
54 mVisible = aVisible;
55 mOrgSpeakerStatus = aEnable;
56 ContentChild *cc = ContentChild::GetSingleton();
57 if (cc) {
58 cc->SendSpeakerManagerForceSpeaker(aEnable && aVisible);
62 bool
63 SpeakerManagerServiceChild::GetSpeakerStatus()
65 ContentChild *cc = ContentChild::GetSingleton();
66 bool status = false;
67 if (cc) {
68 cc->SendSpeakerManagerGetSpeakerStatus(&status);
70 char propQemu[PROPERTY_VALUE_MAX];
71 property_get("ro.kernel.qemu", propQemu, "");
72 if (!strncmp(propQemu, "1", 1)) {
73 return mOrgSpeakerStatus;
75 return status;
78 void
79 SpeakerManagerServiceChild::Shutdown()
81 if (gSpeakerManagerServiceChild) {
82 gSpeakerManagerServiceChild = nullptr;
86 void
87 SpeakerManagerServiceChild::SetAudioChannelActive(bool aIsActive)
89 // Content process and switch to background with no audio and speaker forced.
90 // Then disable speaker
91 for (uint32_t i = 0; i < mRegisteredSpeakerManagers.Length(); i++) {
92 mRegisteredSpeakerManagers[i]->SetAudioChannelActive(aIsActive);
96 SpeakerManagerServiceChild::SpeakerManagerServiceChild()
98 MOZ_ASSERT(NS_IsMainThread());
99 AudioChannelService* audioChannelService = AudioChannelService::GetOrCreateAudioChannelService();
100 if (audioChannelService) {
101 audioChannelService->RegisterSpeakerManager(this);
103 MOZ_COUNT_CTOR(SpeakerManagerServiceChild);
106 SpeakerManagerServiceChild::~SpeakerManagerServiceChild()
108 AudioChannelService* audioChannelService = AudioChannelService::GetOrCreateAudioChannelService();
109 if (audioChannelService) {
110 audioChannelService->UnregisterSpeakerManager(this);
112 MOZ_COUNT_DTOR(SpeakerManagerServiceChild);
115 void
116 SpeakerManagerServiceChild::Notify()
118 for (uint32_t i = 0; i < mRegisteredSpeakerManagers.Length(); i++) {
119 mRegisteredSpeakerManagers[i]->DispatchSimpleEvent(NS_LITERAL_STRING("speakerforcedchange"));