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)55 bool AudioAdapterManagerHandler::SendSaveVolume(const DeviceType &deviceType,
56 const AudioStreamType &streamType, const int32_t &volumeLevel)
57 {
58 auto eventContextObj = std::make_shared<VolumeDataEvent>(deviceType, streamType, volumeLevel);
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
SendStreamMuteStatusUpdate(const AudioStreamType & streamType,const bool & mute,const StreamUsage & streamUsage,const DeviceType & deviceType)66 bool AudioAdapterManagerHandler::SendStreamMuteStatusUpdate(const AudioStreamType &streamType, const bool &mute,
67 const StreamUsage &streamUsage, const DeviceType &deviceType)
68 {
69 bool ret = true;
70 #ifndef TEST_COVERAGE
71 auto eventContextObj = std::make_shared<StreamMuteStatusEvent>(streamType, mute, streamUsage, deviceType);
72 lock_guard<mutex> runnerlock(runnerMutex_);
73 ret = SendEvent(AppExecFwk::InnerEvent::Get(EventAdapterManagerServerCmd::STREAM_MUTE_STATUS_UPDATE,
74 eventContextObj));
75 CHECK_AND_RETURN_RET_LOG(ret, ret, "SendStreamMuteStatusUpdate event failed");
76 #endif
77 return ret;
78 }
79
SendRingerModeUpdate(const AudioRingerMode & ringerMode)80 bool AudioAdapterManagerHandler::SendRingerModeUpdate(const AudioRingerMode &ringerMode)
81 {
82 auto eventContextObj = std::make_shared<RingerModeEvent>(ringerMode);
83 lock_guard<mutex> runnerlock(runnerMutex_);
84 bool ret = true;
85 ret = SendEvent(AppExecFwk::InnerEvent::Get(EventAdapterManagerServerCmd::RINGER_MODE_UPDATE, eventContextObj));
86 CHECK_AND_RETURN_RET_LOG(ret, ret, "SendRingerModeUpdate event failed");
87 return ret;
88 }
89
HandleUpdateKvDataEvent(const AppExecFwk::InnerEvent::Pointer & event)90 void AudioAdapterManagerHandler::HandleUpdateKvDataEvent(const AppExecFwk::InnerEvent::Pointer &event)
91 {
92 std::shared_ptr<bool> eventContextObj = event->GetSharedObject<bool>();
93 CHECK_AND_RETURN_LOG(eventContextObj != nullptr, "EventContextObj get nullptr");
94 bool isFristBoot = *eventContextObj;
95 AudioPolicyManagerFactory::GetAudioPolicyManager().HandleKvData(isFristBoot);
96 }
97
HandleVolumeDataBaseSave(const AppExecFwk::InnerEvent::Pointer & event)98 void AudioAdapterManagerHandler::HandleVolumeDataBaseSave(const AppExecFwk::InnerEvent::Pointer &event)
99 {
100 std::shared_ptr<VolumeDataEvent> eventContextObj = event->GetSharedObject<VolumeDataEvent>();
101 CHECK_AND_RETURN_LOG(eventContextObj != nullptr, "EventContextObj get nullptr");
102 AudioPolicyManagerFactory::GetAudioPolicyManager().HandleSaveVolume(eventContextObj->deviceType_,
103 eventContextObj->streamType_, eventContextObj->volumeLevel_);
104 }
105
HandleUpdateStreamMuteStatus(const AppExecFwk::InnerEvent::Pointer & event)106 void AudioAdapterManagerHandler::HandleUpdateStreamMuteStatus(const AppExecFwk::InnerEvent::Pointer &event)
107 {
108 std::shared_ptr<StreamMuteStatusEvent> eventContextObj = event->GetSharedObject<StreamMuteStatusEvent>();
109 CHECK_AND_RETURN_LOG(eventContextObj != nullptr, "EventContextObj get nullptr");
110 AudioPolicyManagerFactory::GetAudioPolicyManager().HandleStreamMuteStatus(eventContextObj->streamType_,
111 eventContextObj->mute_, eventContextObj->streamUsage_, eventContextObj->deviceType_);
112 }
113
HandleUpdateRingerMode(const AppExecFwk::InnerEvent::Pointer & event)114 void AudioAdapterManagerHandler::HandleUpdateRingerMode(const AppExecFwk::InnerEvent::Pointer &event)
115 {
116 std::shared_ptr<RingerModeEvent> eventContextObj = event->GetSharedObject<RingerModeEvent>();
117 CHECK_AND_RETURN_LOG(eventContextObj != nullptr, "EventContextObj get nullptr");
118 AudioPolicyManagerFactory::GetAudioPolicyManager().HandleRingerMode(eventContextObj->ringerMode_);
119 }
120
ReleaseEventRunner()121 void AudioAdapterManagerHandler::ReleaseEventRunner()
122 {
123 AUDIO_INFO_LOG("release all events");
124 SetEventRunner(nullptr);
125 }
126
ProcessEvent(const AppExecFwk::InnerEvent::Pointer & event)127 void AudioAdapterManagerHandler::ProcessEvent(const AppExecFwk::InnerEvent::Pointer &event)
128 {
129 uint32_t eventId = event->GetInnerEventId();
130 AUDIO_DEBUG_LOG("handler process eventId:%{public}u", eventId);
131
132 switch (eventId) {
133 case EventAdapterManagerServerCmd::DATABASE_UPDATE:
134 HandleUpdateKvDataEvent(event);
135 break;
136 case EventAdapterManagerServerCmd::VOLUME_DATABASE_SAVE:
137 HandleVolumeDataBaseSave(event);
138 break;
139 case STREAM_MUTE_STATUS_UPDATE:
140 HandleUpdateStreamMuteStatus(event);
141 break;
142 case RINGER_MODE_UPDATE:
143 HandleUpdateRingerMode(event);
144 break;
145 default:
146 break;
147 }
148 }
149 } // namespace AudioStandard
150 } // namespace OHOS
151