• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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