1 /*
2  * Copyright (c) 2022-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 
16 #ifndef OHOS_AVCONTROLLER_CALLBACK_STUB_H
17 #define OHOS_AVCONTROLLER_CALLBACK_STUB_H
18 
19 #include <map>
20 #include "iavcontroller_callback.h"
21 #include "iremote_stub.h"
22 
23 namespace OHOS::AVSession {
24 class AVControllerCallbackStub : public IRemoteStub<IAVControllerCallback> {
25 public:
26     int32_t OnRemoteRequest(uint32_t code, MessageParcel& data, MessageParcel& reply, MessageOption& option) override;
27 
28 private:
29 
30     int32_t HandleOnSessionDestroy(MessageParcel& data, MessageParcel& reply);
31 
32     int32_t HandleOnAVCallMetadataChange(MessageParcel& data, MessageParcel& reply);
33 
34     int32_t HandleOnAVCallStateChange(MessageParcel& data, MessageParcel& reply);
35 
36     int32_t HandleOnPlaybackStateChange(MessageParcel& data, MessageParcel& reply);
37 
38     int32_t HandleOnMetadataChange(MessageParcel& data, MessageParcel& reply);
39 
40     int32_t HandleOnActiveStateChange(MessageParcel& data, MessageParcel& reply);
41 
42     int32_t HandleOnValidCommandChange(MessageParcel& data, MessageParcel& reply);
43 
44     int32_t HandleOnOutputDeviceChange(MessageParcel& data, MessageParcel& reply);
45 
46     int32_t HandleOnSessionEventChange(MessageParcel& data, MessageParcel& reply);
47 
48     int32_t HandleOnQueueItemsChange(MessageParcel& data, MessageParcel& reply);
49 
50     int32_t HandleOnQueueTitleChange(MessageParcel& data, MessageParcel& reply);
51 
52     int32_t HandleOnExtrasChange(MessageParcel& data, MessageParcel& reply);
53 
54     static bool CheckInterfaceToken(MessageParcel& data);
55 
56     using HandlerFunc = std::function<int32_t(MessageParcel&, MessageParcel&)>;
57     std::map<uint32_t, HandlerFunc> handlers = {
58         {CONTROLLER_CMD_ON_SESSION_DESTROY,
59             [this](MessageParcel& data, MessageParcel& reply) { return HandleOnSessionDestroy(data, reply); }},
60         {CONTROLLER_CMD_ON_PLAYBACK_STATE_CHANGE,
61             [this](MessageParcel& data, MessageParcel& reply) { return HandleOnPlaybackStateChange(data, reply); }},
62         {CONTROLLER_CMD_ON_METADATA_CHANGE,
63             [this](MessageParcel& data, MessageParcel& reply) { return HandleOnMetadataChange(data, reply); }},
64         {CONTROLLER_CMD_ON_ACTIVE_STATE_CHANGE,
65             [this](MessageParcel& data, MessageParcel& reply) { return HandleOnActiveStateChange(data, reply); }},
66         {CONTROLLER_CMD_ON_VALID_COMMAND_CHANGE,
67             [this](MessageParcel& data, MessageParcel& reply) { return HandleOnValidCommandChange(data, reply); }},
68         {CONTROLLER_CMD_ON_OUTPUT_DEVICE_CHANGE,
69             [this](MessageParcel& data, MessageParcel& reply) { return HandleOnOutputDeviceChange(data, reply); }},
70         {CONTROLLER_CMD_ON_SET_SESSION_EVENT,
71             [this](MessageParcel& data, MessageParcel& reply) { return HandleOnSessionEventChange(data, reply); }},
72         {CONTROLLER_CMD_ON_QUEUE_ITEMS_CHANGE,
73             [this](MessageParcel& data, MessageParcel& reply) { return HandleOnQueueItemsChange(data, reply); }},
74         {CONTROLLER_CMD_ON_QUEUE_TITLE_CHANGE,
75             [this](MessageParcel& data, MessageParcel& reply) { return HandleOnQueueTitleChange(data, reply); }},
76         {CONTROLLER_CMD_ON_SET_EXTRAS_EVENT,
77             [this](MessageParcel& data, MessageParcel& reply) { return HandleOnExtrasChange(data, reply); }},
78         {CONTROLLER_CMD_ON_AVCALL_METADATA_CHANGE,
79             [this](MessageParcel& data, MessageParcel& reply) { return HandleOnAVCallMetadataChange(data, reply); }},
80         {CONTROLLER_CMD_ON_AVCALL_STATE_CHANGE,
81             [this](MessageParcel& data, MessageParcel& reply) { return HandleOnAVCallStateChange(data, reply); }}
82     };
83 
84     int32_t MAX_IMAGE_SIZE = 10 * 1024 * 1024;
85 
86     std::mutex onMetadataChangeLock_;
87     std::mutex onPlaybackChangeLock_;
88     std::mutex onValidCommandChangeLock_;
89 };
90 }
91 #endif // OHOS_AVCONTROLLER_CALLBACK_STUB_H