• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 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 DEVICESTATUS_SERVICE_H
17 #define DEVICESTATUS_SERVICE_H
18 
19 #include <memory>
20 
21 #include <iremote_object.h>
22 #include <system_ability.h>
23 
24 #include "delegate_tasks.h"
25 #include "device_manager.h"
26 #include "devicestatus_delayed_sp_singleton.h"
27 #include "devicestatus_dumper.h"
28 #include "devicestatus_manager.h"
29 #include "devicestatus_srv_stub.h"
30 #include "drag_data.h"
31 #include "drag_manager.h"
32 #include "i_context.h"
33 #include "intention_service.h"
34 #include "iremote_dev_sta_callback.h"
35 #include "socket_session_manager.h"
36 #include "stationary_data.h"
37 #include "stream_server.h"
38 #include "timer_manager.h"
39 
40 namespace OHOS {
41 namespace Msdp {
42 namespace DeviceStatus {
43 enum class ServiceRunningState {STATE_NOT_START, STATE_RUNNING, STATE_EXIT};
44 class DeviceStatusService final : public IContext,
45                                   public StreamServer,
46                                   public SystemAbility,
47                                   public DeviceStatusSrvStub {
48     DECLARE_SYSTEM_ABILITY(DeviceStatusService)
49     DECLARE_DELAYED_SP_SINGLETON(DeviceStatusService);
50 public:
51     virtual void OnDump() override;
52     virtual void OnStart() override;
53     virtual void OnStop() override;
54 
55     IDelegateTasks& GetDelegateTasks() override;
56     IDeviceManager& GetDeviceManager() override;
57     ITimerManager& GetTimerManager() override;
58     IDragManager& GetDragManager() override;
59 
60     IDDMAdapter& GetDDM() override;
61     IPluginManager& GetPluginManager() override;
62     ISocketSessionManager& GetSocketSessionManager() override;
63     IInputAdapter& GetInput() override;
64     IDSoftbusAdapter& GetDSoftbus() override;
65 
66     void OnAddSystemAbility(int32_t saId, const std::string &deviceId) override;
67     void Subscribe(Type type, ActivityEvent event, ReportLatencyNs latency,
68         sptr<IRemoteDevStaCallback> callback) override;
69     void Unsubscribe(Type type, ActivityEvent event, sptr<IRemoteDevStaCallback> callback) override;
70     Data GetCache(const Type &type) override;
71     bool IsServiceReady() const;
72     int32_t Dump(int32_t fd, const std::vector<std::u16string> &args) override;
73 #ifdef MSDP_HIVIEWDFX_HISYSEVENT_ENABLE
74     void ReportSensorSysEvent(int32_t type, bool enable);
75 #endif
76     int32_t RegisterCoordinationListener(bool isCompatible = false) override;
77     int32_t UnregisterCoordinationListener(bool isCompatible = false) override;
78     int32_t PrepareCoordination(int32_t userData, bool isCompatible = false) override;
79     int32_t UnprepareCoordination(int32_t userData, bool isCompatible = false) override;
80     int32_t ActivateCoordination(int32_t userData, const std::string &remoteNetworkId, int32_t startDeviceId,
81         bool isCompatible = false) override;
82     int32_t DeactivateCoordination(int32_t userData, bool isUnchained, bool isCompatible = false) override;
83     int32_t GetCoordinationState(int32_t userData, const std::string &networkId,
84         bool isCompatible = false) override;
85     int32_t GetCoordinationState(const std::string &udId, bool &state) override;
86     int32_t StartDrag(const DragData &dragData) override;
87     int32_t StopDrag(const DragDropResult &dropResult) override;
88     int32_t UpdateDragStyle(DragCursorStyle style) override;
89     int32_t GetDragTargetPid() override;
90     int32_t GetUdKey(std::string &udKey) override;
91     int32_t AddDraglistener() override;
92     int32_t RemoveDraglistener() override;
93     int32_t AddSubscriptListener() override;
94     int32_t RemoveSubscriptListener() override;
95     int32_t SetDragWindowVisible(bool visible, bool isForce = false) override;
96     int32_t EnterTextEditorArea(bool enable) override;
97     int32_t GetShadowOffset(ShadowOffset &shadowOffset) override;
98     int32_t UpdateShadowPic(const ShadowInfo &shadowInfo) override;
99     int32_t GetDragData(DragData &dragData) override;
100     int32_t GetDragState(DragState &dragState) override;
101     int32_t GetDragAction(DragAction &dragAction) override;
102     int32_t GetExtraInfo(std::string &extraInfo) override;
103     int32_t AllocSocketFd(const std::string &programName, int32_t moduleType,
104     int32_t &toReturnClientFd, int32_t &tokenType) override;
105     void OnConnected(SessionPtr s) override;
106     void OnDisconnected(SessionPtr s) override;
107     int32_t AddEpoll(EpollEventType type, int32_t fd) override;
108     int32_t DelEpoll(EpollEventType type, int32_t fd);
109     bool IsRunning() const override;
110     int32_t AddHotAreaListener() override;
111     int32_t RemoveHotAreaListener() override;
112     int32_t UpdatePreviewStyle(const PreviewStyle &previewStyle) override;
113     int32_t UpdatePreviewStyleWithAnimation(const PreviewStyle &previewStyle,
114         const PreviewAnimation &animation) override;
115     int32_t GetDragSummary(std::map<std::string, int64_t> &summarys) override;
116     int32_t AddPrivilege() override;
117     int32_t EraseMouseIcon() override;
118 
119 private:
120     bool Init();
121     int32_t InitDelegateTasks();
122     int32_t InitTimerMgr();
123     int32_t InitMotionDrag();
124     void OnThread();
125     void OnSocketEvent(const struct epoll_event &ev);
126     void OnDelegateTask(const epoll_event &ev);
127     void OnTimeout(const epoll_event &ev);
128     void OnDeviceMgr(const epoll_event &ev);
129     int32_t EnableSocketSessionMgr(int32_t nRetries);
130     void DisableSocketSessionMgr();
131     int32_t EnableDevMgr(int32_t nRetries);
132     void DisableDevMgr();
133     void EnableDSoftbus();
134     void EnableDDM();
135 
136 #ifdef OHOS_BUILD_ENABLE_COORDINATION
137 #ifndef OHOS_BUILD_ENABLE_INTENTION_FRAMEWORK
138     int32_t OnAddHotAreaListener(int32_t pid);
139     int32_t OnRemoveHotAreaListener(int32_t pid);
140     int32_t OnRegisterCoordinationListener(int32_t pid);
141     int32_t OnUnregisterCoordinationListener(int32_t pid);
142     int32_t OnPrepareCoordination(int32_t pid, int32_t userData);
143     int32_t OnUnprepareCoordination(int32_t pid, int32_t userData);
144     int32_t OnActivateCoordination(int32_t pid, int32_t userData, const std::string &remoteNetworkId,
145         int32_t startDeviceId);
146     int32_t OnDeactivateCoordination(int32_t pid, int32_t userData, bool isUnchained);
147     int32_t OnGetCoordinationState(int32_t pid, int32_t userData, const std::string &networkId);
148     int32_t OnGetCoordinationStateSync(const std::string &udId, bool &state);
149 #endif // OHOS_BUILD_ENABLE_INTENTION_FRAMEWORK
150 #endif // OHOS_BUILD_ENABLE_COORDINATION
151 
152 private:
153     std::atomic<ServiceRunningState> state_ { ServiceRunningState::STATE_NOT_START };
154     std::thread worker_;
155     DelegateTasks delegateTasks_;
156     DeviceManager devMgr_;
157     TimerManager timerMgr_;
158     std::atomic<bool> ready_ { false };
159     std::shared_ptr<DeviceStatusManager> devicestatusManager_ { nullptr };
160     DragManager dragMgr_;
161     SocketSessionManager socketSessionMgr_;
162     std::unique_ptr<IDDMAdapter> ddm_;
163     std::unique_ptr<IInputAdapter> input_;
164     std::unique_ptr<IPluginManager> pluginMgr_;
165     std::unique_ptr<IDSoftbusAdapter> dsoftbus_;
166     sptr<IntentionService> intention_;
167 };
168 } // namespace DeviceStatus
169 } // namespace Msdp
170 } // namespace OHOS
171 #endif // DEVICESTATUS_SERVICE_H
172