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