• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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 COOPERATE_STATE_MACHINE_H
17 #define COOPERATE_STATE_MACHINE_H
18 
19 #include "nocopyable.h"
20 
21 #include "accesstoken_kit.h"
22 #include "app_mgr_interface.h"
23 #include "application_state_observer_stub.h"
24 #include "iapplication_state_observer.h"
25 
26 #include "i_common_event_adapter.h"
27 #include "i_cooperate_state.h"
28 
29 namespace OHOS {
30 namespace Msdp {
31 namespace DeviceStatus {
32 namespace Cooperate {
33 class StateMachine final : public IStateMachine {
34 public:
35     StateMachine(IContext *env);
36     ~StateMachine() = default;
37     DISALLOW_COPY_AND_MOVE(StateMachine);
38 
39     void OnEvent(Context &context, const CooperateEvent &event);
40     bool IsCooperateEnable();
41 
42 private:
43     class AppStateObserver final : public AppExecFwk::ApplicationStateObserverStub {
44     public:
45         AppStateObserver(Channel<CooperateEvent>::Sender sender, int32_t clientPid);
46         ~AppStateObserver() = default;
47         void UpdateClientPid(int32_t clientPid);
48         void OnProcessDied(const AppExecFwk::ProcessData &processData) override;
49 
50     private:
51         Channel<CooperateEvent>::Sender sender_;
52         int32_t clientPid_;
53     };
54 
55 private:
56     void TransiteTo(Context &context, CooperateState state) override;
57     void AddHandler(CooperateEventType event, std::function<void(Context&, const CooperateEvent&)> handler);
58     void OnQuit(Context &context);
59     void AddObserver(Context &context, const CooperateEvent &event);
60     void RemoveObserver(Context &context, const CooperateEvent &event);
61     void RegisterListener(Context &context, const CooperateEvent &event);
62     void UnregisterListener(Context &context, const CooperateEvent &event);
63     void RegisterHotAreaListener(Context &context, const CooperateEvent &event);
64     void UnregisterHotAreaListener(Context &context, const CooperateEvent &event);
65     void EnableCooperate(Context &context, const CooperateEvent &event);
66     void DisableCooperate(Context &context, const CooperateEvent &event);
67     void StartCooperate(Context &context, const CooperateEvent &event);
68     void StopCooperate(Context &context, const CooperateEvent &event);
69     void GetCooperateState(Context &context, const CooperateEvent &event);
70     void StartCooperateWithOptions(Context &context, const CooperateEvent &event);
71     void RegisterEventListener(Context &context, const CooperateEvent &event);
72     void UnregisterEventListener(Context &context, const CooperateEvent &event);
73     void OnBoardOnline(Context &context, const CooperateEvent &event);
74     void OnBoardOffline(Context &context, const CooperateEvent &event);
75     void OnProfileChanged(Context &context, const CooperateEvent &event);
76     void OnPointerEvent(Context &context, const CooperateEvent &event);
77     void OnSoftbusSubscribeMouseLocation(Context &context, const CooperateEvent &event);
78     void OnProcessClientDied(Context &context, const CooperateEvent &event);
79     void OnSoftbusUnSubscribeMouseLocation(Context &context, const CooperateEvent &event);
80     void OnSoftbusReplySubscribeMouseLocation(Context &context, const CooperateEvent &event);
81     void OnSoftbusReplyUnSubscribeMouseLocation(Context &context, const CooperateEvent &event);
82     void OnSoftbusMouseLocation(Context &context, const CooperateEvent &event);
83     void OnSoftbusSessionClosed(Context &context, const CooperateEvent &event);
84     void OnSoftbusSessionOpened(Context &context, const CooperateEvent &event);
85     void OnHotPlugEvent(Context &context, const CooperateEvent &event);
86     void OnRemoteStart(Context &context, const CooperateEvent &event);
87     void OnRemoteHotPlug(Context &context, const CooperateEvent &event);
88     void OnRemoteInputDevice(Context &context, const CooperateEvent &event);
89     void UpdateVirtualDeviceIdMap(Context &context, const CooperateEvent &event);
90     void Transfer(Context &context, const CooperateEvent &event);
91     sptr<AppExecFwk::IAppMgr> GetAppMgr();
92     int32_t RegisterApplicationStateObserver(Channel<CooperateEvent>::Sender sender, const EnableCooperateEvent &event);
93     std::string GetPackageName(Security::AccessToken::AccessTokenID tokenId);
94     void UnregisterApplicationStateObserver();
95     void UpdateApplicationStateObserver(int32_t clientPid);
96     void AddSessionObserver(Context &context, const EnableCooperateEvent &event);
97     void RemoveSessionObserver(Context &context, const DisableCooperateEvent &event);
98     void OnCommonEvent(Context &context, const std::string &commonEvent);
99     void AddMonitor(Context &context);
100     void RemoveMonitor(Context &context);
101     void AddPreMonitor(Context &context);
102     void RemovePreMonitor(Context &context);
103     void RemoveWatches(Context &context);
104     void OnRemoteStartWithOptions(Context &context, const CooperateEvent &event);
105     bool CheckIsVirtualTrackpad(int32_t deviceId);
106     void ResetCooperate(Context &context);
107 
108     IContext *env_ { nullptr };
109     std::map<CooperateEventType, std::function<void(Context&, const CooperateEvent&)>> handlers_;
110     size_t current_ { COOPERATE_STATE_FREE };
111     std::array<std::shared_ptr<ICooperateState>, N_COOPERATE_STATES> states_;
112     std::set<std::string> onlineBoards_;
113     int32_t monitorId_ { -1 };
114     int32_t preMonitorId_ { -1 };
115     int32_t screenEventTimer_ { -1 };
116     std::vector<std::string> clientBundleNames_;
117     sptr<AppStateObserver> appStateObserver_ { nullptr };
118     std::shared_ptr<ICommonEventObserver> observer_ { nullptr };
119     bool isCooperateEnable_ { false };
120 };
121 } // namespace Cooperate
122 } // namespace DeviceStatus
123 } // namespace Msdp
124 } // namespace OHOS
125 #endif // COOPERATE_STATE_MACHINE_H
126