1 /*
2 * Copyright (c) 2024 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 #ifndef LOG_TAG
16 #define LOG_TAG "AudioAdapterManagerHandler"
17 #endif
18
19 #include "audio_adapter_manager_handler.h"
20 #include "audio_policy_manager_factory.h"
21
22 namespace OHOS {
23 namespace AudioStandard {
24 namespace {
25 constexpr int32_t MAX_DELAY_TIME = 4 * 1000;
26 }
AudioAdapterManagerHandler()27 AudioAdapterManagerHandler::AudioAdapterManagerHandler() : AppExecFwk::EventHandler(
28 AppExecFwk::EventRunner::Create("OS_APAdapterAsyncRunner", AppExecFwk::ThreadMode::FFRT))
29 {
30 AUDIO_DEBUG_LOG("ctor");
31 }
32
~AudioAdapterManagerHandler()33 AudioAdapterManagerHandler::~AudioAdapterManagerHandler()
34 {
35 AUDIO_WARNING_LOG("dtor should not happen");
36 };
37
SendKvDataUpdate(const bool & isFirstBoot)38 bool AudioAdapterManagerHandler::SendKvDataUpdate(const bool &isFirstBoot)
39 {
40 bool ret = true;
41 #ifndef TEST_COVERAGE
42 auto eventContextObj = std::make_shared<bool>(isFirstBoot);
43 lock_guard<mutex> runnerlock(runnerMutex_);
44 if (isFirstBoot) {
45 ret = SendEvent(AppExecFwk::InnerEvent::Get(EventAdapterManagerServerCmd::DATABASE_UPDATE, eventContextObj),
46 MAX_DELAY_TIME);
47 } else {
48 ret = SendEvent(AppExecFwk::InnerEvent::Get(EventAdapterManagerServerCmd::DATABASE_UPDATE, eventContextObj));
49 }
50 CHECK_AND_RETURN_RET_LOG(ret, ret, "SendKvDataUpdate event failed");
51 #endif
52 return ret;
53 }
54
SendSaveVolume(const DeviceType & deviceType,const AudioStreamType & streamType,const int32_t & volumeLevel,std::string networkId)55 bool AudioAdapterManagerHandler::SendSaveVolume(const DeviceType &deviceType,
56 const AudioStreamType &streamType, const int32_t &volumeLevel, std::string networkId)
57 {
58 auto eventContextObj = std::make_shared<VolumeDataEvent>(deviceType, streamType, volumeLevel, networkId);
59 lock_guard<mutex> runnerlock(runnerMutex_);
60 bool ret = true;
61 ret = SendEvent(AppExecFwk::InnerEvent::Get(EventAdapterManagerServerCmd::VOLUME_DATABASE_SAVE, eventContextObj));
62 CHECK_AND_RETURN_RET_LOG(ret, ret, "SendSaveVolume event failed");
63 return ret;
64 }
65
SendSaveVolumeDegree(DeviceType deviceType,AudioStreamType streamType,int32_t volumeDegree,std::string networkId)66 bool AudioAdapterManagerHandler::SendSaveVolumeDegree(DeviceType deviceType, AudioStreamType streamType,
67 int32_t volumeDegree, std::string networkId)
68 {
69 auto eventContextObj = std::make_shared<VolumeDataEvent>(deviceType, streamType, 0, networkId);
70 CHECK_AND_RETURN_RET_LOG(eventContextObj != nullptr, false, "EventContextObj get nullptr");
71 eventContextObj->volumeDegree_ = volumeDegree;
72 lock_guard<mutex> runnerlock(runnerMutex_);
73 bool ret = SendEvent(AppExecFwk::InnerEvent::Get(
74 EventAdapterManagerServerCmd::VOLUME_DEGREE_DATABASE_SAVE, eventContextObj));
75 CHECK_AND_RETURN_RET_LOG(ret, ret, "send event failed");
76 return ret;
77 }
78
SendStreamMuteStatusUpdate(const AudioStreamType & streamType,const bool & mute,const StreamUsage & streamUsage,const DeviceType & deviceType,std::string networkId)79 bool AudioAdapterManagerHandler::SendStreamMuteStatusUpdate(const AudioStreamType &streamType, const bool &mute,
80 const StreamUsage &streamUsage, const DeviceType &deviceType, std::string networkId)
81 {
82 bool ret = true;
83 #ifndef TEST_COVERAGE
84 auto eventContextObj = std::make_shared<StreamMuteStatusEvent>(streamType, mute, streamUsage,
85 deviceType, networkId);
86 lock_guard<mutex> runnerlock(runnerMutex_);
87 ret = SendEvent(AppExecFwk::InnerEvent::Get(EventAdapterManagerServerCmd::STREAM_MUTE_STATUS_UPDATE,
88 eventContextObj));
89 CHECK_AND_RETURN_RET_LOG(ret, ret, "SendStreamMuteStatusUpdate event failed");
90 #endif
91 return ret;
92 }
93
SendRingerModeUpdate(const AudioRingerMode & ringerMode)94 bool AudioAdapterManagerHandler::SendRingerModeUpdate(const AudioRingerMode &ringerMode)
95 {
96 auto eventContextObj = std::make_shared<RingerModeEvent>(ringerMode);
97 lock_guard<mutex> runnerlock(runnerMutex_);
98 bool ret = true;
99 ret = SendEvent(AppExecFwk::InnerEvent::Get(EventAdapterManagerServerCmd::RINGER_MODE_UPDATE, eventContextObj));
100 CHECK_AND_RETURN_RET_LOG(ret, ret, "SendRingerModeUpdate event failed");
101 return ret;
102 }
103
HandleUpdateKvDataEvent(const AppExecFwk::InnerEvent::Pointer & event)104 void AudioAdapterManagerHandler::HandleUpdateKvDataEvent(const AppExecFwk::InnerEvent::Pointer &event)
105 {
106 std::shared_ptr<bool> eventContextObj = event->GetSharedObject<bool>();
107 CHECK_AND_RETURN_LOG(eventContextObj != nullptr, "EventContextObj get nullptr");
108 bool isFristBoot = *eventContextObj;
109 AudioPolicyManagerFactory::GetAudioPolicyManager().HandleKvData(isFristBoot);
110 }
111
HandleVolumeDataBaseSave(const AppExecFwk::InnerEvent::Pointer & event)112 void AudioAdapterManagerHandler::HandleVolumeDataBaseSave(const AppExecFwk::InnerEvent::Pointer &event)
113 {
114 std::shared_ptr<VolumeDataEvent> eventContextObj = event->GetSharedObject<VolumeDataEvent>();
115 CHECK_AND_RETURN_LOG(eventContextObj != nullptr, "EventContextObj get nullptr");
116 AudioPolicyManagerFactory::GetAudioPolicyManager().HandleSaveVolume(eventContextObj->deviceType_,
117 eventContextObj->streamType_, eventContextObj->volumeLevel_, eventContextObj->networkId_);
118 }
119
HandleVolumeDegreeDataBaseSave(const AppExecFwk::InnerEvent::Pointer & event)120 void AudioAdapterManagerHandler::HandleVolumeDegreeDataBaseSave(const AppExecFwk::InnerEvent::Pointer &event)
121 {
122 std::shared_ptr<VolumeDataEvent> eventContextObj = event->GetSharedObject<VolumeDataEvent>();
123 CHECK_AND_RETURN_LOG(eventContextObj != nullptr, "EventContextObj get nullptr");
124 AudioPolicyManagerFactory::GetAudioPolicyManager().HandleSaveVolumeDegree(eventContextObj->deviceType_,
125 eventContextObj->streamType_, eventContextObj->volumeDegree_, eventContextObj->networkId_);
126 }
127
HandleUpdateStreamMuteStatus(const AppExecFwk::InnerEvent::Pointer & event)128 void AudioAdapterManagerHandler::HandleUpdateStreamMuteStatus(const AppExecFwk::InnerEvent::Pointer &event)
129 {
130 std::shared_ptr<StreamMuteStatusEvent> eventContextObj = event->GetSharedObject<StreamMuteStatusEvent>();
131 CHECK_AND_RETURN_LOG(eventContextObj != nullptr, "EventContextObj get nullptr");
132 AudioPolicyManagerFactory::GetAudioPolicyManager().HandleStreamMuteStatus(eventContextObj->streamType_,
133 eventContextObj->mute_, eventContextObj->streamUsage_, eventContextObj->deviceType_,
134 eventContextObj->networkId_);
135 }
136
HandleUpdateRingerMode(const AppExecFwk::InnerEvent::Pointer & event)137 void AudioAdapterManagerHandler::HandleUpdateRingerMode(const AppExecFwk::InnerEvent::Pointer &event)
138 {
139 std::shared_ptr<RingerModeEvent> eventContextObj = event->GetSharedObject<RingerModeEvent>();
140 CHECK_AND_RETURN_LOG(eventContextObj != nullptr, "EventContextObj get nullptr");
141 AudioPolicyManagerFactory::GetAudioPolicyManager().HandleRingerMode(eventContextObj->ringerMode_);
142 }
143
ReleaseEventRunner()144 void AudioAdapterManagerHandler::ReleaseEventRunner()
145 {
146 AUDIO_INFO_LOG("release all events");
147 SetEventRunner(nullptr);
148 }
149
ProcessEvent(const AppExecFwk::InnerEvent::Pointer & event)150 void AudioAdapterManagerHandler::ProcessEvent(const AppExecFwk::InnerEvent::Pointer &event)
151 {
152 uint32_t eventId = event->GetInnerEventId();
153 AUDIO_DEBUG_LOG("handler process eventId:%{public}u", eventId);
154
155 switch (eventId) {
156 case EventAdapterManagerServerCmd::DATABASE_UPDATE:
157 HandleUpdateKvDataEvent(event);
158 break;
159 case EventAdapterManagerServerCmd::VOLUME_DATABASE_SAVE:
160 HandleVolumeDataBaseSave(event);
161 break;
162 case STREAM_MUTE_STATUS_UPDATE:
163 HandleUpdateStreamMuteStatus(event);
164 break;
165 case RINGER_MODE_UPDATE:
166 HandleUpdateRingerMode(event);
167 break;
168 case VOLUME_DEGREE_DATABASE_SAVE:
169 HandleVolumeDegreeDataBaseSave(event);
170 break;
171 default:
172 break;
173 }
174 }
175 } // namespace AudioStandard
176 } // namespace OHOS
177