• 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,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