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 RegisterEventListener(Context &context, const CooperateEvent &event); 71 void UnregisterEventListener(Context &context, const CooperateEvent &event); 72 void OnBoardOnline(Context &context, const CooperateEvent &event); 73 void OnBoardOffline(Context &context, const CooperateEvent &event); 74 void OnProfileChanged(Context &context, const CooperateEvent &event); 75 void OnPointerEvent(Context &context, const CooperateEvent &event); 76 void OnSoftbusSubscribeMouseLocation(Context &context, const CooperateEvent &event); 77 void OnProcessClientDied(Context &context, const CooperateEvent &event); 78 void OnSoftbusUnSubscribeMouseLocation(Context &context, const CooperateEvent &event); 79 void OnSoftbusReplySubscribeMouseLocation(Context &context, const CooperateEvent &event); 80 void OnSoftbusReplyUnSubscribeMouseLocation(Context &context, const CooperateEvent &event); 81 void OnSoftbusMouseLocation(Context &context, const CooperateEvent &event); 82 void OnSoftbusSessionClosed(Context &context, const CooperateEvent &event); 83 void OnSoftbusSessionOpened(Context &context, const CooperateEvent &event); 84 void OnHotPlugEvent(Context &context, const CooperateEvent &event); 85 void OnRemoteStart(Context &context, const CooperateEvent &event); 86 void OnRemoteHotPlug(Context &context, const CooperateEvent &event); 87 void OnRemoteInputDevice(Context &context, const CooperateEvent &event); 88 void Transfer(Context &context, const CooperateEvent &event); 89 sptr<AppExecFwk::IAppMgr> GetAppMgr(); 90 int32_t RegisterApplicationStateObserver(Channel<CooperateEvent>::Sender sender, const EnableCooperateEvent &event); 91 std::string GetPackageName(Security::AccessToken::AccessTokenID tokenId); 92 void UnregisterApplicationStateObserver(); 93 void UpdateApplicationStateObserver(int32_t clientPid); 94 void AddSessionObserver(Context &context, const EnableCooperateEvent &event); 95 void RemoveSessionObserver(Context &context, const DisableCooperateEvent &event); 96 void OnCommonEvent(Context &context, const std::string &commonEvent); 97 void AddMonitor(Context &context); 98 void RemoveMonitor(Context &context); 99 void RemoveWatches(Context &context); 100 101 IContext *env_ { nullptr }; 102 std::map<CooperateEventType, std::function<void(Context&, const CooperateEvent&)>> handlers_; 103 size_t current_ { COOPERATE_STATE_FREE }; 104 std::array<std::shared_ptr<ICooperateState>, N_COOPERATE_STATES> states_; 105 std::set<std::string> onlineBoards_; 106 int32_t monitorId_ { -1 }; 107 std::vector<std::string> clientBundleNames_; 108 sptr<AppStateObserver> appStateObserver_ { nullptr }; 109 std::shared_ptr<ICommonEventObserver> observer_ { nullptr }; 110 bool isCooperateEnable_ { false }; 111 }; 112 } // namespace Cooperate 113 } // namespace DeviceStatus 114 } // namespace Msdp 115 } // namespace OHOS 116 #endif // COOPERATE_STATE_MACHINE_H 117