• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 
16 #ifndef AUDIO_ZONE_CLIENT_H
17 #define AUDIO_ZONE_CLIENT_H
18 
19 #include "standard_audio_zone_client_stub.h"
20 #include "audio_zone_manager.h"
21 
22 namespace OHOS {
23 namespace AudioStandard {
24 
25 class AudioZoneClient : public StandardAudioZoneClientStub {
26 public:
27     AudioZoneClient();
28     ~AudioZoneClient();
29 
30     int32_t AddAudioZoneCallback(const std::shared_ptr<AudioZoneCallback> &callback);
31     void RemoveAudioZoneCallback();
32 
33     int32_t AddAudioZoneChangeCallback(int32_t zoneId, const std::shared_ptr<AudioZoneChangeCallback> &callback);
34     void RemoveAudioZoneChangeCallback(int32_t zoneId);
35 
36     int32_t AddAudioZoneVolumeProxy(int32_t zoneId, const std::shared_ptr<AudioZoneVolumeProxy> &proxy);
37     void RemoveAudioZoneVolumeProxy(int32_t zoneId);
38 
39     int32_t AddAudioInterruptCallback(int32_t zoneId, const std::shared_ptr<AudioZoneInterruptCallback> &callback);
40     int32_t AddAudioInterruptCallback(int32_t zoneId, const std::string &deviceTag,
41         const std::shared_ptr<AudioZoneInterruptCallback> &callback);
42     void RemoveAudioInterruptCallback(int32_t zoneId);
43     void RemoveAudioInterruptCallback(int32_t zoneId, const std::string &deviceTag);
44 
45     void Restore();
46 
47 private:
48         std::shared_ptr<AudioZoneCallback> audioZoneCallback_;
49         mutable std::mutex audioZoneCallbackMutex_;
50         std::unordered_map<int32_t, std::shared_ptr<AudioZoneChangeCallback>> audioZoneChangeCallbackMap_;
51         mutable std::mutex audioZoneChangeMutex_;
52         std::unordered_map<int32_t, std::shared_ptr<AudioZoneVolumeProxy>> audioZoneVolumeProxyMap_;
53         mutable std::mutex audioZoneVolumeProxyMutex_;
54         std::unordered_map<std::string, std::shared_ptr<AudioZoneInterruptCallback>> audioZoneInterruptCallbackMap_;
55         mutable std::mutex audioZoneInterruptMutex_;
56 
57         std::string GetInterruptKeyId(int32_t zoneId, const std::string &deviceTag);
58 
59         int32_t OnAudioZoneAdd(const AudioZoneDescriptor &zoneDescriptor) override;
60         int32_t OnAudioZoneRemove(int32_t zoneId) override;
61         int32_t OnAudioZoneChange(int32_t zoneId, const AudioZoneDescriptor &zoneDescriptor,
62             int32_t reason) override;
63         int32_t OnInterruptEvent(int32_t zoneId,
64             const std::vector<std::map<AudioInterrupt, int32_t>> &ipcInterrupts,
65             int32_t reason) override;
66         int32_t OnInterruptEvent(int32_t zoneId, const std::string &deviceTag,
67             const std::vector<std::map<AudioInterrupt, int32_t>> &ipcInterrupts,
68             int32_t reason) override;
69         int32_t SetSystemVolume(const int32_t zoneId, const int32_t volumeType,
70             const int32_t volumeLevel, const int32_t volumeFlag) override;
71         int32_t GetSystemVolume(int32_t zoneId, int32_t volumeType, float &outVolume) override;
72 };
73 } // namespace AudioStandard
74 } // namespace OHOS
75 #endif // AUDIO_ZONE_CLIENT_H