1 /*
2 * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #ifdef RESSCHED_AUDIO_FRAMEWORK_ENABLE
16 #include "audio_observer.h"
17
18 #include "res_sched_log.h"
19 #include "res_sched_mgr.h"
20 #include "res_type.h"
21
22 namespace OHOS {
23 namespace ResourceSchedule {
MarshallingAudioRendererChangeInfo(const std::unique_ptr<AudioStandard::AudioRendererChangeInfo> & audioRendererChangeInfo,nlohmann::json & payload)24 void AudioObserver::MarshallingAudioRendererChangeInfo(
25 const std::unique_ptr<AudioStandard::AudioRendererChangeInfo> &audioRendererChangeInfo, nlohmann::json &payload)
26 {
27 if (audioRendererChangeInfo == nullptr) {
28 return;
29 }
30 payload["uid"] = std::to_string(audioRendererChangeInfo->clientUID);
31 payload["sessionId"] = std::to_string(audioRendererChangeInfo->sessionId);
32 payload["rendererState"] = static_cast<int32_t>(audioRendererChangeInfo->rendererState);
33
34 /* struct AudioRendererInfo */
35 payload["rendererInfo.contentType"] = static_cast<int32_t>(audioRendererChangeInfo->rendererInfo.contentType);
36 payload["rendererInfo.streamUsage"] = static_cast<int32_t>(audioRendererChangeInfo->rendererInfo.streamUsage);
37 }
38
OnRendererStateChange(const std::vector<std::unique_ptr<AudioStandard::AudioRendererChangeInfo>> & audioRendererChangeInfos)39 void AudioObserver::OnRendererStateChange(
40 const std::vector<std::unique_ptr<AudioStandard::AudioRendererChangeInfo>> &audioRendererChangeInfos)
41 {
42 for (const auto &audioRendererChangeInfo : audioRendererChangeInfos) {
43 RESSCHED_LOGD("enter AudioRenderStateObserver::OnRendererStateChange, state: %{public}d",
44 audioRendererChangeInfo->rendererState);
45 nlohmann::json payload;
46 MarshallingAudioRendererChangeInfo(audioRendererChangeInfo, payload);
47
48 ResSchedMgr::GetInstance().ReportData(ResType::RES_TYPE_AUDIO_RENDER_STATE_CHANGE,
49 audioRendererChangeInfo->rendererState, payload);
50 }
51 }
52
OnRingerModeUpdated(const AudioStandard::AudioRingerMode & ringerMode)53 void AudioObserver::OnRingerModeUpdated(const AudioStandard::AudioRingerMode &ringerMode)
54 {
55 if (ringerMode != mode_) {
56 RESSCHED_LOGD("enter AudioRingModeObserver::OnRingerModeUpdated, ringerMode: %{public}d", ringerMode);
57 mode_ = ringerMode;
58 const nlohmann::json payload = nlohmann::json::object();
59 ResSchedMgr::GetInstance().ReportData(ResType::RES_TYPE_AUDIO_RING_MODE_CHANGE, ringerMode, payload);
60 }
61 }
62
OnVolumeKeyEvent(AudioStandard::VolumeEvent volumeEvent)63 void AudioObserver::OnVolumeKeyEvent(AudioStandard::VolumeEvent volumeEvent)
64 {
65 RESSCHED_LOGD("enter AudioVolumeKeyObserver::OnVolumeKeyEvent, streamType: %{public}d, volumeLevel: %{public}d",
66 volumeEvent.volumeType, volumeEvent.volume);
67 nlohmann::json payload;
68 payload["volumeType"] = std::to_string(volumeEvent.volumeType);
69 payload["volumeLevel"] = std::to_string(volumeEvent.volume);
70 ResSchedMgr::GetInstance().ReportData(ResType::RES_TYPE_AUDIO_VOLUME_KEY_CHANGE,
71 volumeEvent.volume, payload);
72 }
73
OnPreferredOutputDeviceUpdated(const std::vector<sptr<AudioStandard::AudioDeviceDescriptor>> & descs)74 void AudioObserver::OnPreferredOutputDeviceUpdated(const std::vector<sptr<AudioStandard::AudioDeviceDescriptor>> &descs)
75 {
76 for (const auto &desc : descs) {
77 RESSCHED_LOGD("device change, id: %{public}d, type: %{public}d", desc->deviceId_, desc->deviceType_);
78 nlohmann::json payload;
79 payload["deviceType"] = std::to_string(desc->deviceType_);
80 payload["deviceId"] = std::to_string(desc->deviceId_);
81 ResSchedMgr::GetInstance().ReportData(ResType::RES_TYPE_OUTPUT_DEVICE_CHANGE,
82 desc->deviceId_, payload);
83 }
84 }
85 } // namespace ResourceSchedule
86 } // namespace OHOS
87 #endif
88